为什么我自己的发件人 ID 会收到 InvalidRegistration 消息?

Why is my own sender ID getting back an InvalidRegistration message?

我一直致力于在一个应用程序中实现 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?

根据 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 特别要求授权范围。