【问题标题】:How to use both GCM and Urban Airship for Android push notification如何同时使用 GCM 和 Urban Airship 进行 Android 推送通知
【发布时间】:2013-10-04 13:17:18
【问题描述】:

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

【问题讨论】:

  • 问题不清楚。为什么需要同时支持 Urban Airship 和正常的 GCM? Urban Airship 已经使用 GCM。您是否使用相同的发件人 ID 注册到 Urban Airship 和普通 GCM?您可以通过删除其中一个广播接收器来简单地抑制重复通知。问题是为什么你需要两者?
  • 谢谢。原因是我们想在匆忙时从 Urban 发送通知,在不着急时从我们的服务器(不使用 Urban)发送通知,以节省一些钱。如果我删除 GCM 的广播接收器之一,我将无法再接收常规 GCM,这就是问题所在。这清楚吗?
  • 是的,我现在对 Urban 和普通 GCM 使用相同的发件人 ID,因此使用不同的 ID 可能是个好主意。我试试看。
  • 我已尝试为每个服务使用不同的发件人 ID,但无法获得所需的结果。

标签: android notifications push-notification urbanairship.com


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的提示。我认为我最好为非 UA GCM 和 UA 使用一个接收器,而不是使用两个接收器,所以我正在尝试这样做。由于我无法通过非 UA 接收器接收 UA 的通知,因此我试图让 UA 的接收器正确接收所有通知。我使用 UA 来更快地发送通知,因为我们的服务器是低规格的(EC2 小),所以它不能一次发送很多通知。 UA 可以更快地发送。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多