1

我正在为 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 的正确方法。有没有人成功过,或任何其他想法?我可以用意图过滤器做点什么吗?

4

1 回答 1

1

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

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

除此之外,我看不出通过 Urban Airship 发送消息如何使它们更快到达,因为它们还将消息发送到 GCM 服务器,后者进行实际传递。Urban Airship 可以更快的唯一方法是,如果他们使用云连接服务器 API,而您使用更简单的 HTTP API 直接调用 GCM。

于 2013-10-05T11:21:18.857 回答