【问题标题】:Handle APNS Remote Notifications while in Background在后台处理 APNS 远程通知
【发布时间】:2011-09-29 15:29:53
【问题描述】:

我已经在 AppDelegate 中实现了所有推荐的方法来启动远程通知服务。

我可以在运行、启动和关闭时接受它们。

但是有一个问题,因为我无法在后台处理许多收到的通知。我只能处理最新通知。

推荐的手册是什么?如何在后台收到所有通知?是否只能通过手动调用我的服务提供商(apns 数据的发送者)来解决?

【问题讨论】:

  • 如果您真正正确实施 APNS,您的应用永远不会“处理”通知。 iOS 接收所有通知,用户可以使用这些通知打开您的应用程序。就是这样。
  • 通知系统并非旨在用于在服务器和设备之间发送重要数据。它只是为了撞击设备,以便它可以联系服务器并找出实际发生的情况。除了不适合这种推送通知之外,它还不够可靠,无法做任何重要的事情。如果服务器负载对您来说是个问题,那么提高您的应用程序的价格或其他东西来弥补它。如果你的应用很好,用户会很乐意付费。

标签: iphone objective-c ipad apple-push-notifications


【解决方案1】:

对于我从事的所有项目,如果推送通知被取消,则无法在本地存储此信息。在所有这些情况下,我们在服务器上使用了一个小文件,当它再次激活时,应用程序将连接到该文件并拉取该文件。在应用程序中的某个地方,用户可以看到他们的所有通知,这些通知再次存储在服务器上以便快速检索。

按照我理解的推送通知设置方式,如果通知被关闭,系统会丢弃它。它会执行它应该做的任何事情(例如更新徽章编号并播放正确的声音),但特定于该通知的任何其他信息都会丢失。

【讨论】:

  • 感谢您的回答。我想知道的是,当应用程序处于前台时,推送通知会直接传递给 AppDelegate。但是当我在后台运行长任务时,我也想收到这些通知。你觉得有可能吗?
  • 我认为这不可能。从我处理过的所有事情来看,我们总是不得不去服务器获取“错过”的通知。如果在应用程序处于后台时通知被取消,唯一需要更改的是徽章编号。
【解决方案2】:

不确定这是否有帮助,但如果您只是想知道您在后台时错过了多少通知。您可以创建一个包含通知编号的变量,并在每次处理通知时将其存储在应用程序中。当您离开后台并收到新通知时,您可以用存储的号码减去新号码,以找出错过的通知数量。我认为 iOS 无法为您提供与应用在后台时收到的所有通知设备相关的完整数据。

【讨论】:

  • 好建议,但我正在寻找如何在本地存储它们的方法,因为在我的情况下,在客户端令牌 ID 的一些通知 ID 之后获取通知对服务器来说很繁重......
  • 应用在后台时,是否要将推送中收到的信息存储在本地?
  • @Nilesh 是的,我想存储收到的通知,而我的应用正在后台运行长任务。
  • @MarekSebera 我认为 iOS 不允许这样做。您必须按照 Thomas Hajcak 的建议使用您的服务器来处理它。只需使用推送通知让您的应用知道有新数据可用,然后从服务器拉取数据。
【解决方案3】:

最好的解决方案是在您的服务器上保留一份包含所有相关数据的已发送通知列表,以便应用在启动时访问该数据。使用未存储在服务器上的数据发送多个通知可能会有风险,因为应用程序仅在用户从该通知打开应用程序时收到通知,因此如果他们点击一个通知,应用程序只有每个人都会收到那个。

如果您将它们全部放在服务器上的列表中,应用程序可以简单地将该列表拉下并进行处理,确保没有数据丢失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-04
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多