1

アプリケーションにプッシュ通知機能を追加しようとしていますが、奇妙な問題があります。

最初の試行で、デバイスの regId を取得しました。しかし、その後、デバイスは GCM から自身を登録解除しようとしました。実際にはregIdを失ったので成功しましたが、再び取得できなかったわけではありません。

LogCat では、これらの行が表示されます。

07-12 08:40:25.615: V/GCMRegistrar(10648): Registering receiver
07-12 08:40:25.620: D/GCMRegistrar(10648): resetting backoff for PACKAGENAME
07-12 08:40:25.635: V/GCMRegistrar(10648): Unregistering app PACKAGENAME
07-12 08:40:28.570: D/GCMRegistrar(10648): resetting backoff for PACKAGENAME
07-12 08:40:28.570: V/GCMRegistrar(10648): Unregistering app PACKAGENAME
07-12 08:40:29.125: D/GCMRegistrar(10648): resetting backoff for PACKAGENAME
07-12 08:40:29.130: V/GCMRegistrar(10648): Unregistering app PACKAGENAME
07-12 08:40:39.655: D/GCMRegistrar(10648): resetting backoff for PACKAGENAME
07-12 08:40:39.660: V/GCMRegistrar(10648): Unregistering app PACKAGENAME
07-12 08:40:40.605: D/GCMRegistrar(10648): resetting backoff for PACKAGENAME
07-12 08:40:40.605: V/GCMRegistrar(10648): Unregistering app PACKAGENAME
07-12 08:40:41.350: D/GCMRegistrar(10648): resetting backoff for PACKAGENAME
07-12 08:40:41.350: V/GCMRegistrar(10648): Unregistering app PACKAGENAME
07-12 08:40:43.255: D/GCMRegistrar(10648): resetting backoff for PACKAGENAME
07-12 08:40:43.255: V/GCMRegistrar(10648): Unregistering app PACKAGENAME

GCM Demo Application のコードを自分のアプリケーションに実装しようとしたので、ここにコードを示します。

GCMRegistrar.checkDevice(this);
GCMRegistrar.checkManifest(this);

registerReceiver(mHandleMessageReceiver, new IntentFilter(DISPLAY_MESSAGE_ACTION));
final String regId = GCMRegistrar.getRegistrationId(this);

if (regId.equals("")) {
    // Automatically registers application on
    // startup.
    GCMRegistrar.register(this, SENDER_ID);
} else {
    Log.v(TAG, "Already registered");
    // Device is already registered on GCM, needs to
    // check if it is
    // registered on our server as well.
    if (!GCMRegistrar.isRegisteredOnServer(this)) {
        // Try to register again, but not in the UI
        // thread.
        // It's also necessary to cancel the thread
        // onDestroy(),
        // hence the use of AsyncTask instead of a
        // raw thread.
        final Context context = this;
        mRegisterTask = new AsyncTask<Void, Void, Void>() {
            mRegisterTask.execute(null, null, null);
        }
    }
}
4

1 に答える 1

2

私は自分の問題を見つけました、それはすべて私のせいで愚かです。

GCMRegistrar.unregister ()Evaluations にコードが追加されました。したがって、デバッグのすべてのステップで、このコードが再評価され、登録解除が呼び出されます。

私はそれを削除したくありません。私のような人がいるかもしれません;)

于 2012-07-12T07:04:26.767 に答える