• 日本語
  • English
  • 中文
MENU
CREATE A PLATFORM FOR DIVERSITY
Web, Game, App, Illustration
https://monstar-lab.com/
Android
2014/09/11
【Android】GCMのregistrationIdの一意性

こんにちは、ここ2年くらいAndroidをメインにお仕事しております。 鈴木と申します。
先日、AndroidでPush通知の実装をしました。いつものことですね。そのとき、「デバイストークンって端末ごとに変わらないものですか?」とクライアントに聞かれました。いつものことですね。ちゃんと調べてみました。
結論から書くと、このようになります。
—————————
Q.デバイストークンって端末ごとに変わる?
A.変わります。

Q.どんなときに変わるの?
A.以下の3パターンです。  
①アプリを再インストールしたとき  
②「データを削除」されたとき  
③アプリをバージョンアップしたとき

Q.なんで変わってしまうの?
A.google様が「リフレッシュしといたから」と仰るので。

Q.いつ、なんでリフレッシュするの?
A.分かりませんでした。すみません。google様の気分次第。。。
対象端末へのPush通知送信失敗などのときにリフレッシュするっぽいです。
—————————

上記3パターンの操作をユーザーが行ったとき、Push通知を実装したアプリはgoogle様へデバイストークン発行のお問い合わせを行います。そのとき、リフレッシュされていれば、新トークンの発行となります。
ちなみに、Androidではちょっと言葉が違うので、ここで置き換えます。
Push通知→GCM(Google Cloud Message) device token→registrationID

ここからは詳細なお話です。 アプリ側の実装を見てみると、こうなっています。
なお、ほとんどはライブラリ内の実装なので、上記①〜③のタイミングで変わってしまうのは嫌だ!って言っても無理です。
とまあ、このように実装されています。

PGでない方、iOSエンジニアなどの方にも分かるよう、日本語にすると、
1.アプリ内でregistrationIDを保持しているかチェック
2.保持していなければgoogleにお問い合わせする
3.保持していた場合、アプリがバージョンアップされているかチェック
4.バージョンアップされていた場合、googleにお問い合わせする ここでgoogleにお問い合わせした結果、リフレッシュされていると、新IDの発行と相成ります。
基本的にGCMを送信するサーバAPIを用意していて、そこのDBにregistrationIDを登録していると思います。 ユーザー単位でregistrationIDを管理している場合、必ず、updateが可能な作りにしておきましょう。
でないと、突然、Push通知が来なくなった、とかの障害となります。
以上、GCMを実装される方の少しでも助けになれたら幸いです。

Archives