正确使用和更新GCM-Ids

时间:2016-03-05 16:19:20

标签: android google-cloud-messaging

我对GCM-IDs的正确使用有疑问。

目前我有一个InstanceIDListenerService一个GcmListenerService和一个RegestrationIntentService

每次有人打开应用时,RegeistrationIntentServie都会开始MainActivity

我认为这是Google指南的正确实施。

但处理GCM-ID的最佳方法是什么,以便在GCM-IDs刷新后我的服务器上不会出现InstandeIDListenerService错误。因为目前刷新只在我的服务器上注册一个新的GCM-ID

是否可以生成随机设备ID,以便我可以更新旧的GCM-ID

你如何处理身份证?

因为目前我询问服务器每次启动应用程序是否知道GCM-ID与(随机生成的)设备ID相结合,如果另一个不正确或不更新,则更新其中一个存在。

我认为这会产生大量的网络流量。

2 个答案:

答案 0 :(得分:0)

可以肯定的是,你没有自己打电话给 if (lstValue.SelectedItem != null) { lstValue.Items.Remove(lstValue.SelectedItem); txtQlt.Text = txtQlt.Text.Replace(lstValue.SelectedItem.ToString(), ""); } 吗?如有必要,系统将调用此方法。

要回答您的问题,您应该使用名为“规范ID”的GCM功能:

  

<强> noneOf

     

如果客户端应用中的错误触发了多个注册   相同的设备,可能很难协调状态和客户端应用程序   可能最终会出现重复的消息。

     

实施规范ID可以帮助您更轻松地从中恢复   的情况。 规范注册ID是注册令牌   客户端应用程序请求的最后一次注册。这是ID   服务器在向设备发送消息时应使用

     

如果您尝试使用旧的注册令牌发送消息,GCM将会   像往常一样处理请求,但它将包括规范ID   响应的registration_id字段。 确保更换   使用此规范ID存储在服务器中的注册令牌,如   最终旧的注册令牌将停止工作。

更准确地说,如果同一设备有两个注册,并且您使用较旧的注册ID发送通知,您将获得规范ID(此设备的最新注册的注册ID)。如果此ID已存储在您的服务器上,请删除旧注册。如果规范ID因任何原因未存储在您的服务器上,请将用于发送通知的注册ID替换为规范ID。

答案 1 :(得分:0)

@leet GCM ID令牌会在您的令牌需要刷新时定期启动回调,或在某些时候: - 安全问题;喜欢ssl或平台问题 - 设备信息不再有效;例如备份和恢复。 - 实例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
 }
 }
};
  

Keeping the Registration State in Sync

     

保护客户端应用和应用服务器免受潜在恶意攻击   重新使用注册令牌,您应该定期发起令牌   从服务器刷新。当GCM注册令牌刷新时   从服务器端启动,客户端应用程序必须处理   带有GCM注册客户端/服务器的tokenRefreshed消息   握手。这个link可以帮助您验证方式   处理刷新令牌。

正如Baris所提到的,当您向设备发送消息时,您的服务器必须使用规范ID。 tokenRefresh将删除生成随机设备ID的想法,而Canonical ID将解决您如何验证ID是否正确的问题。