GCMを用いてAndroidアプリを作成しており、プッシュ通知送信のために、下記のコードにてregistrationIdを取得しており、SharedPreferencesに保存しております。

```

    registrationId = gcm.register("xxxxx");
    
```

機種変の時など、バックアップツールなどを使ってアプリのデータを移管した場合、SharedPreferencesに保存されたregistrationIdも移管されます。

しかし、（機種変前に取得した）registrationIdでは、新しい端末へはプッシュ通知が送れません。

こういった場合、どのように対処すればよいでしょうか？

Android Mからは、"full-backup-
content"タグおよび"exclude"タグを使い、データ移管から特定データを除外方法もあるかと思いますが、targetSDKversion
23以上が対象なので、それ以前のバージョンの場合はどのように対処するのがベストでしょうか？
CC BY-SA 3.0
2016-03-12T07:44:53.683
23053
2020-06-10T03:08:55.900
14752
question
android java gcm
Android端末の機種変時のregistrationIdの取り扱いについて
おそらく質問当初と状況は変わっていると想いますが、<https://firebase.google.com/docs/cloud-
messaging/android/legacy-regid?hl=ja> から引用します。

> クライアント アプリの更新: クライアント アプリを更新するときは、既存の登録 ID  
>  が新しいバージョンで動作することが保証されないため、その ID を無効にする必要があります。おすすめの方法は、登録 ID  
>  を保存する際に現在のアプリのバージョンを格納し、クライアント  
>
> アプリが起動された際に、この保存した値を現在のアプリのバージョンと比較することです。両者が一致しない場合は、保存されたデータを無効にして再度登録処理を開始します。
>
> バックアップと復元: クライアント アプリをバックアップする際は、登録 ID を保存しないでください。登録 ID は、クライアント  
>  アプリの復元時まで有効のままであるとは限らず、登録 ID が無効であればクライアント  
>  アプリも無効な状態になるからです（つまり、アプリでは登録済みであると認識されるものの、GCM ではその登録 ID  
>
> が保存されなくなるため、アプリでメッセージが取得されなくなります）。アプリが初めてインストールされるときのように、登録プロセスを開始する方法がおすすめです。

というわけで、機種変更前に取得したregstrationIdは無効になる可能性があるので、機種変更後にregistrationIdを取得・登録しなおしましょう。
CC BY-SA 4.0
2018-08-21T00:21:41.250
47676
2018-08-21T00:21:41.250
7572
23053
answer