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>