Android 實作

以下範例可協助您在 Android 用戶端中導入 Instance ID。請注意,這些範例使用 GCM 範圍,但這僅供示範之用,因為 Google Cloud Messaging 已淘汰。

設定 Google Play 服務

如要編寫用戶端應用程式,請使用 Google Play 服務 SDK,如「設定 Google Play 服務 SDK」一文所述。Play 服務程式庫包含 Instance 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);

您也可以刪除 Instance ID 本身,包括所有相關聯的符記。下次呼叫 getInstance() 時,您會取得新的執行個體 ID:

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

重新整理權杖

執行個體 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>