Androidの実装



  • この記事は、Instance IDに関する記事を和訳したものです。
  • 原文: Android Implementation
  • 元記事のライセンスは CC-BYで、この和訳記事のライセンスは CC-BYです。
  • 自己責任でご利用ください。
  • 和訳した時期は 2017年8月ころです。

次の例は、Androidクライアントにて Instance IDを実装するのに役立つでしょう。 これらの例では、GCMスコープを使用していることに注意してください、それは、Google Cloud Messaging用の Androidクライアントにてトークンを管理するために使用します。

Google Play Servicesをセットアップする

あなたのクライアントアプリケーションを書くには、Google Play services SDKを使用します、それは、Set up Google Play Services SDKを参照してください。 Play Services Libraryは、Instance IDライブラリを含んでいます。

Instance IDを取得する

次のコード行は、Instance IDを返します:

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

トークンを生成する

トークンを生成するには、Google Developers Consoleによって生成された Project 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);

トークンおよび Instance IDを管理する

Instance IDは、あなたにトークンを削除およびリフレッシュさせます。

トークンおよび Instance IDを削除する

String authorizedEntity = PROJECT_ID;
String scope = "GCM";
InstanceID.getInstance(context).deleteToken(authorizedEntity,scope);

また、Instance ID自身を削除することもできます、それは、関連するすべてのトークンを含んでいます。 次に getInstance()を呼び出したとき、新しい Instance IDを取得するでしょう。

InstanceID.getInstance(context).deleteInstanceID();
String newIID = InstanceID.getInstance(context).getId();

トークンをリフレッシュする

Instance IDサービスは、定期的にコールバックを開始します(例えば、6ヶ月ごとに)、それは、あなたのアプリがそのトークンをリフレッシュするすることをリクエストします。 また、次の場合に、コールバックを開始するかもしれません:

  • セキュリティの問題がある; 例えば、SSLあるいはプラットフォームの問題。
  • 端末情報がもはや有効ではない; 例えば、バックアップおよびリストア。
  • Instance IDサービスが、それ以外に影響を受けた。

これらのコールバックを受け取るために、あなたのアプリにて Instance 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>