某些类型的FCM数据消息不会传递到iOS设备
我有一个发送数据和通知消息的环境 目前,我正在iPhone SE(2016)和iPhone 7 Plus上测试FCM消息,这两款设备之间的行为非常不一致,我想知道原因某些类型的FCM数据消息不会传递到iOS设备,ios,firebase,google-cloud-functions,firebase-cloud-messaging,ios14,Ios,Firebase,Google Cloud Functions,Firebase Cloud Messaging,Ios14,我有一个发送数据和通知消息的环境 目前,我正在iPhone SE(2016)和iPhone 7 Plus上测试FCM消息,这两款设备之间的行为非常不一致,我想知道原因 iPhone SE(2016)正在运行iOS 14 beta 1 iPhone7Plus正在运行iOS14Beta3 以下云功能发送通知和数据消息-这两个消息都成功传递到两个设备: // These options are global for all my fcm messages const options = { pri
- iPhone SE(2016)正在运行iOS 14 beta 1
- iPhone7Plus正在运行iOS14Beta3
// These options are global for all my fcm messages
const options = { priority: "high", timeToLive: 30000, content_available: true }
function sendProfile() {
...
const fcmToken = ********
const notif = {
notification: {
title: "test title",
body: "test body"
}
}
admin.messaging().sendToDevice(fcmToken, notif, options);
const dataMsg = {
data: {
id: id,
type: "match",
uid: uid,
name: name,
age: age.toString(),
bio: bio,
img1: String(img1),
img2: String(img2),
img3: String(img3),
pronoun: pronoun,
error: String(bot)
}
}
return admin.messaging().sendToDevice(fcmToken, dataMsg, options);
}
但是,对于以下功能:
指令
、图片
和地址
键值,然后它才起作用)
你知道这里有什么问题吗
编辑:我的Android设备没有问题。如果你能找到有关FCM消息的一些信息,如果你能找出与iPhone 7 plus设备有关的任何问题,你必须减少有效负载,请查看本博客。
Firebase云消息依靠苹果推送通知服务(APNs)向iOS应用程序发送消息(最大4KB)。在iOS中,通知和数据消息的处理方式不同,特别是:
- 通知消息:FCM代表客户端应用程序自动向最终用户设备显示消息。在这种情况下,在用户点击打开应用程序的通知之前,不会在应用程序上生成任何回调(在这种情况下,会触发userNotificationCenter(u:didReceive:withCompletionHandler:)回调)
- 数据消息: 数据消息由FCM层在所谓的(“内容可用”:true)中转换。后台通知是一种远程通知,它不会显示警报、播放声音或标记应用程序的图标,在这种情况下,客户端应用程序负责处理数据消息。这种通知的目的是在后台唤醒你的应用程序,让它有时间从你的服务器开始下载并更新其内容。发送“数据”(“后台”)通知时,在通知到达时会触发回调应用程序(“didReceiveMemotentification:fetchCompletionHandler:”),并且不会自动触发声音或警报。但是,请考虑苹果文档中的这一重要注意事项:
因此,问题可能与您手机的特殊情况有关:通知消息正确地发送到两部手机,但可能是iPhone 7 Plus操作系统正在限制或延迟数据的接收。是的,但它不起作用。数据消息通知最近停止在iOS设备上工作,但在模拟器上工作。
function sendPlace(fcmToken, placeSnapshot, matchName){
let docId = placeSnapshot.id;
let place = placeSnapshot.data();
console.log("sendPlacee: ", place.name, " to: ", fcmToken);
const dataMsg = {
data: {
type: "place",
name: place.name,
latitude: place.l.latitude.toString(),
longitude: place.l.longitude.toString(),
instruction: String(place.instruction),
placeId: docId,
picture: String(place.picture1),
matchName: matchName,
address: place.address
}
}
const notif = {
notification: {
title: "test place function",
body: "test the body message"
}
}
admin.messaging().sendToDevice(fcmToken, notif, options)
return admin.messaging().sendToDevice(fcmToken, dataMsg, options)
}