当我的应用程序激活时如何处理推送通知?
Posted
技术标签:
【中文标题】当我的应用程序激活时如何处理推送通知?【英文标题】:How to handle push notification when my app become active? 【发布时间】:2015-06-26 19:15:44 【问题描述】:我是 ios 新手,我正在处理推送通知。我已经通过 parse.com 完成了这项工作,并且工作正常。
我的问题是:
我有两个UIViewController
。首先ViewController
在viewDidLoad
方法中调用一个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
【讨论】:
感谢您的重播,但我的问题是不同的。我不想在应用程序处于活动状态时进入第一个屏幕,但想更新学生表数组或数据? 假设您的应用在推送到达时获得标记 - 请参阅我编辑的答案以上是关于当我的应用程序激活时如何处理推送通知?的主要内容,如果未能解决你的问题,请参考以下文章