我刚刚弄清楚如何在我的应用程序中正确发送推送通知。然而,当它开始正常工作时,出现了一种新的错误类型。我的应用程序在收到推送通知后启动时崩溃。我在5台设备上进行了测试,其中2台由于该问题而崩溃奇怪的是其他3个设备都运行在iOS 10.2和9.3.1上。我真的不认为这与操作系统有关。
苹果已经发送了一个崩溃日志像这样,但当我点击打开在项目中,它只是打开我的启动屏幕xib x1c 0d1x
我的appDelegate类APNS服务调用部分-〉
func registerForPushNotifications(application: UIApplication)
{
if #available(iOS 10.0, *){
UNUserNotificationCenter.currentNotificationCenter().delegate = self
UNUserNotificationCenter.currentNotificationCenter().requestAuthorizationWithOptions([.Badge, .Sound, .Alert], completionHandler: {(granted, error) in
if (granted)
{
UIApplication.sharedApplication().registerForRemoteNotifications()
}
else{
CommonViewController.alertViewUI("Alert", message: "Push notification is enabled")
}
})
}
else{ //If user is not on iOS 10 use the old methods we've been using
let notificationSettings = UIUserNotificationSettings(
forTypes: [.Badge, .Sound, .Alert], categories: nil)
application.registerUserNotificationSettings(notificationSettings)
}
}
我的应用程序正在运行-〉启动时----------------------
一个版本检查类,用于了解用户版本。从那里它被重定向到主页面(主页)。
在主页上-〉1.加载视图。2.异步调用一个链接并获取要在警报符号附近显示的可用通知的计数。(我非常确定调用此链接或获取通知时没有错误)---------------------------
注:**当双击iPhone主页按钮菜单时,应用程序在后台显示为打开的屏幕,主页打开(崩溃后)。
**一个10.3.1设备工作正常
**如果重新安装了应用程序,则一切正常。
4条答案
按热度按时间lndjwyie1#
如果我理解正确,您的应用程序正在移动到后台,并在返回前台时崩溃。
这看起来不像是UNUserNotifications的问题。更像是通知只是在这种情况下触发了你的应用程序崩溃。堆栈显示崩溃发生在你的应用程序中。这意味着当你返回前台时,你正在某个地方运行一个空指针引用。
瞎猜:
您是否正在收听UI应用程序已成为活动通知或UI应用程序将进入前景通知?
如果是的话,监听这些通知的每个类都需要在它们遇到垃圾收集器之前取消订阅,最好在dealloc/deinit中取消订阅。
由于您使用Swift:
Objective-C ARC看起来像这样:
如果它没有监听通知,那么它仍然是一个被释放的引用。它没有立即崩溃的原因可能是一个简单的僵尸。一个即将被释放的对象示例,但在一些设备上运行时还没有被释放。
wb1gzix02#
ylamdve63#
请检查您在此中写入的内容,因为此函数在接收推式通知时调用。请对此进行调试。
函数应用程序(_ application:UI应用程序,是否接收远程通知用户信息:[任何哈希:任何]){ }
5cnsuln74#
对我来说,它是在请求授权之前设置UNUserNotificationCenter.current()的委托,这导致了崩溃。这是我修复它的方法。希望它能帮助其他人。