【问题标题】:Why is my own sender ID getting back an InvalidRegistration message?为什么我自己的发件人 ID 会收到 InvalidRegistration 消息?
【发布时间】:2015-06-09 18:56:33
【问题描述】:

我一直致力于在应用程序中实现 GCM,并且基于 Google 的示例已经能够使其工作。但是,当我尝试使用自己的发件人 ID 和范围时,我会在尝试发送通知时返回 InvalidRegistration 错误。例如,这有效:

token = instanceID.getToken(getString(R.string.gcm_defaultSenderId), GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);

如果没有,我已经从项目中仔细检查了发件人 ID,事实上,我的开发者控制台中现在只有一个项目,所以我不可能使用不正确的项目:

token = instanceID.getToken(getString(R.string.my_sender_id), SubscriptionHelper.INSTANCE_SCOPE, null);

我在这里缺少一个关键组件吗?为什么它适用于默认发件人 ID,但不适用于我从开发者控制台获得的发件人 ID?

【问题讨论】:

  • 什么是SubscriptionHelper.INSTANCE_SCOPE?该范围看起来不像 GCM (GoogleCloudMessaging.INSTANCE_ID_SCOPE) 所需的范围?
  • 检查发送到服务器的令牌是否完整(可能需要从客户端和服务器都登录以检查这一点)。如果令牌被截断或更改,则可能发生这些错误。
  • @ianhanniballake 这是一个自定义字符串。根据我发现的一些示例: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. 检查此 Q/A stackoverflow.com/questions/30653130/…@Koh 我从服务器获取令牌,然后手动复制/粘贴到测试应用程序中进行发送。我已经仔细检查了。

标签: android google-cloud-messaging


【解决方案1】:

根据GCM Android Client guide,您的 InstanceID 令牌调用应如下所示

InstanceID instanceID = InstanceID.getInstance(this);
String token = instanceID.getToken(
    getString(R.string.gcm_defaultSenderId),
    GoogleCloudMessaging.INSTANCE_ID_SCOPE, 
    null);

请注意,您必须使用GoogleCloudMessaging.INSTANCE_ID_SCOPE 作为第二个参数 - InstanceID 比 GCM 更通用,因此它是一个可以采用任何字符串的参数,但 GCM 特别要求授权范围.

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-11
  • 1970-01-01
  • 2015-01-25
  • 1970-01-01
  • 1970-01-01
  • 2011-08-07
  • 1970-01-01
相关资源
最近更新 更多