我正在使用FCM HTTP v1 API向移动设备发送通知。后端是使用PHP编写的,而我使用的是Google API客户端库,并且使用服务帐户来授权我对FCM的请求。但是我遇到了一些奇怪的问题,例如通知已发送到所有Android设备,但是fcm对于iOS设备返回401未经授权的错误。另外,我已经使用自己的iOS设备进行了测试,但是当我使用自己的iOS设备时,fcm总是返回200 OK。无论是我的代码还是移动设备上的某些配置,我都感到困惑。这是我发送通知的方式。
$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->addScope('https://www.googleapis.com/auth/firebase.messaging');
$httpClient = $client->authorize();
$message = [
"message" =>
[
"token" => $device_token,
"notification" =>
[
"body" => $body,
"title" => "xxxxx"
],
"apns" =>
[
"payload" =>
[
"aps" =>
[
"category" => "NEW_MESSAGE_CATEGORY",
"alert" => [
"body" => $body
],
"badge" => 3,
"sound" => "default",
"chat" => 2
]
]
]
]
];
$response = $httpClient->post("https://fcm.googleapis.com/v1/projects/xxxx-123/messages:send", ['json' => $message]);
我在授权中做错了什么?请帮忙。服务帐户文件已添加到GOOGLE_APPLICATION_CREDENTIALS环境变量中。
答案 0 :(得分:0)
FCM使用APNS(Apple推送通知服务)将消息传递到iOS设备,为此,FCM需要连接到Apple服务器。
因此,我们需要在Firebase控制台中配置APNS凭据。如果此配置中有任何错误,则FCM无法连接到Apple服务器,并返回401错误。
因此,请检查设置->项目配置->云消息传递-> iOS配置-> APNS身份验证密钥中的所有配置 特别地,请检查“ 密钥代码”是否正确。
有关此配置的更多信息,请参见:
https://firebase.google.com/docs/cloud-messaging/ios/client#upload_your_apns_authentication_key
https://firebase.google.com/docs/cloud-messaging/ios/certs
致谢