【问题标题】:ios Proper way to determine if the method "applicationWillEnterForeground" is called due to a PushNotification actionios 确定方法“applicationWillEnterForeground”是否由于 PushNotification 操作而被调用的正确方法
【发布时间】:2013-04-15 11:45:53
【问题描述】:

我正在开发一个在- (void)applicationWillEnterForeground:(UIApplication *)application 中执行任务“A”的应用程序。

该应用还注册了远程通知。在- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 中,应用需要执行任务“B”。

当应用处于后台并收到通知时,任务执行的顺序是“A”,然后是“B”。

如果收到通知并且应用程序处于后台,我需要做的是只执行“B”任务。

如何做到这一点?

谢谢

【问题讨论】:

  • B是什么任务?当应用程序在后台时,只能执行某些操作,它们非常受限制——使用导航、播放音频、下载报亭内容——仅此而已。
  • @Reid Belton - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 没有限制
  • 看“B任务”是什么。

标签: ios notifications push-notification foreground


【解决方案1】:

你发布这个问题已经一个月了,所以我不确定你是否还需要答案,但我通过将所有共享的“入口逻辑”(我喜欢这样称呼它)推送到 applicationDidBecomeActive: 解决了这个问题并简单地将入口方法作为状态存储在 appdelegate 对象中。因此,如果我从后台进入应用程序,那么我会设置一个标志。如果我通过通知进来,我存储通知消息(这样我可以智能处理通知入口逻辑)。如果我通过 url 进入,那么我会存储该 url。在applicationDidBecomeActive: 我想看看我是从哪条路进来的。以下是我关注的状态:

  1. 点击应用图标新建应用实例(未设置状态)
  2. 通过点击应用程序图标或结束通话等从后台进入(仅输入前台标志集,没有其他内容)
  3. 从 APNS 进来(通知数据已设置,注意这可能是新应用实例或来自后台)
  4. 从 url 进来(设置了 url,注意这可能是新的应用实例或来自后台)

将所有必要的信息放在一个地方,我可以智能地决定是要执行通知入口逻辑,还是执行简单的前台入口逻辑。

顺便说一句,这个流程图非常宝贵! http://www.cocoanetics.com/2010/07/understanding-ios-4-backgrounding-and-delegate-messaging/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    相关资源
    最近更新 更多