【问题标题】:Get Different GCM registrationId for Different servers为不同的服务器获取不同的 GCM registrationId
【发布时间】:2016-01-05 10:11:31
【问题描述】:

我正在使用GCM 来触发我的安卓应用程序的通知。通知是从我的服务器触发的。例如,假设用户在应用程序中注册了一个帐户,那么服务器将发送通知,告知我在我的注册请求中传递了 GCM 注册 ID。到现在为止它工作得很好。现在我又多了一个 API,它是另一台服务器。并且我在该请求中发送相同的 GCM 注册 ID,但我没有从该服务器收到任何通知,因此从一些阅读中我发现每个 registration_id 都与特定应用程序及其相应的服务器 API 密钥相关联,即单个设备对于不同的应用程序有不同的registration_ids 因此,我们在尝试使用registration_id 发送推送通知时遇到MismatchSenderId 错误。我该如何解决这个问题?我用谷歌搜索并没有找到任何合适的解决方案。

我正在以这种方式生成 GCM 注册:

 String token = instanceID.getToken(defaultSenderId),
                        GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);

【问题讨论】:

  • 您应该有另一个服务器的不同令牌。因为 registration_id 是专门为应用程序 ID 创建的。
  • 你能解释一下吗?如果有,请提供任何链接。
  • 其实gcm注册id是依赖服务器的?

标签: android google-cloud-messaging


【解决方案1】:

由于您有 2 个不同的服务器,我相信您有两个不同的发件人 ID。因此,在您的代码中,您必须有 2 个令牌,每个服务器一个。

示例:

服务器 1 的令牌:

String token = instanceID.getToken(<sender_id_1>),
                    GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);

服务器 2 的令牌:

String token2 = instanceID.getToken(<sender_id_2>),
                    GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);

【讨论】:

  • 我会试试这个。并回复你
【解决方案2】:

更新令牌时可能会出现问题: 在 InstanceIDListenerService 中,我发现无法识别令牌已更新 - 对于 sender_1 或 sender_2。 所以看起来当 onTokenRefresh 被调用时,我们必须为两个发送者获取新的令牌。

【讨论】:

  • 这可能是真的,但是否可以创建两个令牌?
  • 是的,有很多令牌是正确的:如果有 2 个服务器,你将有 2 个令牌。 gRenzFries 在他的回答中展示了这种情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-23
  • 2011-12-16
  • 2015-02-19
  • 2012-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多