Android の実装

次の例は、Android クライアントにインスタンス ID を実装する際に役立ちます。この例では GCM スコープを使用していますが、Google Cloud Messaging は廃止されているため、このスコープはデモ目的にのみ有効です。

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>