【问题标题】:Make Urban Airship restart after killed on Android让 Urban Airship 在 Android 上被杀后重启
【发布时间】:2014-11-14 08:54:33
【问题描述】:

我正在使用 Android,我知道 Urban Airship 不正式支持此功能,但我希望我的应用即使已被终止也能继续收到通知。

根据Urban Airship,它应该在用户“滑动”关闭应用程序后仍然可以工作,这对我来说很好,但我认为有些手机以同样的方式处理它,告诉操作系统不再接收任何通知。

我看到很多应用程序都有服务在退出后会自行重启,所以我知道这是有可能的。但是由于我没有源代码,所以无法修改Urban Airship 使用的服务,这限制了我的选择。

所以我想知道是否有一种简单的方法可以在退出后保持推送通知Urban Airship 使用Google Cloud Messaging 而不会弄乱UAirships 源?

编辑:好的,经过进一步修改后,我发现滑动和强制停止确实不一样。手动强制停止后通知不起作用也没关系。

【问题讨论】:

  • 正确的解决方案是从 Application.onCreate 而不是 Activity.onCreate 调用 takeOff。

标签: android push-notification android-service urbanairship.com google-cloud-messaging


【解决方案1】:

如果在 Application.onCreate 中正确调用了 takeOff,则无需执行任何操作即可继续接收推送通知。

当一个应用程序被强制停止时,它不会收到任何广播,直到它再次手动启动。这包括 BOOT_COMPLETED 广播和 GCM 意图(推送通知)。如果它被强制关闭,可能是出于某种原因,并且预期的行为是除了手动启动应用程序之外的任何其他原因都不会启动。

通过滑动关闭的应用将继续接收 Intent。没有理由添加服务或接收器来自动启动。如果您在 Application.onCreate() 中调用 takeoff 并启用推送,则一切都应该正常工作。让服务启动并且永不关闭是浪费资源并且不需要。

在 Applicaiton.onCreate 之外的任何地方调用 takeOff 是危险的,在这种情况下,如果您也在 Application.onCreate 中正确调用了 takeoff,则它是多余的。每次应用程序需要为任何组件(接收器、服务、活动)启动时,都会触发 Applicaiton.onCreate。所以只要接收到一个意图,我们就会调用 takeOff。

GCM 通过在新消息到达时向应用程序发送意图来工作。它会像 BOOT_COMPLETED 唤醒应用一样唤醒应用,呼叫起飞,Urban Airship 提供的 GCMIntentRecevier 将处理消息并像往常一样将其发布到通知中心。

在您的示例中,您可能会注意到您的服务实际上不会调用 takeOff,如果调用了,它会记录一个错误,说明它已经起飞。如果您的应用程序仍有问题,请先尝试使用提供的示例之一进行复制。如果你能用样品制作它,你应该写信来支持。以下是示例 - https://github.com/urbanairship/android-samples。

我还注意到 - “TODO:转移到一个方法,这样如果 AU 无法起飞,我可以在一段时间后重试” Urban Airship 只有在配置无效时才会起飞失败。使用无效配置重试起飞将永远不会成功。最好在 Application.onCreate 的主线程上调用一次,并且只调用一次。请阅读-http://docs.urbanairship.com/platform/android.html。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    相关资源
    最近更新 更多