FCM仅针对使用PHP的Google客户端API为iOS设备返回401未经授权的错误

时间:2019-04-24 07:10:29

标签: php ios firebase firebase-cloud-messaging guzzle

我正在使用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环境变量中。

1 个答案:

答案 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

致谢