为啥在收到推送通知后 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 字典为空

为啥我无法在 iOS 10 中处理收到的推送通知?

OneSignal 按下推送通知去一个视图控制器 iOS Swift

为啥我收到此警告“缺少推送通知权利”

为啥我的 iOS 应用程序在收到推送通知时会崩溃?

当我的应用程序进行电池优化时,为啥我无法收到推送通知?