为啥在收到推送通知后 launchOptions 为零?
Posted
技术标签:
【中文标题】为啥在收到推送通知后 launchOptions 为零?【英文标题】:Why launchOptions is nil after receiving push notification?为什么在收到推送通知后 launchOptions 为零? 【发布时间】:2014-03-26 11:28:02 【问题描述】:在收到推送通知并通过点击通知打开应用程序后,在didFinishLaunchWithOptions
中收到nil
的可能原因是什么?我已经仔细检查了应用程序是否已停止,而不仅仅是在后台。并且nil
仍然始终写入日志。
我在didFinishLaunchWithOptions
中没有做任何特别的事情,代码如下:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
[MA init];
NSLog(@"%@", launchOptions);
if (!launchOptions)
return YES;
id userInfo = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];
if (userInfo[@"aps"] && userInfo[@"id"])
MAResult* result = [[MA data] resultById:userInfo[@"id"]];
if (result)
[((UINavigationController *)self.window.rootViewController) pushViewController:[[MATaskDetails alloc] initWithResults:result] animated:YES];
return YES;
【问题讨论】:
payload里面有什么? 【参考方案1】:您可以尝试使用 didReceiveRemoteNotification 委托方法
- (void)application:(UIApplication *)application
didReceiveRemoteNotification:(NSDictionary *)userInfo
[MA init];
NSLog(@"%@", Received Notification);
if (userInfo[@"aps"] && userInfo[@"id"])
MAResult* result = [[MA data] resultById:userInfo[@"id"]];
if (result)
[((UINavigationController *)self.window.rootViewController) pushViewController:[[MATaskDetails alloc] initWithResults:result] animated:YES];
希望对您有所帮助....!
【讨论】:
【参考方案2】:如果应用程序处于前台模式,则它会通过application:didReceiveRemoteNotification:
接收推送通知
但如果应用程序未处于前台模式,则推送通知将传递给application:didFinishLaunchingWithOptions:
所以我相信你的应用程序处于前台模式和application:didFinishLaunchingWithOptions:
根本没有被调用。
【讨论】:
以上是关于为啥在收到推送通知后 launchOptions 为零?的主要内容,如果未能解决你的问题,请参考以下文章
应用程序未运行时推送通知 - launchOptions 字典为空