13

公式ドキュメントとこの質問では、登録 ID が変更される可能性があるため、Google は GCM を再登録することを推奨しています。

これが発生する仮説の 1 つとして、更新中にすべてがアンインストールされてからインストールされるというものがあります。そのギャップの間に GCM 通知を受信すると、NotRegisteredが返され、GCM 登録 ID が無効になる可能性があります

Google Play が私のアプリを自動的に更新する場合、そのようなシナリオに対処して再登録するための最も確実な方法は何ですか? WhatsApp のようなアプリでは、GCM 通知を受信しない限り、ユーザーはアクティビティを明示的に開始することはできません。したがって、ユーザーは、誤ってアクティビティに出くわすまで、基本的に「迷子」になります。

https://stackoverflow.com/a/14955308/111021では、サードパーティのサーバーが登録 ID を更新できるように「正規 ID」が含まれることが記載されています。しかし、ドキュメントでは、この種のシナリオがカバーされていると明示的に述べられていません (つまり、GCM は、更新のギャップ中にアプリを「アンインストール」と間違える可能性があります。その場合、正規 ID が生成されないように思われるので、に直行NotRegistered)。

WhatsApp や他のメッセージ アプリなどの「高可用性」アプリは、これにどのように対処しますか?

4

3 に答える 3

6

WhatsAppは良い例ではありません。WhatsAppAndroid デバイスで実行中のサービスのリストを確認すると、デバイスでサービスが常に実行されていることがわかります。したがって、アプリが GCM に登録されていることに依存していません (GCM を使用しているかどうかもわかりません)。

Google がアプリのアップグレード後に再登録することを推奨する理由は、アップグレード中にアプリが登録解除される可能性があるバグを克服するためです。

登録 ID の変更の唯一の既知の原因は、アップグレード中にメッセージを受信すると、アプリが自動的に登録解除されるという古いバグです。このバグが修正されるまで、アプリはアップグレード後に引き続き register() を呼び出す必要があり、これまでのところ登録 ID はこの場合変更される可能性があります。

(ここから引用)。

アプリが再度起動されるまで GCM に再登録できないため、アプリのバージョンが変更されている場合はメイン アクティビティをチェックインし、変更されている場合は GCM に再登録する以外にできることはありません。 .

于 2014-05-21T16:32:22.473 に答える
3

可用性の高いアプリで GCM を使用する理由を知ることは興味深いでしょう。特にリクエストの数と、それらが時間に敏感かどうか。

一般的に、私自身の経験から言えば、GCM は高可用性にはほど遠いものです。メッセージが失われるか、クライアントに到着するまでに数分かかります。本当に 100% のメッセージ配信を保証したい場合は、バックグラウンド サービスでソケットを使用し、接続が失われるたびに接続を再確立する必要があります。(ちなみに、これはWhatsAppが使用するアプローチです)。

GCM を引き続き使用したい場合: GCM サーバーが NotRegistered で応答したときに、サーバー上のメッセージを 1 分間再スケジュールすることを検討してください。

于 2014-05-26T13:25:37.640 に答える