2012-11-09 13 views
7

GCMに関する記事を読んで、登録IDを定期的に更新しないことがあります。私はプッシュ通知を使用してアプリケーションを構築しようとしていますが、そのようなリフレッシュされた登録IDをどのように処理するかはわかりません。毎回アプリケーションの開始時にGoogle Cloud Messaging(GCM)の登録IDをリクエストする

私の最初の戦略は、アプリが起動するたびに登録IDをリクエストしてアプリサーバーに送信することです。それはうまくいくように見えますが、何とか間違って聞こえる...

これはいいですか?

+0

[AndroidでGoogleクラウドメッセージングの登録IDの変更を処理する](http://stackoverflow.com/questions/16838654/handling-registration-id-changes-in-google-cloud-messaging-on)の複製が可能です-アンドロイド) – Eran

答えて

5

基本的に、あなたはあなたのメインの活動で、次の操作を行う必要があります。その後

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.my_layout); 

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

    final String regId = GCMRegistrar.getRegistrationId(this); 

    if (regId.equals("")) { 
     GCMRegistrar.register(this, GCMIntentService.GCM_SENDER_ID); 
    } else { 
     Log.v(TAG, "Already registered"); 
    } 
} 

アプリは余分registration_idcom.google.android.c2dm.intent.REGISTRATION意図を受け取るたびに、あなたのアプリケーションサーバにを登録IDを送信する必要があります。これは、GoogleがアプリのIDを定期的に更新するときに発生する可能性があります。

あなたは例えば、独自の実装でcom.google.android.gcm.GCMBaseIntentServiceを拡張することによって、これを達成することができます。:詳細について

public class GCMIntentService extends GCMBaseIntentService { 

    // Also known as the "project id". 
    public static final String GCM_SENDER_ID = "XXXXXXXXXXXXX"; 

    private static final String TAG = "GCMIntentService"; 

    public GCMIntentService() { 
     super(GCM_SENDER_ID); 
    } 

    @Override 
    protected void onRegistered(Context context, String regId) { 
     // Send the regId to your server. 
    } 

    @Override 
    protected void onUnregistered(Context context, String regId) { 
     // Unregister the regId at your server. 
    } 

    @Override 
    protected void onMessage(Context context, Intent msg) { 
     // Handle the message. 
    } 

    @Override 
    protected void onError(Context context, String errorId) { 
     // Handle the error. 
    } 
} 

を、私は(再)でしょうwriting the client side codethe Advanced Section of the GCM documentationのドキュメントをお読みください。

希望に役立ちます!

1

登録リフレッシュは、新しいGCMライブラリには含まれていません。 Costin Manolache

「定期的な」リフレッシュの

言葉は決して起こらなかったし、登録の更新は、新しいGCMライブラリに含まれていません。

登録IDが変更される唯一の原因は、 のアップグレード中に、 というメッセージが表示された場合、自動的に登録解除されるという古いバグです。このバグが修正されるまで、アプリケーションはアップグレード後に register()を呼び出す必要があり、今のところ登録IDは に変更されることがあります。 unregister()を呼び出すと、通常、登録IDが に変更されます。

提案/回避策は、独自のランダム識別子を生成することです。例えば、 を共有プリファレンスとして保存します。各アプリのアップグレードで、 のIDと潜在的に新しい登録IDをアップロードできます。この は、サーバー側のアップグレードと登録 の変更の追跡とデバッグにも役立ちます。

関連する問題