2 GCM registrationId用于相同的Android应用程序

时间:2015-08-04 06:20:45

标签: android sdk google-cloud-messaging

我的应用程序中有2个GCM BroadcastReceivers(一个用于我的应用程序中集成的android库,另一个用于我自己的应用程序)。 它们都在清单中注册并具有相同的类别(这是我的应用程序包名称)。

两者都注册了register()函数,并且都接收到不同的有效registrationId(因为两者的senderId不同)。

我的问题是我的一切正常(两个接收者都得到推送通知)但是在尝试从服务器发送推送几个小时之后我在我的服务器(android库regId)和registrationId中遇到“NotRegistered”问题似乎突然变得无效。

所以我的问题是,我可以在同一个应用程序中使用2个不同的GCM“机制”,使用不同的senderId而不会在GCM服务器上发生冲突或某种排序吗?

1 个答案:

答案 0 :(得分:2)

在这种情况下,它永远不会创建冲突,因为它们将作为不同的应用程序工作(两者都有不同的SENDER_ID)。

检查以下注释:

1)确保为库和应用程序添加了不同的类别名称(使用INTENT-FILTER):

<receiver
    android:name=".xxxxx"
    android:permission="com.google.android.c2dm.permission.SEND">
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
        <category android:name="com.xxxx" />
    </intent-filter>
</receiver>

2)有时Reg Id会自动更改,因此请尝试保存以前的ID并且每次检查是否相同,如果没有,则必须使用服务器更新新的。

更新:

发送消息时,指定注册ID,该ID隐式链接到应用程序的包名称和生成它的设备。只有请求注册ID的应用才会收到您的消息。因此,您将使用具有不同应用程序的相同库(相同包名称),因此会发生冲突。

所以你的解决方案可能是在带有库的SingleToneClass中完成与GCM相关的所有事情。您将在其中传递应用程序包名称以向GCM注册。因此,每当您使用不同应用程序的库时,它将引用不同的包名称,SENDER_ID将相同但不会导致问题,因为包名称将被更改。