Android 實作

Stay organized with collections Save and categorize content based on your preferences.

以下範例將協助您在 Android 用戶端中實作執行個體 ID。請注意,這些範例使用 GCM 範圍,您可以透過這些範圍管理 Android 用戶端中的 Google 雲端通訊權杖。

設定 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>