如果用户点击通知时应用程序已在后台运行,您如何获得推送通知的有效负载?

时间:2014-05-05 20:50:28

标签: ios push-notification

如果向用户显示推送通知,并且用户点击它并且应用程序从后台状态转到前台,则应用程序如何获取通知的有效负载

因为该应用已在运行didFinishLaunchingWithOptions:不会被调用,因为当推送到达didReceiveRemoteNotification时应用程序处于后台:将不会被调用。

3 个答案:

答案 0 :(得分:1)

有两个地方所以我通常会制作一个方法来处理这样的事情:

- (void)handleMessageFromRemoteNotification:(NSDictionary *)userInfo

然后在:application:didFinishLaunchingWithOptions:

if ([launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]) {
        [self handleMessageFromRemoteNotification:launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]];
}

也在:application:didReceiveRemoteNotification: [self handleMessageFromRemoteNotification:userInfo

如果您想在应用程序运行时执行其他操作,请在didReceiveRemoteNotification中检查application.applicationState == UIApplicationStateActive

答案 1 :(得分:0)

根据Apple文档,当用户点击通知的操作按钮时,会调用方法didFinishLauchingWithOptions :.

  

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

然后在这种方法中,通过例如:

可以很容易地恢复通知的内容
UILocalNotification *localNotif =
    [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
if (localNotif) {
    NSString *itemName = [localNotif.userInfo objectForKey:ToDoItemKey];
    [viewController displayItem:itemName];  // custom method
    app.applicationIconBadgeNumber = localNotif.applicationIconBadgeNumber-1;
}

答案 2 :(得分:0)

"因为当推送到达时,应用程序处于后台,并且已经调用了接收远程通知:"

如果应用程序在后台并且当用户点击通知时切换到前台,则应该调用此函数或didReceiveRemoteNotification:withExpirationHandler。

但是当我没有工作时我遇到了这样的情况,因为推送的内容不正确,我无法记住细节,但要仔细检查那里的内容。< / p>