FCM 是否支持 iOS 13 的新 apns-push-type?



我们目前有一个解决方案,可以将推送通知从FCM发送到APNS,然后再发送到iOS。由于引入了 iOS13,APNS 现在要求在任何传入有效负载中使用 apns-push 类型,以指定它是警报通知、后台通知还是任何其他类型。我想知道如何在发送给 FCM 的消息中添加此信息。

目前我们使用pyFCM向FCM发送消息。我们遵循此页面作为参考:https://firebase.google.com/docs/cloud-messaging/http-server-ref

from pyfcm import FCMNotification
push_service = FCMNotification(api_key="XXXX")
registration_id = '<Token>'
data_message = {
"Score": "3*1",
"DeviceId": "XXXXXX",
}
# Background notification
result = push_service.notify_single_device(registration_id=registration_id,
content_available=True,
data_message=data_message)
# Alert notification
result = push_service.notify_single_device(registration_id=registration_id,
message_title='Sample title',
message_body='Sample body',
data_message=data_message,
)

这适用于现有的iOS应用程序。但是对于 iOS 13,我找不到任何地方来指定 apns-push-type,或者 FCM 将转换为将发送到 APNS 的 apns-push-type 的任何等效字段。

我知道iOS 13相对较新,所以每个人都在努力调整现有的解决方案。希望有人能给我一些见解,如何将 apns 推送类型放入我现有的解决方案中。谢谢。

只需在要发送到 FCM 的请求标头中添加 'apns-push-type' = 'XXX'

您可以使用通知的"extra_kwargs"添加此选项。

添加extra_kwargs={"apns_push_type":"background"}用于后台通知。

# Background notification 
result = push_service.notify_single_device(registration_id=registration_id,
content_available=True,
data_message=data_message,
low_priority=True,
extra_kwargs={"apns_push_type": "background"})

此外,将后台通知的优先级标记为低。这是通过将low_priority发送为真来完成的。

对于警报通知,我们需要将 apns 推送类型作为"警报"发送

# Alert notification
result = push_service.notify_single_device(registration_id=registration_id,
message_title='Sample title',
message_body='Sample body',
data_message=data_message,
extra_kwargs={"apns_push_type": "alert"}
)

您可以检查推送通知是否有效 JSON API 向https://fcm.googleapis.com/fcm/sendURL 发布请求。 在"配置标头"中Content-Type : application/jsonAuthorization:key=<Your FCm server key>

然后在请求正文中添加这些

{ "to" : "device_token",
"notification" : 
{ 
"title": "message title!", 
"body": "MESSAGE BODY",
"token": "XXXXXXXXXX", 
"id": 1959,
"sound": "default"
},
"apns": {
"headers": { 
"apns-push-type": "alert"
}
}
}

然后,您可以检查它是否有效。 我的项目在更新IOS 13之前一直在工作。 更新后,通知在后台不起作用, 添加

"apns": {
"headers": { 
"apns-push-type": "alert"
}
}

到项目使接收通知成为可能

我们的解决方案是根据请求将其添加到标头中(此答案在PHP代码上(

$headers = [
'Authorization: key=' . $serverKey,
'Content-Type: application/json',
'apns-push-type: background'
];
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, $fcmEndpoint); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, CURL_IPRESOLVE_V4); 
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payloads)); 
$result = json_decode(curl_exec($ch), true); curl_close($ch);

相关内容

  • 没有找到相关文章

最新更新