如何使用GCM和Urban Airship进行Android推送通知

时间:2013-10-04 13:17:19

标签: android notifications push-notification urbanairship.com

我正在为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做点什么吗?

1 个答案:

答案 0 :(得分:1)

据我所知,城市飞艇使用GCM向Android发送通知。这意味着无论谁在服务器端发送通知,单个接收器都可以接收所有消息。这就是为什么你得到两个通知,因为两个接收者都得到相同的消息并显示通知。您自己的接收器可以处理您和Urban Airship发送的消息。

拥有两个不同接收器的唯一原因是,如果您希望应用程序以不同于来自其他来源的消息来处理来自一个来源的消息。在这种情况下,您应该使用不同的发件人,并且每个接收者都必须检查邮件的发件人以决定是否应该处理它。

除此之外,我不知道如何通过Urban Airship发送消息会使他们更快到达,因为他们也将消息发送到GCM服务器,GCM服务器进行实际交付。 Urban Airship可以更快的唯一方法是,当您使用更简单的HTTP API直接调用GCM时,他们正在使用Cloud Connection Server API。