77

iTunes ストアに 2 つのアプリがあり、どちらもプッシュ通知を実装しています。これらの本番アプリへの通知の送信をテストしているときに、アプリ A を対象としたプッシュにタイトルが付けられ、アプリ B が開かれていることに気付きました。

これらのアプリは両方とも同じ電話にインストールされています。デバイス テーブルを調べたところ、2 つのアプリのデバイス トークン (およびもちろんデバイス ID) が両方とも同じであることがわかりました。

必要に応じて、サーバー上で 2 つの異なる証明書を使用しています (各アプリに 1 つずつ)。デバイストークンまたは証明書がメッセージを適切なアプリにルーティングすると想定していましたが、明らかにそうではありません。

NSLog で、各アプリから送信されるトークンが実際に同じであることを確認できます。

デバイス トークンは各アプリに固有のものにする必要がありますか? もしそうなら、テスト電話が両方のアプリの同じデバイストークンをサーバーに送信する方法を考えてください。これは、現在アプリ ストアにある 2 つのアプリのものであることに注意してください。

助けてくれてありがとう!

4

6 に答える 6

92

:これはiOS <= 6にのみ当てはまる古い回答です。現在のアプローチについては、user1641761の回答を参照してください。

理解した。デバイス トークンは、電話とアプリのペアリングに固有のものではありません。それらは電話機にのみ固有です。同じ電話でプッシュを使用する複数のアプリがある場合、それらはすべて同じデバイス トークンを使用します。通知の送信に使用する証明書によって、通知先のアプリが決まります。

于 2010-02-26T01:01:18.930 に答える
16

私の理解と Apple 開発者からのいくつかの回答を共有します。

  • デバイストークン
    • デバイス トークンは、デバイスの一意の識別子です。
    • APNs は、一意のデバイス証明書を使用してデバイス トークンを生成します (プロビジョニング プロファイルを使用する場合があります)。
    • デバイストークンは変更される可能性があります。そのため、更新されたデバイス トークンを毎回サーバーに送信するようにしてください。
    • デバイス トークンは、デバイス上のすべてのアプリで同じです。
    • これはデバイス固有であり、アプリ固有ではありません。
    • デバイス トークンは、サンドボックスと本番で異なる場合があります。
      • プロビジョニング プロファイル (サンドボックスまたは運用) に基づいて、APN は同じデバイスのサンドボックス用と運用用に異なるデバイス トークンを生成する場合があります。
    • では、プッシュ通知はデバイス上でどのように区別されるのでしょうか? どのアプリ向けですか?
      • これは、サーバーにインストールされたアプリ識別子と SSL 証明書に基づいて行われます (これを使用して、通知が APNs サーバーにプッシュされます)。
  • 参考文献
于 2013-12-11T13:12:42.987 に答える
8

とはいえ、Apple はデバイスの APNToken を適宜変更する権利を留保しているため、デバイスやユーザーを一意に識別するために使用しないでください。

于 2011-11-02T04:29:06.923 に答える
1

プッシュ通知のデバイス トークンはアプリ固有です。デバイス固有ではありません。つまり、デバイス トークンは、同じデバイス内の複数のアプリに対して異なり、一意になります。

アップルによれば、

リモート通知をサポートすることで、アプリが実行されていないときでも、アプリのユーザーに最新の情報を提供できます。リモート通知を受信して​​処理できるようにするには、アプリで次のことを行う必要があります。

  • リモート通知を有効にします。

  • Apple プッシュ通知サービス (APNs) に登録し、アプリ固有のデバイス トークンを受け取ります。

  • デバイス トークンを通知プロバイダー サーバーに送信します。

  • 着信リモート通知を処理するためのサポートを実装します。

アプリ固有のデバイス トークンはグローバルに一意であり、1 つのアプリとデバイスの組み合わせを識別します。アプリで APNs からデバイス トークンを受信したら、プロバイダーへのネットワーク接続を開くのはユーザーの責任です。また、アプリ内で、プロバイダーに送信するその他の関連データと共にデバイス トークンを転送する必要があります。プロバイダーが後でリモート通知要求を APNs に送信するときは、通知ペイロードと共にデバイス トークンを含める必要があります。詳細については、APN の概要を参照してください。

アプリでデバイス トークンをキャッシュしないでください。代わりに、必要なときにシステムから取得してください。APNs は、特定のイベントが発生したときにアプリに新しいデバイス トークンを発行します。たとえば、ユーザーがバックアップからデバイスを復元するとき、ユーザーがアプリを新しいデバイスにインストールするとき、およびユーザーがオペレーティング システムを再インストールするときなど、デバイス トークンは異なることが保証されます。キャッシュに依存するのではなく、トークンを取得すると、プロバイダーが APNs と通信するために必要な最新のデバイス トークンを確実に取得できます。デバイス トークンをフェッチしようとしても変更されていない場合、フェッチ メソッドはすぐに戻ります。

ここでアップルのドキュメントを参照できますLocal and Remote Notification Programming Guide

于 2017-07-27T11:51:11.020 に答える