我想我已经在网上阅读了所有可能的文档和所有可能的答案,但仍然无法做到这一点:
-
使用Firebase云功能发送到APNS服务器
-
有4个设备:两个是13.3.1(XR和SX Max(的最新设备,一个是13.1(6s(的,一个安装了12(6(个ios的
-
当所有手机处于前台或后台时,发送推送通知到达所有手机
-
发送推送通知到达所有手机,但带有ios 12的手机除外,当应用程序被关闭但仍连接到电源并具有网络时
-
在断开电源一段时间或失去网络连接后,即使再次插入手机并重新获得网络,XS max停止接收通知,但XR和6S仍在接收通知。(didReceiveRemoteNotification:fetchCompletionHandler:未启动!(
我在任何地方都试过了每一个技巧和每一个建议。
目前正在开发中使用Swift 4.2,该项目支持的SDK是IOS 10(公司没有升级到Swift 5和IOS 12/13(
应用程序代码:订阅总是发生(工作正常(
在应用程序中:didFinishLaunchingWithOptions:
Messaging.messaging().delegate = self
Messaging.messaging().subscribe(toTopic: "theTopic") { error in
print("Subscribed to LocationWakeNotify topic")
}
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.sound, .alert]) { (granted, error) in }
application.registerForRemoteNotifications()
UNUserNotificationCenter.current().delegate = self
服务器代码:
let message = {
topic: data.topic,
apns: {
payload: {
aps: {
"content-available" : 1
},
"content-id" : 1
},
headers: {
"apns-push-type" : "background",
"apns-priority" : "5"
}
}
};
我尝试了可用的内容:是的,也是一样。
我尝试过使用和不使用标题,只有当应用程序被终止时才会发生这种情况,并且使用无声通知,如果我发送内容(标题/正文(,则会100%传递到所有设备,但我需要它是无声通知。
在我看来,当我断开电源或网络或其他什么的时候(我就是想不通(,一些设备会失去听众?!?我要提到的是,我在XR和XS Max的设置中找不到任何差异,XR总是在工作,XS Max失去了连接。
更奇怪的问题是,在所有设备中,位置更改似乎都在触发(locationManage:didUpdateLocations:(,但通知委托没有被触发。因此,甚至应用程序也没有从操作系统断开连接。通知正在工作,因为在某些设备中它们一直在工作,而在其他设备中则不。。。非常奇怪。
10倍
您是否已注册通知?您可以在AppDelegate
中尝试使用此代码,并在didFinishLaunch
中调用此函数
private func registerRemoteNotifications(for application: UIApplication) {
Messaging.messaging().delegate = self
UNUserNotificationCenter.current().delegate = self
// Notifications
if #available(iOS 10.0, *) {
// For iOS 10 display notification (sent via APNS)
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions,
completionHandler: { _, _ in })
} else {
let settings: UIUserNotificationSettings =
UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
application.registerUserNotificationSettings(settings)
}
application.registerForRemoteNotifications()
}
```