当我的应用程序激活时如何处理推送通知?

Posted

技术标签:

【中文标题】当我的应用程序激活时如何处理推送通知?【英文标题】:How to handle push notification when my app become active? 【发布时间】:2015-06-26 19:15:44 【问题描述】:

我是 ios 新手,我正在处理推送通知。我已经通过 parse.com 完成了这项工作,并且工作正常。

我的问题是:

我有两个UIViewController。首先ViewControllerviewDidLoad 方法中调用一个Web 服务,从服务器获取学生数据并显示在tableview 上。

然后我在 tableview 中选择任何学生,这样它将在第二个 detailviewcontroller 上导航,其中将显示学生详细信息。

现在我按下主页按钮,我的应用程序进入后台模式,推送通知到达。

现在我点击应用程序图标而不是通知视图来显示更新。

谁能帮助我如何处理这种情况,因为当用户点击应用程序图标时,它将直接在学生详细信息视图中导航。如何处理此推送通知并更新学生表格视图?

【问题讨论】:

仅供参考:您似乎正在处理敏感(学生)信息,最近在美国,由于 FERPA/HIPAA,学校被劝阻/禁止使用利用云(parse.com 使用)的应用程序,您需要使用专用服务器。 @BorisGafurov 感谢您提供此信息。 【参考方案1】:

content-available 标志是您所需要的。将其附加到您的有效负载,处理application:didReceiveRemoteNotification:fetchCompletionHandler:,您将能够捕获所有推送通知。请查看my answer 以了解更多详情。

附:如果您的应用程序被强制关闭,则没有办法。如果您的应用正在运行 - 您可以处理所有通知

【讨论】:

评论被删除,因为它们绝对具有建设性。 另外,如果您认为您发现了重复项,请将其标记出来,而不是发布本质上是指向另一个问题的链接的答案。【参考方案2】:

虽然我喜欢读取徽章编号的解决方法,但我会尝试明确说明问题,如果您无法实现自上次请求以来会带来增量更改的同步 API 调用,您可以使用推送通知来解决问题。

    当您的应用程序只是在后台时,您的AppDelegate 将被调用- application:didReceiveRemoteNotification: 如果您的应用程序没有运行,您可以发送推送通知来触发您的应用程序进行处理,您将获得的委托是- application:didReceiveRemoteNotification:fetchCompletionHandler:

在这两种情况下,您都需要调整 JSON 有效负载以在后台启动应用程序(如果尚未运行)。

在这两种情况下,您都希望保留“未处理”通知。如果您只想保留标识符或任何其他小块信息,我可能会查看NSUserDefaults

如果数据量很大,或者如果您想从网络中获取对象,那么数据库或 CoreData(甚至 Parse.com 本地存储解决方案)应该是更合适的方法。

请务必记住,在您的应用实际启动后,清除您创建的未处理通知的本地队列。

希望对你有帮助

更新@Sega-Zero 提到了您应该在有效负载中包含的 JSON 字段的名称

【讨论】:

【参考方案3】:

好的,可以在应用打开时试试这个:

-(void)applicationDidBecomeActive:(UIApplication *)application

    int i=[UIApplication sharedApplication].applicationIconBadgeNumber;
    //if i!=0 you got some notifications - fetch data from server and refresh array with data

【讨论】:

感谢您的重播,但我的问题是不同的。我不想在应用程序处于活动状态时进入第一个屏幕,但想更新学生表数组或数据? 假设您的应用在推送到达时获得标记 - 请参阅我编辑的答案

以上是关于当我的应用程序激活时如何处理推送通知?的主要内容,如果未能解决你的问题,请参考以下文章

当应用程序不在后台运行时如何处理推送通知

如何处理不同语言的 iOS 推送通知

如何处理未打开的推送通知(iOS、Swift)

分组推送通知再次调用 MainActivity 的 OnCreate()。如何处理?

如何处理点击推送通知ios

PhoneGap/Ionic 如何处理来自 Parse 的推送通知?