2016-11-30 76 views
10

我发展与推送通知在iOS聊天,我用火力地堡云消息,但我有这样的问题:与被杀应用的iOS推送通知 - 迅速

当应用程序被杀死(不是背景)存在从通知中获取回叫以获取内容(聊天消息)的方式?

得到一个消息,并将其保存在内部数据库检查我的服务器上,当我开始如果有未读消息的应用程序的唯一途径?

Firebase的文档在这个论点上看起来不太清晰。 只有当我发送无声通知(没有“通知”字段)时,应用程序didReceiveRemoteNotification回拨才会在我打开应用程序时被调用,但我只能获取上次通知。这个回调是不是在后台叫

更新2016年2月12日:

大量的测试后,我接触苹果的支持,他们已经回答了我这个电子邮件:

我回应你关于背景推送通知的问题。 什么多任务处理的新功能:

本主题中的WWDC 2013届204 WWDC 2013第一次讨论。无声推送通知(那些 有效载荷只包含内容可用键和毫无戒备,徽章, 或声音键)的节流交付只有当iOS的决定 它的节能这样做。

总是显示带有用户可见键(如警报,声音或 以高优先级(优先级10)发送的徽章)的推送通知。 但是,如果通知还包含内容可用密钥 ,则通知可能会受​​到限制,因此不会发送到背景中的应用程序 ,除非用户点击该通知。在低优先级(优先级5)发送

通知被节流, 无论有效负载组成。无声推送通知应始终以低优先级发送 。

随着WWDC会议上说,可以预计将有几个无声推送每小时 通知所有的应用程序的设备上。但它完全可能并且恰当,您可能根本收不到任何东西。

油门的目的是预测用户何时将启动一个 应用程序,从而允许后台活动以高效节能的方式更新应用程序的内容 。它还可以防止来自 的应用程序使用过多的用户电池或蜂窝数据,并且会阻止背景流量。

设备范围内的电池或数据预算耗尽后,将不会有 多个后台推送通知,直到重置预算 。预算每24小时重置一次,并且该计划 不能由用户或开发人员的操作更改。

由于这些预算适用于设备上的所有应用,因此有可能 某个应用不是您自己的应用已经耗尽了预算。您可以在设置>常规> 使用情况>电池使用情况中检查应用程序的整体电池使用情况。

该节流阀还跟踪何时该设备具有较差的网络连接性,因为反复尝试连接到APN时,网络连接不稳定会导致显着的功率消耗。这个 是迄今推送通知未达到 设备的最常见原因。要检查较差的网络连接是否影响您的推送 通知,您可以使用观察推送状态 消息中的步骤。

如果您使用附加的调试器运行应用程序,则油门禁用。 这使您可以测试您的通知是否正确收到 ,但应仅被视为最佳情况。

此外,从iOS 9开始,用户可以随时打开 节气门,方法是打开 “设置”>“电池”中的低功耗模式。

要测试后台推送通知,请按照下列步骤操作。

  1. 将设备连接到Mac。
  2. 从Xcode启动您的应用程序。
  3. 启动后,点击停止按钮(左上角的方形图标),停止Xcode中的应用程序。
  4. 在Xcode中,执行调试 - >附加到进程 - > [填写进程名称等待] - >附加
  5. 发送带有content-available:1的推送通知,并且您的应用程序每次都会收到通知。

您可以使用仪器的进程列表,以确认您的应用程序 在后台运行。

您还可以使用Wi-Fi和插入墙上的设备来测试电源。

如果你发送无声推送通知,确保您使用的 的APN提供API或二进制提供API,以便能够在 通知的优先级设置为5(默认优先级为10)

如果您认为节流不能正常工作,请提交错误 报告https://developer.apple.com/bug-reporting。 如何限制工作的细节不是公共API,但iOS工程查看 这些错误报告,并可以确定通知是否为 按预期进行遏制。

重要的一点是,应用程序不应该被设计为期望 每个推送通知都将被接收。这不是APNs 打算工作的方式;它旨在通知用户或应用程序发生了一些感兴趣的事件。如果未收到推送通知 ,则预计应用程序可以正常工作, 虽然可能具有降级的功能。用户可以随时关闭推送通知或背景 应用程序更新,当然,如果设备没有互联网连接,推送通知将不会被接收到 。

与iOS 7中,所有背景类别除了位置和 的VoIP(在iOS 9.3及更高)启动行为一致当用户 力退出从多任务显示的应用程序。一个应用程序不会自动重新启动,直到用户选择再次启动 。这尊重用户不想让应用程序运行, 这可能是一个非常重要的恢复技术,如果一个应用程序是 行为不当并在启动时崩溃。

如果关闭已配置为接收背景 通知的应用程序,它不会接受他们,直到它已被重新打开。

这封电子邮件后,我试图发送电报通知死亡。电报收到推送通知并显示它,但如果我在设置离线模式后打开应用程序,则聊天中不显示该消息(这意味着当我打开它时肯定会通过电报联系服务器来检查未读消息)!相反,whatsapp可以在后台添加消息,因为它是一个VoIP应用程序,它可以调用后台回调。

所以添加消息的唯一方法是联系服务器并获取未读消息。

有采用的是Android同样的问题,但可能你可以用一个后台服务解决它(并重新启动它时,它被杀死)。

现在我必须选择是否使用Apple推送通知或FCM推送通知。可靠性是一样的吗? (因为,例如,Android中的Telegram使用专有推送服务和FCM,因为他们说FCM不是很可靠)

回答

2

iOS上的消息传递应用程序需要在服务器上检查它们启动时是否赶上本地数据库与服务器的状态。推送通知不是用于保持iOS内部数据库与服务器同步的正确机制。

+0

好的,但现在我有一个问题。 如果推送通知不是在内部数据库中保存消息的正确方法,因为在我描述的情况下(应用程序被终止时),不会调用回调函数,Whatsapp/Telegram/.. 。是吗?因为,例如,如果我向Whatsapp发送消息(当它被杀害时),通知将正确显示,就像在我的应用程序中一样,但是如果没有打开Whatsapp,我会在手机上设置离线模式,然后打开Whatsapp消息显示正确,当然手机不会向服务器发出请求。谢谢 – diegocom

+0

您是否尝试将应用的信息plist的后台应用刷新为true? –

+0

@ZonilyJame是的,在我的信息plist中,我还设置了后台提取和远程通知 – diegocom