1

GCM に登録しようとしています。

最初に getRegistrationID が null を返すかどうかを確認し、そうであれば、GCMRegistrar.register(context, sender_id) を呼び出しています。

問題は、登録が完了すると、

protected void onRegistered(Context context, String registrationId)

GCMIntentService クラス内にある呼び出しが行われています。

登録プロセスは別の asynctask (またはその他のバックグラウンド プロセス) を介して行われるため、この直後に getRegistrationID を呼び出すと、まだ登録プロセスを終了できないため、null が返されることがあります。

サーバーに送信する POST パラメータとして使用するため、regId をできるだけ早く、同じアクティビティから使用する必要があります。

登録が完了する前にユーザーが POST ボタンをすばやくクリックする可能性があり、値の代わりに null が返されるという状況に陥っています。

この問題にどのように取り組みますか? (回避策は、しばらくしてから再試行するようにユーザーに通知するメッセージを発行することです)。アイデア?

4

1 に答える 1

1

GoogleCloudMessagingクラスの register メソッドという新しい API を使用できます。これが推奨される実装です (GCMRegistrar は非推奨です)。このメソッドはブロックしているため、メイン スレッドで呼び出すことはできません。AsyncTask で呼び出すことができます。

コード サンプルについては、新しいGCM デモを参照してください。

于 2013-07-16T00:43:38.213 に答える