APNSデバイストークンは、作成後に変更されますか?


99

作成されたプッシュ通知デバイストークンは変更されますか?

アプリが更新されたときの?またはそれ以外の場合は変更できますか?


この回答は、デバイストークンが変更される4つの場所に関するドキュメントを提供しているため、必ずご覧ください
Honey

回答:


71

[アップルドキュメントApplePushService] 2

トークン信頼のこのフェーズの形式により、APNのみがトークンを生成し、後でそれが受け入れられるようになります。また、デバイスから渡されたトークンが、その特定のデバイスに対して以前にプロビジョニングしたトークンと同じであることを確認できます。そのデバイス用。

ユーザーがバックアップデータを新しいデバイスに復元するか、オペレーティングシステムを再インストールすると、デバイストークンが変更されます。


現在のドキュメントは最後の文を削除しました。(別のSOの質問、stackoverflow.com / questions / 2751481 /…から)データを復元する APNトークン保持されますが、OSがインストールされ、「ワイプ」によってリセットされます(その後に新しくインストールされたオペレーティングにデータを復元する場合を除く)システム)。
Robert Altman

1
@RobertAltman-これはすべての話ではないと思います。私たちのデータベースには、まったく同じ APNSトークンを持つまったく異なるデバイスからの登録が多数見られます。現在、同じトークンを送ってきたiPad 2とiPhone 3GSが目の前にあります。他の誰かがこの動作を確認できますか?
DougW

@DougW、これは奇妙です。まだ同様の問題はありますか?リンクを編集し、最新のドキュメントから投稿しました。
iosCurator 2017

139

この点については、Appleの公式ドキュメントは不明です。私が観察したのはこれです。トークンは、特定のデバイス、アプリケーション、およびドメイン(製品版とサンドボックス)に対して不変です。システムが確実に機能するためには、これが真実である必要があると思います。アプリケーションの更新が新しいAPNトークンをトリガーする状況を考えてみましょう。最高の新しいTwitterのようなアプリを使用していて、通知が有効になっている場合、iTunesからアプリを更新するとどうなりますか?更新を自分のデバイスに「同期」してからアプリケーションを実行していなくても、通知が引き続き送信されることを期待する必要がありますか?更新されたアプリを実行していなくても、OSがユーザーに代わって通知を受信できるため、アプリケーションを変更してもAPNシステムには影響しません。

明確にするために、Appleは「アプリケーションは起動するたびに[APNサーバーに]登録し、そのプロバイダーに現在のトークンを与える必要がある」と述べています。 私は心から同意します。そうすることで、アプリケーションを誤った想定や異常な状況から保護します。

1つのデバイスのすべてのアプリでプッシュ通知トークンは一意ですか?デバイストークンが「オペレーティングシステムのインストール」ごとに一意であることを示します。バックアップからデバイスに復元するとトークンは維持されますが、デバイスをワイプすると新しいトークンが取得されます。これは、シームレスな操作とプライバシーのAppleの意図と完全に一致します。デバイスのワイプは、おそらく新しい関連付けを保証するほど深刻ですが、OSの更新後にイメージを復元するユーザーは、既存の通知を保持する必要があります。iPadでの最近のiOS5アップデートを思い出すと、アップグレード後に最新のバックアップを復元したので、これにより通知トークンの一貫性が維持されます。[編集:別のバックアップを復元する デバイスはトークンを複製しません。]

注意:私はこの件に関して明確な知識は持っていませんが、APNを使用した(サードパーティの開発者として)の合理的な経験があります。いつものように、仮定を確認するのが最善です。


アップデート(2012年6月):

最近、私はa>アップルのエンジニアと話し、b>実世界のテストを実行する機会がありました。その結果を提示したいと思いました。

完全にするために、APNトークンを返すことについて話すとき、私は単一のバンドル識別子/アプリケーションのコンテキストを想定しています。

まず、Appleのエンジニアは、2つのデバイスが同じAPNを返すことは不可能であるべきだと述べました。以下のコメントにもかかわらず、私はこれが失敗する状況を特定できませんでした。

次に、アップグレードテストのシーケンスと結果を示します。

  1. iPhone4にインストールされているiOS4から始めます。iTunesのバックアップデバイス

  2. iOS5へのアップグレード
    以前のテストから、APNトークンが異なることがわかりました

  3. バックアップをデバイスに復元する
    APNトークンはステップ1と同じです。

  4. iOSのリセット(デバイスのクリーン)
    APNトークンの変更

  5. 別の電話をiTunesにバックアップし、そのバックアップをテストデバイスに復元します。基本的に、電話を切り替えたかのように、「間違った」バックアップを復元しています。
    APNトークンが再び変化します。さらに、それは明確であり、元のトークンまたは「クローン」トークンのいずれにも一致しません。

  6. 「正しい」バックアップをデバイスに復元します。
    APNトークンはステップ1と同じになりました。

  7. 最後に、電話をiOS6(beta2)にアップグレードし、バックアップを復元して、再テストしました。予想通り、トークンはステップ1のトークンと一致し続けました。

この時点で、APNトークンを異なるデバイス間で複製することはできないと確信しています。これは以前のバージョンのiOSのバグとして発生した可能性がありますが、iOS5(およびおそらくiOS6)がAPNトークンを正しく処理していると確信しています。


アップデート(2012年8月)

これを追加していないことに気づきました。デバイストークン変更されます。アップルの開発者の1人が私と共有し、トークンは実際に期限切れになると思います(2年後に、私は思う)多くの目的で、これは十分に長く、不変であると考えることができます。

[特に毎年電話を交換するため、テストスクリプトを2年ごとに新しいトークンで更新する必要があるかどうか心配していません。]


これは、ユーザーを一意に識別する方法としてトークンを使用できることを意味しますか?(「投票する」必要があるアプリでは、これは非常に実用的ですか?)私は状況を想像することができます:ユーザーが投票し、アプリが通知を介して乱数で応答します。投票を有効にするには、その番号をサーバーに再送信する必要があります。この方法では、投票を簡単に行うことはできません。
ヒキガエル

また興味深い:アプリを削除して再インストールすると、トークンは変わりますか?または、これは「バックアップの復元」オプションに似ています
Toad

@Toadアプリを削除して再インストールしても、トークンは変更されません。
Robert Altman、

@Toadこれはユーザー識別の良い形になるとは思いません。トークンはデバイスごと(およびアプリごと)に一意であるため、複数のデバイスを持つユーザーは複数のトークンを持ちます。
Robert Altman、

1
証明書とデバイストークンの関係について知りたい。.p12証明書の有効期限が切れた場合、新しい証明書を変更する必要があります。「新しいデバイストークンが必要な場合、APNはデバイスの証明書に含まれる情報を使用してトークンを生成します。」という参照を見つけました証明書を変更するときにデバイストークンが更新される可能性はありませんか?
illusionJJ


22

はい、デバイストークンは変更できます。

アプリがトークンを受け取るときはいつでも、それを保存する必要があります。次に、新しいトークンを受け取るたびに(最終的に発生します)、新しいトークンを格納されているトークンと比較し、異なる場合は次のようにします。

  1. デバイスのローカルストレージを更新します(を含む可能性がありますnil
  2. 新しいトークンを認識するためにトークンを使用するデバイスで何かを更新します
  3. このトークンを認識するすべてのAPIを新しいトークンに更新します。

実際問題として、最後のステップは自明ではない可能性が最も高いです。あなたは、デバイスが加入したことを郵便番号ものに基づいてトークンデバイスに気象警報を送信しているサービスを持っている場合たとえば、あなたは合格する必要がありますold_tokenし、new_tokenそれは配達を更新できるようにサービスを語りました。

Ergoは、一般的に言って、「デバイストークン」を受け入れる100%のAPIにもUPDATE、そのトークン用の何らかの機能が必要です。このために構築しないとは、誤配信された通知と配信されなかった通知のため構築することです。


いいようですが、アプリを削除して再インストールしたものは何ですか?そのシナリオでは、ローカルストレージに保存したデバイストークンが削除されます
Kuf

@Kuf、その質問への回答を得ましたか?私は同じです-アプリがアンインストール/再インストールされている場合でも、システムトークンをどのように比較しますか?
nkirkes

@nkirkesが見るこの質問を詳細
KUF

あなたが話し合った3つの「アップデート」ポイントは、iOS、SDK、または私たち自身の責任ですか?
somenickname

7

デバイストークンはiOS 8以降から変更されます

アップルのウェブサイトから以下のテキストをご覧ください。ユーザー通知の登録、スケジュールおよび処理

デバイストークンは、特定のデバイス上のアプリにプッシュ通知を送信するための鍵です。デバイストークンは変更される可能性があるため、アプリを起動するたびに再登録して、受信したトークンをサーバーに返す必要があります。デバイストークンの更新に失敗した場合、リモート通知がユーザーのデバイスに届かない可能性があります。ユーザーがバックアップデータを新しいデバイスまたはコンピューターに復元するか、オペレーティングシステムを再インストールすると、デバイストークンは常に変更されます。新しいデバイスまたはコンピューターにデータを移行する場合、リモート通知をそのデバイスに配信する前に、ユーザーはアプリを1回起動する必要があります。


2
URLが死んでいる!修正してください。
Ramis


4

あなたがを呼んだ後でトークンが変わるのは誰もやっていなかったので、言及する価値があると思いますunregisterForRemoteNotificationsregisterForRemoteNotifications次回呼び出すときにトークンが異なります。私はAppleのドキュメントでこれの確認を見つけることができませんでしたが、私はそのような行動を自分で目撃しました。これを覚えておいてください


3

アプリが新しいデバイスに復元されない限り、変更されることはありません(この時点で、プッシュ通知を再び受け入れるように求められることはなく、新しいトークンを受け入れる必要がある時点で登録済みの呼び出しが送信されるだけです)。

しかし、Appleはそれが変更されないことを保証しません(そのため、ドキュメントはそれについて決して言及しません)。最悪の場合はプログラムを改善し、それが1日で変わる可能性があると想定します。また、定期的にサーバーにトークンを送信すると、しばらくの間登録されておらず、おそらくアプリをアンインストールしたり、しばらく前に興味を失ったりしたトークンを削除できます(ドキュメントでは、これを望ましい動作として指定しています!)。


正解です。トークンが永続的であるとは想定できません。APNドキュメントで定義されているエンゲージメントのルールに従います。実際、Apple開発者は、トークンが最終的に(2年程度の後に)変更されると私に言っています。
Robert Altman、

1
以前のディスカッションを復活させますが、誰かが役立つと思うかもしれません。私は今週、自己ホスト型のParseサーバーで作業していて、テストの問題を抱えていました。開発アプリを更新するたびに、 UXの変更の数も同様です)、トークンのIDはソフトウェアのインストールごとに変更されます。(ため息)
ChrisH

3

差出人-Apple Docs

APNはさまざまな理由で新しいデバイストークンを発行できます。

  • ユーザーがアプリを新しいデバイスにインストールする

  • ユーザーがバックアップからデバイスを復元する

  • ユーザーがオペレーティングシステムを再インストールした

  • その他のシステム定義のイベント

その結果、アプリは起動時にデバイストークンを要求する必要があります。

さらに:

重要

APNsデバイストークンは可変長です。サイズをハードコーディングしないでください。


2

リンクはすぐにAppleで時代遅れになります!だから私は今かなりはっきりしているように見えるものを引用しています:

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

このガイドから


0

基準として、 Appleのプッシュ通知のもの

デバイストークンは、特定のデバイス上のアプリにプッシュ通知を送信するための鍵です。デバイストークンは変更される可能性があるため、アプリを起動するたびに再登録して、受信したトークンをサーバーに返す必要があります。デバイストークンの更新に失敗した場合、リモート通知がユーザーのデバイスに届かない可能性があります。ユーザーがバックアップデータを新しいデバイスまたはコンピューターに復元するか、オペレーティングシステムを再インストールすると、デバイストークンは常に変更されます。新しいデバイスまたはコンピューターにデータを移行する場合、リモート通知をそのデバイスに配信する前に、ユーザーはアプリを1回起動する必要があります。

デバイストークンをキャッシュしないでください。必要なときにいつでもシステムからトークンを取得します。アプリが以前にリモート通知に登録されている場合、registerForRemoteNotificationsメソッドを再度呼び出しても追加のオーバーヘッドは発生せず、iOSは既存のデバイストークンをアプリデリゲートにすぐに返します。さらに、iOSは、アプリの登録または再登録への応答だけでなく、デバイストークンが変更されるたびにデリゲートメソッドを呼び出します。


0

このリンクによると、デバイストークン

各リクエストに含まれるデバイストークンは、通知を受信するデバイスのIDを表します。APNは、デバイストークンを使用して、一意のアプリとデバイスの組み合わせをそれぞれ識別します。また、それらを使用して、デバイスに送信されるリモート通知のルーティングを認証します。アプリがデバイスで実行されるたびに、APNからこのトークンがフェッチされ、プロバイダーに転送されます。プロバイダーはトークンを保存し、その特定のアプリとデバイスに通知を送信するときにトークンを使用します。 トークン自体は不透明で永続的であり、デバイスのデータと設定が消去された場合にのみ変更されます。APNのみがデバイストークンをデコードして読み取ることができます。


0

はい、変更できます。理想的には、コールバックメソッドを介してトークンを受け取るとき

  • (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

アプリはリモートサーバーでトークンを登録/更新する必要があります。これにより、APNSとサーバーのトークンが確実に同期されます。

あたりとして、アップルのドキュメント

アプリ固有のデバイストークンの取得と処理は次のように機能します。

アプリはリモート通知用のAPNに登録します新しいデバイストークンが必要になると、APNはデバイスの証明書に含まれる情報を使用してトークンを生成します。中央の右向き矢印に示すように、トークンキーを使用してトークンを暗号化し、デバイスに返します。システムは、application:didRegisterForRemoteNotificationsWithDeviceToken:delegateメソッドを呼び出して、デバイストークンをアプリに戻します。トークンを受け取ると、アプリ(デリゲートメソッド内)は、トークンをバイナリ形式または16進数形式でプロバイダーに転送する必要があります。このトークンがないと、プロバイダーはデバイスに通知を送信できません。詳細については、「リモート通知サポートの構成」の「リモート通知を受信するための登録」を参照してください。


0

アプリのインストール時のデバイストークンリレー。

つまり、アプリケーションを再インストールすると、アプリケーションが変更されます。バックアップ、iOSアップグレードeccから実行しても、それは改善されません。

問題を回避するためにそれを使用する正しい方法NSPAppDelegateは、メソッドで、各アプリケーションの起動時に指定されたものを取得することですdidRegisterForRemoteNotificationsWithDeviceToken

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.