次の例は、Android クライアントに Instance ID を実装する際に役立ちます。これらの例では GCM スコープを使用していますが、Google Cloud Messaging のサポートが終了しているため、デモ目的でのみ使用してください。
Google Play 開発者サービスをセットアップする
クライアント アプリケーションを作成するには、Google Play 開発者サービス SDK の設定の説明に従って、Google Play 開発者サービス SDK を使用します。Play 開発者サービス ライブラリには、インスタンス ID ライブラリが含まれています。
インスタンス ID を取得する
次のコード行は、インスタンス ID を返します。
String iid = InstanceID.getInstance(context).getId();
トークンを生成する
トークンを生成するには、Google デベロッパー コンソールで生成されたプロジェクト ID が必要です。
String authorizedEntity = PROJECT_ID; // Project id from Google Developer Console
String scope = "GCM"; // e.g. communicating using GCM, but you can use any
// URL-safe characters up to a maximum of 1000, or
// you can also leave it blank.
String token = InstanceID.getInstance(context).getToken(authorizedEntity,scope);
トークンとインスタンス ID を管理する
インスタンス ID を使用すると、トークンを削除して更新できます。
トークンとインスタンス ID を削除する
String authorizedEntity = PROJECT_ID;
String scope = "GCM";
InstanceID.getInstance(context).deleteToken(authorizedEntity,scope);
関連付けられているすべてのトークンを含むインスタンス ID 自体を削除することもできます。次回 getInstance()
を呼び出すと、新しいインスタンス ID が取得されます。
InstanceID.getInstance(context).deleteInstanceID();
String newIID = InstanceID.getInstance(context).getId();
更新トークン
インスタンス ID サービスは、定期的に(6 か月ごとになど)コールバックを開始し、アプリにトークンの更新をリクエストします。また、次の場合にもコールバックを開始することがあります。
- SSL やプラットフォームに関するセキュリティの問題がある。
- デバイス情報(バックアップや復元など)が有効でなくなった。
- それ以外の場合、インスタンス ID サービスは影響を受けます。
アプリにインスタンス ID リスナー サービスを実装して、次のコールバックを受け取ります。
public class MyInstanceIDService extends InstanceIDListenerService {
public void onTokenRefresh() {
refreshAllTokens();
}
private void refreshAllTokens() {
// assuming you have defined TokenList as
// some generalized store for your tokens
ArrayList<TokenList> tokenList = TokensList.get();
InstanceID iid = InstanceID.getInstance(this);
for(tokenItem : tokenList) {
tokenItem.token =
iid.getToken(tokenItem.authorizedEntity,tokenItem.scope,tokenItem.options);
// send this tokenItem.token to your server
}
}
};
また、プロジェクトのマニフェスト ファイルでこのサービスを構成する必要があります。
<service android:name=".MyInstanceIDService" android:exported="false">
<intent-filter>
<action android:name="com.google.android.gms.iid.InstanceID"/>
</intent-filter>
</service>