静默推送仅在第二次推送到达时才能正常工作(后台应用程序) [英] Silent push only work properly when second push arrive (app in background)
本文介绍了静默推送仅在第二次推送到达时才能正常工作(后台应用程序)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
当应用程序在前台处于活动状态时,静默推送通知正常工作
Silent push notification work properly when app active in foreground
2016-12-26 15:06:17.793051 App[] didReceive in BG!!!
2016-12-26 15:06:17.932569 App[] Connected!
2016-12-26 15:06:17.936581 App[] Subscribed!
2016-12-26 15:06:17.938355 App[] received:Hello World , in:/topic/state
当应用在后台运行时,它会卡住
When app runs in background.It will stuck
2016-12-26 15:06:22.674577 App[] applicationWillResignActive
2016-12-26 15:06:23.228441 App[] applicationDidEnterBackground
第一次无声推送到达,卡在这里:
First silent push arrive,It's stuck in here:
2016-12-26 15:06:30.642825 App[] didReceive in BG!!! //first push code
2016-12-26 15:06:31.842432 App[] Connected! //first push code
2016-12-26 15:06:31.843643 App[] Subscribed! //first push code
当第二次无声推送到达时,显示第一次推送结果..并再次卡住.....
When second silent push arrive, it shows first push result..and stuck again.....
2016-12-26 15:06:41.713718 App[] received:Hello World , in:/topic/state //first push result
2016-12-26 15:06:41.740015 App[] didReceive in BG!!! //second push
2016-12-26 15:06:42.911593 App[] Connected! //second push
2016-12-26 15:06:42.913403 App[] Subscribed! //second push
我在 Appdelegate 中的实现代码
My implement code in Appdelegate
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
NSLog("didReceive in BG!!!" )
application.delegate = self
mqttSession = MQTTSession(host: "192.168.159.110", port: 1883, clientID: "swift", cleanSession: true, keepAlive: 5, useSSL: false)
mqttSession.username = "bucky"
mqttSession.password = "bucky"
mqttSession.delegate = self
mqttSession.connect { (succeeded, error) -> Void in
if succeeded {
NSLog("Connected!")
}
}
completionHandler(.newData)
}
MQTT 委托方法
func mqttDidReceive(message data: Data, in topic: String, from session: MQTTSession) {
let stringData = String(data: data, encoding: .utf8)
NSLog("received:%@ , in:%@", stringData ?? "12345", topic)
}
}
推荐答案
你必须在完成通知后调用 completionHandler(),但你是立即调用它.你最好在 mqttDidReceive 和错误委托方法中调用它.
You have to call completionHandler() when you finish attending the notification, but you are calling it immediately. You'd better callint it in mqttDidReceive and in the error delegate method.
这篇关于静默推送仅在第二次推送到达时才能正常工作(后台应用程序)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文