2015-12-15 6 views
8

私のアプリをアンインストールして再インストールした後、デバイスが自分のサーバーに2つの異なるAPNSトークンを送信したため、ユーザーがダブル通知を受信し始めたという問題がありました。アプリ。トークンが異なっていたので、これは同じデバイスであることがわかりませんでした。iOS apnsトークンの変更を管理する方法

iOS 9が出るまで、アプリをアンインストールして再インストールするたびに、私はいつも同じAPNSを持っていたので、以前と同じデバイスであることが分かりました。 iOS 9以降、インストールごとにAPNSトークンが変更されているようです。

私の質問は、クライアントがアプリをアンインストールして再インストールし、新しいトークンを追加するのではなく、APNSトークンを更新するかどうかを知る方法です

ほとんどのiOS開発者が処理しなければならないものが私には聞こえますが、私はAppleからこの問題に取り組む方法についてベストプラクティスを見つけることができませんでした。 。

+0

ユーザーはログインするか、アプリを使用して通知を受け取る必要がありますか? – Ares

+0

@はいはい。ただし、各ユーザーは複数のデバイスを接続できます。したがって、ユーザーが接続すると、再インストール後に新しいデバイスまたはAPNSが変更されたかどうかはわかりません。 – Kuf

+0

'[[UIDevice currentDevice] name];'トークンのメタデータに? – Ares

答えて

6

これは、我々はそれを解決することになった方法です:各アプリの起動時に

  1. トークンプッシュ通知を作成するのlocalStorageでのトークンはありますか?
    • はい - トークンをlocalstorageと比較します。彼らは同じですか?
      • はい - チェックキーチェーンにトークンが存在しない - 何が更新新しいトークンを持つサーバー、および「OK」をローカルストレージとキーチェーン
    • でローカルに保存して、サーバーの応答の後 -
    • 何も返しません
      • はい - トークンとキーチェーンを比較します。彼らは同じですか?
        • はい - 保存のlocalStorageにトークンと
        • 何も返さない - 新しいトークンを使用してアップデートサーバ、および「OK」
          ローカルストレージとキーチェーン
    • でローカルに保存して、サーバーの応答の後
    • no - 新しいトークンを持つサーバをアップデートし、サーバレスポンス後に 'OK'をローカルストレージとキーチェーンにローカルに保存する

誰かがそれを解決するより洗練された方法を持っているなら、私はそれについて聞いてみたいです

+0

私は 'identifierForVendor'キーを使用したいと思います。 'appnameVendor'のキーが終了します。システムからロードして書き留めていない場合は、新しいトークンとその' appnamVendor'の値をサーバにポストします。サーバは新しいトークンを作成するか、 e – sahara108

+0

@ sahara108私はこれをやってみることを考えましたが(それはAndroidのためです)、変更されたかどうかを知るためにトークンを保存する必要があるため、キーチェーンに別のストアド変数を追加する代わりにトークンを使用します。 – Kuf

+0

両方の方法で1つの変数のみを保存します。唯一の違いは、複数のアプリケーションがある場合、アプリ全体で同じように 'identifierForVendor'を再利用できることです。 – sahara108

関連する問題