ITunesストアには2つのアプリがあり、どちらもプッシュ通知を実装しています。これらのプロダクションアプリへの通知の送信をテストしているときに、アプリAを対象とするプッシュにタイトルが付けられ、アプリBを開くことに気付きました。
これらのアプリは両方とも同じ電話にインストールされます。デバイステーブルを見て、2つのアプリのデバイストークン(およびデバイスID)が両方とも同じであることがわかりました。
必要に応じて、サーバーで2つの異なる証明書を使用しています(各アプリに1つずつ)。デバイストークンまたは証明書がメッセージを適切なアプリにルーティングすると想定しましたが、明らかにそうではありません。
NSLogで、各アプリから送信されるトークンが実際に同じであることがわかります。
デバイストークンは各アプリに一意である必要がありますか?その場合、テスト用の電話が両方のアプリの同じデバイストークンをサーバーに送信する方法について考えてください。これは、現在アプリストアにある2つのアプリからのものであることに注意してください。
助けてくれてありがとう!
[〜#〜] note [〜#〜]:これiOS <= 6のみに当てはまる古い回答です。現在のアプローチについては ser1641761の回答 を参照してください。
理解した。デバイストークンは、電話とアプリのペアリングに固有のものではありません。それらは電話にのみ固有です。同じ電話にプッシュ機能を備えた複数のアプリがある場合、それらはすべて同じデバイストークンを使用します。通知の送信に使用する証明書によって、どのアプリに送信されるかが決まります。
iOS 7はこれを異なる方法で処理します。今はユニークです。
この記事のポイント1を参照してください: http://urbanairship.com/blog/2013/10/03/how-ios-7-handles-Push-differently
「iOS 7より前のデバイストークンは、特定のデバイスのすべてのアプリのインストールで同じでした。TapTap RevengeまたはUSA Todayのいずれであっても、携帯電話の異なるアプリは同じアドレス、つまりデバイストークンを使用してプッシュをルーティングしますメッセージとペアにするセキュリティ認証情報により、正しいアプリに到達することが保証されます。iOS7では、Appleはさらに一歩進んで、デバイストークンがアプリのインストールごとに異なります。これにより、別の電話レベルの識別子を削除することで、ユーザーのプライバシーをさらに保護できます。」
ios 7デバイストークンは同じデバイスでは異なります も参照してください
Apple開発者からの私の理解といくつかの答えを共有する:
ただし、AppleはデバイスAPNTokenを適切に変更する権利を留保するため、デバイス/ユーザーを一意に識別するために使用しないでください。
プッシュ通知用のデバイストークンはアプリ固有です。デバイス固有ではありません。つまり、デバイストークンは同じデバイス内の複数のアプリに対して異なり、一意になります。
Appleによると、
リモート通知をサポートすることにより、アプリが実行されていないときでも、アプリのユーザーに最新情報を提供できます。リモート通知を受信して処理できるようにするには、アプリで次のことを行う必要があります。
リモート通知を有効にします。
Apple Push Notification Service(APN)で登録し、アプリ固有のデバイストークンを受け取ります。
デバイストークンを通知プロバイダーサーバーに送信します。
着信リモート通知の処理のサポートを実装します。
アプリ固有のデバイストークンはグローバルに一意であり、アプリとデバイスの1つの組み合わせを識別します。アプリでAPNからデバイストークンを受け取ったら、プロバイダーへのネットワーク接続を開くのはあなたの責任です。また、アプリで、プロバイダーに送信する他の関連データとともにデバイストークンを転送することもお客様の責任です。プロバイダーが後でリモート通知要求をAPNに送信するとき、通知ペイロードと共にデバイストークンを含める必要があります。詳細については、APNの概要を参照してください。
アプリでデバイストークンをキャッシュしないでください。代わりに、必要なときにシステムから取得します。 APNsは、特定のイベントが発生すると、アプリに新しいデバイストークンを発行します。デバイストークンは、たとえば、ユーザーがバックアップからデバイスを復元するとき、ユーザーがアプリを新しいデバイスにインストールするとき、ユーザーがオペレーティングシステムを再インストールするときなど、異なることが保証されます。キャッシュに依存するのではなく、トークンを取得すると、プロバイダーがAPNと通信するために必要な現在のデバイストークンを確実に取得できます。デバイストークンをフェッチしようとしても、トークンが変更されていない場合、フェッチメソッドはすぐに戻ります。
Appleここでドキュメントを参照してください ローカルおよびリモート通知プログラミングガイド
トークンを一意の識別子として使用することはできませんが、keygenで保存(iTunesのヘルプ)を使用して古いトークンを削除し、古いトークンを削除してデータベースに新しいトークンを追加します。