【问题标题】:2 GCM registrationId for same android application2 GCM registrationId 相同的android应用程序
【发布时间】:2015-08-04 06:20:45
【问题描述】:

我的应用程序中有 2 个 GCM 广播接收器(一个用于集成在我的应用程序中的 android 库,一个用于我自己的应用程序)。 两者都在manifest中注册,并且具有相同的类别(这是我的应用程序包名称)。

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

我的问题是我一切正常(两个接收者都收到推送通知),但是在尝试从服务器发送推送几个小时后,我在服务器(android 库 regId)和registrationId 中遇到“NotRegistered”问题好像一下子失效了。

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

【问题讨论】:

  • 你在使用帮助你实现GCM机制的库吗?如果是,那么该库如何拥有自己的 senderID,它应该让您选择保留您的 senderID。您使用的是哪个库?
  • 我正在使用我构建的 SDK。它有自己的 senderId(从 Google Console API 获取 SDK 的包名)。它不能帮助我实现 GCM,它是自己实现 GCM,而另一个使用它的应用程序通过他们的 senderId(使用他们自己的包名称)自行实现 GCM。因此,显然两者都有不同的registrationId。

标签: android sdk google-cloud-messaging


【解决方案1】:

在这种情况下,它永远不会产生冲突,因为两者都将作为不同的应用程序工作(两者都有不同的 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 的应用才会收到您的消息。因此它会发生冲突,因为您在不同的应用程序中使用相同的库(相同的包名称)。

因此,您的解决方案可能是使用库在 SingleToneClass 中执行与 GCM 相关的所有工作。您将在其中传递您的应用程序包名称以向 GCM 注册。因此,每当您将库与不同的应用程序一起使用时,它会引用不同的包名称,并且 SENDER_ID 将相同,但不会导致问题,因为包名称会更改。

【讨论】:

  • 这正是我所拥有的。一段时间后它没有工作,遇到同样的问题。另外,如果我将在我的设备上使用此 SDK 的另一个应用程序,那不会造成问题吗?相同的 senderId 和相同的设备在一个 SDK 中用于 2 个不同的应用程序?
  • 好的,这就是为什么我从 GCM 收到“NotRegistered”错误,试图发送推送?对于集成了我的 SDK 的多个应用程序,我不能为我的 SDK 使用相同的 senderId 吗?所以请另一个问题,如果我的 senderId 与我的应用程序相同,它会运作良好吗? (意味着有 2 个具有相同类别的广播接收器(一个用于库,一个用于包含具有相同 senderId 并获得相同 regId 的应用程序)?我不希望谁集成我的 SDK 来处理我的推送。另一方面,他们的 senderId 一切应该是重复的,会不会有什么问题?
猜你喜欢
  • 1970-01-01
  • 2013-08-07
  • 1970-01-01
  • 2012-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多