ios - 如何在 IOS 上使用 FCM 检测卸载?
问题描述
TL;博士
我正在使用 FCM 检测卸载。如果我收到NotRegistered token
发送通知,我认为该应用程序已被卸载。
在 Android 上一切正常,而在 IOS 上我总是得到success
响应,即使应用程序已卸载数天。
更多信息
我已经读过可以使用APNs feedback Service
Apple 报告任何非活动令牌来检测卸载。
我还在 Firebase 官方文档中读到:
content_available - 在 iOS 上,使用此字段表示 APNs 有效负载中的可用内容。当发送通知或消息并将其设置为 true 时,将唤醒非活动客户端应用程序,并通过 APNs 作为静默通知发送消息,而不是通过 FCM 连接服务器。
为了通过 APN 发送通知,我尝试使用 发送推送通知content_available: true
,但无法NotRegistered token
在 IOS 上重现错误。它仍然返回一条success
消息。
我正在使用 发送通知sendMulticast
。我的有效载荷:
const payload = {
notification: {
title: text,
},
android: {
priority: "high",
ttl: 60 * 60 * 1,
collapseKey: "yo",
notification: {
channel_id: 'YO',
tag: userDoc.id,
},
},
apns: {
payload: {
aps: {
sound: "reminder.caf",
"content-available": 1,
}
},
headers: {
"apns-collapse-id": "yo",
"apns-priority": "10"
}
},
priority: 10
}
我也无法NotRegistered token
通过 HTTP 请求重现响应:
curl -X POST \
https://fcm.googleapis.com/fcm/send \
-H 'authorization: key=server_key_here' \
-H 'content-type: application/json' \
-d '{
"to": "fcm_token_here",
"priority": "high",
"content_available": true,
"notification": {
"empty": "body"
},
"data": {
"key1": ""
}
}'
底线
1. 如何使用 FCM 检测 IOS 卸载?
2. 如果不可能,如何检测 IOS 上的卸载?
解决方案
嗯,看你的需求了。您的问题的答案是无声推送而不是正常推送。
背景通知是不显示警报、播放声音或标记应用程序图标的远程通知。它会在后台唤醒您的应用程序,并给它时间从您的服务器启动下载并更新其内容。苹果文档
重要的
系统将后台通知视为低优先级:您可以使用它们来刷新应用程序的内容,但系统不保证它们的交付。此外,如果总数变得过多,系统可能会限制后台通知的传递。系统允许的后台通知数量取决于当前情况,但不要尝试每小时发送超过两三个。
当设备处于“低数据模式”时,静音推送通知将不起作用。
静默推送通知有效负载示例。
{
"aps" : {
"content-available" : 1
},
"acme1" : "bar",
"acme2" : 42
}
您必须在有效负载中使用"content-available" : 1来进行无声推送。
另一方面,如果您的客户端在 iOS 12.3 或更高版本上运行,则删除指标
推荐阅读
- python - 我正在尝试从特定格式的字符串中提取日期和时间
- docker - Gitlab docker run 无法挂载 ${CI_PROJECT_DIR} 文件夹
- r - 从数据框 R 创建加权邻接矩阵
- javascript - 如果输入的数字总和具有特定值(JS),则禁用按钮
- kotlin - DiffUtil.ItemCallback - 定义为伴随对象还是类?
- python - tkinter 无法使用复选按钮正确显示数据
- docker - 如何使用 Docker-Compose 链接后端和前端
- terraform - 在 Terraform 云中删除变量后 Terraform 计划错误
- java - 沿边缘移动矩阵
- vb.net - VS 2019 WebForms VB-project tableadapter未定义?