Android 实现

以下示例可帮助您在 Android 客户端中实现实例 ID。请注意,这些示例使用的是 GCM 范围,但该范围仅用于演示目的,因为 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();

刷新令牌

Instance 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>