我正在为 Android 实现推送通知。我的客户希望该应用程序除了支持正常的 GCM 服务外,还支持 Urban Airship。我遇到了一个问题。
为了启用 GCM,我使用了 Google 的 gcm.jar 并完成了所有其他设置,并确认我可以毫无问题地从我的服务器发送推送通知。这是 AndroidManifest 的一部分。
<receiver android:name="com.google.android.gcm.GCMBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="my.package.name"/>
</intent-filter>
</receiver>
<service android:name="my.package.name.GCMIntentService" />
为了实现 Urban Airship,我使用了 urbanairship-lib-3.1.0.jar 并完成了所有设置。工作正常。
<receiver android:name="com.urbanairship.CoreReceiver" />
<receiver android:name="com.urbanairship.push.GCMPushReceiver" android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="my.package.name"/>
</intent-filter>
</receiver>
问题:当我从 Urban Airship 发送推送时,应用会收到 2 条通知。
当它发生时,我可以通过编写代码来抑制一个不必要的警告窗口, 但我不知道如何消除顶部通知栏中的那个。
我不确定这是否是在同一应用程序中同时使用 GCM 和 Urban Airship 的正确方法。有没有人成功过,或任何其他想法?我可以用 intent-filter 做点什么吗?
最佳答案
据我所知, Urban Airship 使用GCM向Android发送通知。这意味着无论谁在服务器端发送通知,单个接收者都可以接收所有消息。这就是您收到两个通知的原因,因为两个接收者都收到相同的消息并显示通知。您自己的接收器可以处理您和 Urban Airship 发送的消息。
拥有两个不同接收器的唯一原因是,如果您希望您的应用以不同于另一个来源的消息的方式处理来自一个来源的消息。在这种情况下,您应该使用不同的发送者,并且每个接收者都必须检查消息的发送者以决定是否应该处理它。
除此之外,我看不出通过 Urban Airship 发送消息如何使它们更快到达,因为它们还将消息发送到 GCM 服务器,而 GCM 服务器进行实际传递。 Urban Airship 可以更快的唯一方法是,如果他们使用 Cloud Connection Server API,而您使用更简单的 HTTP API 直接调用 GCM。
关于android - 如何同时使用 GCM 和 Urban Airship 进行 Android 推送通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19182214/