iOS 6:收到推送通知后更新视图,但应用已关闭

时间:2013-02-18 19:38:47

标签: ios ios6 push-notification apple-push-notifications

在应用收到推送通知后,我想更改主ViewController上某些按钮的标题。为了实现这个行为,我在我的应用程序中覆盖了方法application: didReceiveRemoteNotification:以重新实例化UINavigationController与我想要更新的控制器作为其根视图控制器,将按钮的标题设置为任何我想要:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
       UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:self.welcomeViewController];
       [self.window setRootViewController:navController];
       [self.welcomeViewController.buttonToUpdate setTitle: @"Updated Text" forState: UIControlStateNormal];
}

虽然这可能不是最好的解决方案(也许我可以完全忘记UIButtons并使视图控制器使用UITableView,其行作为按钮?),但它适用于以下方案:

1)应用程序位于前台。弹出推送通知提醒,用户触摸确定,视图更新正常。

2)应用程序在后台/关闭。设备处于锁定模式。推送通知到达,用户解锁设备,加载应用程序,查看也更新。

当用户使用其他应用程序时,似乎会出现问题,推送通知到达,但用户不是通过推送通知打开应用程序,而是通过点击应用程序图标。在这种情况下,似乎没有调用application: didReceiveRemoteNotification:,并且问题中的视图永远不会更新。

希望我的解释清楚。我愿意接受有关不同方法的建议,或者如何使用我的方法处理最后一个方案。

谢谢!

1 个答案:

答案 0 :(得分:8)

来自APNS开发指南:

  

让我们回顾一下操作提供的可能情况   本地通知或应用程序的远程通知。

     

在应用程序未运行时传递通知   前景。在这种情况下,系统会显示通知,   显示警报,标记图标,或者播放声音。

     

作为呈现通知的结果,用户点击该动作   警报按钮或点击(或点击)应用程序图标。如果   点击操作按钮(在运行iOS的设备上),系统启动   应用程序和应用程序调用其委托   application:didFinishLaunchingWithOptions:方法(如果实现);它   传递通知有效载荷(用于远程通知)或   本地通知对象(用于本地通知)。

     

如果在运行iOS的设备上点击应用程序图标,则   应用程序调用相同的方法,但不提供任何信息   关于通知

您遇到的行为是点击应用图标时的预期行为。在这种情况下,就像用户正常启动应用程序并且没有推送通知一样。在这种情况下,您可以选择显示不同内容的唯一方法(我能想到)是在应用程序启动时联系您的服务器,并获取一些信息,指示最近发送到该设备的推送通知。