4

ラフで準備完了のサーバーから Android フォンにメッセージを受け入れて表示する、スケルトン クライアント/サーバー GCM アプリをまとめました。サンプルの Android アプリを起動し、アプリとデバイスの組み合わせを GCM サーバーに登録したときに、デバッガーでキャプチャした値として、アプリの registration_id がサーバー側にハードコーディングされているため、「スケルトン」および「ラフ アンド レディ」と言います。私が考え始めたとき、サーバー上の単純なデータベースにアクセスしてreg_id / deviceの組み合わせを保存するための読み取り/書き込みメカニズムを提供する作業を開始しようとしていました。

この reg_id はいつでも期限切れになる可能性があることを知っています。Google がそう言っているからです。IDがまだOK IFであることを確認する方法はドキュメントから明らかであり、それは大きなIFです。アプリを再度起動します。しかし、なぜ私、または他のユーザーが再起動する必要があるのでしょうか? マニフェストに登録されている GCMIntentService は、必要に応じてメッセージを取得しているため、何らかの理由でアプリを再度実行する必要はありません。そのため、ID の有効期限が切れると、メッセージの取得が停止します。サーバーはリターン コードから認識している可能性がありますが、アプリに通知することはできません。アプリを再度実行してonCreate()、おそらくregisterClient()メソッドを実行しない限り、回復はありません。

では、ID の有効期限が切れるとどうなるでしょうか。IntentService の on.. メソッドが実行されることはありません。Google 自身が、有効期限が近づいているという通常のメッセージを送信しますか? 毎日実行して ID をチェックするアラーム タスクを作成する必要がありますか?

4

1 に答える 1

1

GCMによると:

既存の登録 ID は、次のようなさまざまなシナリオで無効になる場合があります。

  • アプリケーションが com.google.android.c2dm.intent.UNREGISTER インテントを発行して手動で登録解除した場合。
  • アプリケーションが自動的に登録解除される場合、これはユーザーがアプリケーションをアンインストールした場合に発生する可能性があります (ただし保証はされません)。登録IDの有効期限が切れている場合。Google が登録 ID の更新を決定する場合があります。
  • アプリケーションが更新されたが、新しいバージョンに com.google.android.c2dm.intent.RECEIVE インテントを受信するように構成されたブロードキャスト レシーバーがない場合。

com.google.android.c2dm.intent.REGISTRATION登録関連の応答が " " インテントを起動することを考慮してください。そのため、GCM から送信される登録メッセージに注意する必要があります。

更新しました

GCM doc は次のように述べています。

登録IDの有効期限が切れている場合。Google が登録 ID の更新を決定する場合があります。これらすべてのケースで、この登録 ID をサードパーティ サーバーから削除し、メッセージの送信に使用するのを停止する必要があります。エラーコードが NotRegistered の場合に発生します。

上記の事実を真実として考慮すると、次回Androidクライアントがサーバーをチェックするとき(最終的に定期的なチェックを行う必要があります)、または呼び出すときに、サーバーで期限切れのIDを処理し、dbでそれらにフラグを設定する必要がありisRegisteredOnServerますGCMRegistrar クラスで偽の結果が得られた場合は、新しい ID を取得するために REGISTRATION インテントを起動する必要があります。

于 2012-10-10T18:42:21.163 に答える