我正在使用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]);
我在授权方面做错了什么?请帮忙。服务帐户文件已添加到 env 变量GOOGLE_APPLICATION_CREDENTIALS。
FCM 使用 APNS(Apple Push Notification Service(将消息传递到 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
问候