web-dev-qa-db-ja.com

APNデバイストークンは個々のアプリに固有ですか?

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

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

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

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

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

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

77
Mups

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

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

90
Mups

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デバイストークンは同じデバイスでは異なります も参照してください

52
jeff forest

Apple開発者からの私の理解といくつかの答えを共有する:

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

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

8

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

Appleによると、

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

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

  • Apple Push Notification Service(APN)で登録し、アプリ固有のデバイストークンを受け取ります。

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

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

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

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

Appleここでドキュメントを参照してください ローカルおよびリモート通知プログラミングガイド

1
Augustine P A

トークンを一意の識別子として使用することはできませんが、keygenで保存(iTunesのヘルプ)を使用して古いトークンを削除し、古いトークンを削除してデータベースに新しいトークンを追加します。

0
Nasir Munda