我有一个问题。当您从通知中打开应用程序时,即使该应用程序未在后台运行,是否也可以获得通知主体。它被完全杀死了。
答案 0 :(得分:1)
您需要根据收到应用时所处状态的不同来处理通知:
如果您的应用未运行,并且用户通过点击推送通知来启动应用,则推送通知会通过application(_:didFinishLaunchingWithOptions:)
的launchOptions传递给您的应用。
如果您的应用程序在前台或后台运行,则系统会通过调用application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
来通知您的应用程序。如果用户通过点击推送通知打开应用,iOS可能会再次调用此方法,因此您可以更新UI并显示相关信息。
在return语句之前,在application(_:didFinishLaunchingWithOptions:)
的末尾添加以下代码:
// Check if launched from notification
let notificationOption = launchOptions?[.remoteNotification]
// 1
if let notification = notificationOption as? [String: AnyObject],
let aps = notification["aps"] as? [String: AnyObject] {
// 2
print(aps)
}
要处理接收推送通知的另一种情况,请将以下方法添加到AppDelegate:
func application(
_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable: Any],
fetchCompletionHandler completionHandler:
@escaping (UIBackgroundFetchResult) -> Void
) {
guard let aps = userInfo["aps"] as? [String: AnyObject] else {
completionHandler(.failed)
return
}
print(aps)
}
答案 1 :(得分:0)