TL;DR
我正在使用FCM检测卸载。如果我在发送通知时收到NotRegistered token
,我认为该应用程序已被卸载。
安卓系统的一切都很好,而在IOS上,即使应用程序已经卸载了好几天,我也总是会收到success
的响应。
更多信息
我读到,使用APNs feedback Service
可以检测卸载,苹果会报告任何不活动的令牌。
此外,我在Firebase上阅读了官方文件:
content_available-在iOS上,使用此字段表示APN负载中可用的内容。当发送通知或消息时,如果设置为true,则会唤醒不活动的客户端应用程序,并且该消息将作为静默通知通过APN发送,而不是通过FCM连接服务器发送。
为了通过APN发送通知,我尝试使用content_available: true
发送推送通知,但我无法在IOS上重现NotRegistered token
错误。它仍然返回一条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
}
我也无法通过HTTP请求重现NotRegistered token
响应:
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上的卸载
好吧,这取决于您的需求。您的问题的答案是轻微推送而非正常推送。
后台通知是一种远程通知,不会显示警报、播放声音或标记应用程序的图标。它会在后台唤醒你的应用程序,并给它时间从你的服务器启动下载并更新其内容。苹果文档
重要
系统将后台通知视为低优先级:您可以使用它们刷新应用程序的内容,但系统不能保证它们的交付。此外,如果总数过多,系统可能会限制后台通知的发送。系统允许的后台通知数量取决于当前条件,但不要试图每小时发送超过两到三个。
当设备处于"低"时,无声推送通知将不起作用数据模式".
Slient Push Notification Payload示例。
{
"aps" : {
"content-available" : 1
},
"acme1" : "bar",
"acme2" : 42
}
你必须使用"内容可用":1在有效载荷中用于轻微推送。
另一方面,如果您的客户端在iOS 12.3或更高版本上运行删除指标