如果向用户显示推送通知,并且用户点击它并且应用程序从后台状态转到前台,则应用程序如何获取通知的有效负载?
因为该应用已在运行didFinishLaunchingWithOptions
:不会被调用,因为当推送到达didReceiveRemoteNotification
时应用程序处于后台:将不会被调用。
答案 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>