我在Xcode版本8.1(8B62)中使用Swift 3。
长期以来一直困在这个问题上: 当我将带有数据的推送通知发送到应用程序我构建并且应用程序位于前台时,一切正常。当应用程序在后台并点击进来的推送通知时,一切正常。但是,每当我打开应用程序而不点击通知时,该消息都不会被保存。这不仅是用户没有点击通知时的问题,而且当有多个通知进入时,用户只能点击其中一个,其余的都会丢失。
我的应用程序是一个消息传递应用程序,它仅将消息保存在手机上(不在任何中央数据库中,以便每当应用程序进入前台时它都可以从那里进行更新)。
以下是我在AppDelegate中使用的代码:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
FIRApp.configure()
let notificationTypes : UIUserNotificationType = [UIUserNotificationType.alert, UIUserNotificationType.badge, UIUserNotificationType.sound]
let notificationSettings = UIUserNotificationSettings(types: notificationTypes, categories: nil)
application.registerForRemoteNotifications()
application.registerUserNotificationSettings(notificationSettings)
return true
}
func application(_ application: UIApplication, didReceiveRemoteNotification data: [AnyHashable : Any]){
let state = UIApplication.shared.applicationState
if state == .background {
print("I'm in the background place")
updateNewMessage(data: data)
}
else if state == .active {
print("I'm in the active place")
updateNewMessage(data: data)
}
else if state == .inactive{
print("I'm in the inactive statement")
updateNewMessage(data: data)
}
else{
print("I'm in the else statement")
updateNewMessage(data: data)
}
}
updateNewMessage(data:data)函数正好执行将消息从数据上传到手机内部SQL数据库所需的功能。
还有一些事情发生: 当电话在前台时收到消息,打印声明"我在活动的地方"显示,当用户在屏幕关闭时点按通知或在后台使用应用程序"我在非活动语句中#34;打印出来。
从我读过的所有内容来看,人们都说这里的方法是使用除了didReceiveRemoteNotification之外的其他内容,
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void
然而,当尝试同时使用这些内容时,即使用户点按通知,我也无法上传收到的消息(除非我做错了...)
非常感谢任何帮助,谢谢!