GCM は常に更新されているため、私が検索したほとんどのリソースは古くなっているか、不明確なようです。基本的に、トークンと ID の有効期限が切れる時期について混乱しています。(参考までに、私はAndroidで作業しています。)
私が理解していることから (間違っている場合は訂正してください)、私のサーバーには API キーと送信者 ID があります。Sender ID を使用して、クライアントにローカルに保存されている InstanceID を介してクライアントにトークンを要求させることができます。ここですでに少し混乱しています。アプリがオンラインになった瞬間に InstanceID が割り当てられますか? 変わることはありますか?アプリがアップグレードされたとき、またはアンインストールして再インストールされたとき (またはデバイスが復元されたとき) はどうなりますか? InstanceID.getInstance を呼び出すと、常に同じ InstanceID を取得できますか?それとも、最終的に有効期限が切れて新しいインスタンス ID が返されますか? getID() を呼び出して取得した文字列を保存する価値はありますか? ドキュメントは、getID() を呼び出すときに実際に新しい InstanceID を取得することを示しているように見えるため、事態はさらに複雑になります。(参考までに、https: //developers.google.)
InstanceID を使用して、クライアントは GCM サーバーからトークンを要求し、それをアプリ サーバーに送信できます。私のアプリサーバーはこのトークンを保存し、これを使用して GCM サーバーにメッセージを送信し、GCM サーバーはメッセージをデバイスに送信します。デバイスは、保存された InstanceID を使用してこれらのメッセージを実際に受信していると思います。GcmListenerService を拡張するクラスを使用すると、onMessageReceived でこれらのメッセージを受信できるようになりますか? (AndroidManifest で定義する以外に) 特別なことをする必要はありませんか? InstanceID を使用するように実際に指示する必要はありませんか? 魔法のように知っているだけですか?
これらの ID とトークンの有効期限はいつですか? 有効期限はありますか?トークンを文字列としてサーバーに保存していますが、これらのいずれかが期限切れになった場合、どうすればそれらが期限切れになったことを知ることができますか? 新しい InstanceID と Token はいつでも生成できます。これは簡単に思えますが、古いものはアクティブなままですか? 古いトークンをサーバーから消去するにはどうすればよいですか? iOS側のAPNSでこれを行う簡単な方法があるようです。そこでは、期限切れのすべてのトークンのリストを取得し、それらをデータベースから消去するだけです.