Android の実装

Android クライアントへのインスタンス ID の実装例を以下に示します。これらの例では、GCM スコープを使用します。これは、Google Cloud Messaging の Android クライアントでトークンを管理する場合に使用されます。

Google Play 開発者サービスの設定

クライアント アプリを作成するには、Google Play 開発者サービス SDK を設定するの説明に沿って、Google Play 開発者サービス SDK を使用します。Play 開発者サービス ライブラリには、インスタンス ID ライブラリが含まれています。

インスタンス ID を取得する

次のコード行はインスタンス ID を返します。

String iid = InstanceID.getInstance(context).getId();

トークンを生成する

トークンを生成するには、Google Developers Console で生成されたプロジェクト 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>