当应用程序运行时,它收到推送通知,然后调用didReceive。
func userNotificationCenter(
_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void
)
字符串
因此,当调用上述委托时,我会使用收到的有效负载显示一个屏幕。这里没有问题。
当应用程序没有运行和用户点击通知,那么它应该呈现如上所述的相同屏幕。它不工作,因为我没有添加在didnashLaunchingWithOptions的代码。
然后,我添加了以下代码:
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
......
if let userInfo = launchOptions?[UIApplication.LaunchOptionsKey.remoteNotification] as? [AnyHashable: Any] {
......
}
return true
}
型
但这是不工作,我不能调试,因为当在调试模式下,我必须从后台杀死应用程序,并点击通知,但在这种情况下,调试器不会工作.我尝试了替代方法,即.
let aps = remoteNotif["aps"] as? [AnyHashable: Any]
let string = "\n Custom: \(String(describing: aps))"
let string1 = "\n Custom: \(String(describing: remoteNotif))"
DispatchQueue.main.asyncAfter(deadline: .now() + 5) { [weak self] in
if var topController = application.windows.first?.rootViewController {
while let presentedViewController = topController.presentedViewController {
topController = presentedViewController
}
let ac = UIAlertController(title: string1, message: string, preferredStyle: .alert)
ac.addAction(UIAlertAction(title: "OK", style: .default))
topController.present(ac, animated: true)
}
}
型
我该如何解决这个问题?
4条答案
按热度按时间uubf1zoe1#
“但在这种情况下调试器不会工作”不正确!即使Xcode没有启动它,您也可以在启动时附加调试器。
编辑方案,然后在“运行”操作中,在“信息”下,单击“启动”,单击第二个单选按钮:“等待可执行文件启动”。运行应用程序;它不会启动。现在通过推送通知启动应用程序。调试器工作。
mm5n2pyu2#
我已经通过实现sceneDelegate
willConnectTo
方法解决了这个问题。没有必要在didnesshLaunchingWithOptions中处理它字符串
这就够
tyg4sfes3#
您必须创建一个NotificationServiceExtension并在那里处理有效负载
在XCode中,
1.选择您的项目
1.从左下角选择Add Target x1c 0d1x
1.添加通知服务扩展
然后尝试这样做。下面的代码是用于FCM的,但您可以根据自己的负载修改它。
例如-
字符串
gupuwyp24#
将您的启动从自动更改为等待可执行文件启动,您应该能够在应用未运行时调试通知。