GCM:使用InstanceId向多个发件人注册

时间:2016-05-15 09:12:43

标签: android google-cloud-messaging

以前使用多个senderId注册已经有了很好的描述和简单的方法。

       final GoogleCloudMessaging instance = GoogleCloudMessaging.getInstance(context);
       final String registrationId = instance.register(senderId1, senderId2);

我找不到如何使用InstanceId流来实现相同的效果。我试过了

              String token = instanceID.getToken("SENDER_ID1,SENDER_ID2,SENDER_ID3", GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);

但似乎不起作用。我知道,为每个senderId(authorizedEntity)注册getToken()会起作用,从而为我提供3个不同的令牌,但目标是只有1个,只有1个registrationId。

此外,如果我们通过sample并在AS中使用google服务插件,那么似乎就有了 '的谷歌services.json '仅包含一个Google项目/客户信息的文件。

与此有任何关系。

1 个答案:

答案 0 :(得分:0)

在互联网上查找问题解决方案后,我在Multiple GCM senders in the same app中找到了Google,它支持单个应用中的多个GCM发件人,但您必须对其进行说明。如果没有,一个或多个GCM发件人将无法发送GCM意图,并且确实进入的GCM意图可能会随机无法到达清单中的GCM接收器。

执行此操作的最佳方法是自己处理GCM注册,而不是让各个库执行注册。请注意,您将在Layer客户端上使用gcm_defaultSenderId或googleCloudMessagingSenderId;相反,您必须使用逗号加入每个库的发件人ID。

这是关于如何使用instanceID注册多个senderID的示例代码。

public class RegistrationIntentService extends IntentService {
    @Override
    public void onHandleIntent(Intent intent) {
        InstanceID instanceID = InstanceID.getInstance(this);
        // Comma-concatenated sender IDs
        String senderIDs = "SENDER_ID_1,SENDER_ID_2";
        String token = instanceID.getToken(senderIDs, GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
        // ...
    }
}

为了实现这一目标,您需要做的就是让每个发件人生成自己的项目编号。然后在请求注册时在发件人字段中包含这些ID,以逗号分隔。最后,与您的合作伙伴共享注册ID,他们将能够使用自己的身份验证密钥向您的应用程序发送消息。

有关instanceID的详细信息,请查看此page