帖子请求中的fcm auth错误

时间:2018-06-22 15:14:16

标签: php firebase curl google-cloud-messaging firebase-cloud-messaging

我有一个使用fcm进行通知的应用程序,当我通过控制台发送消息时一切正常,但是当我尝试通过php(curl post)或postman(firefox extension)发送时,我得到了一个auth错误(即使使用密钥)

string(304)“ {” error“:{” code“:401,” message“:”请求缺少必需的身份验证凭据。预期的OAuth 2访问令牌,登录cookie或其他有效的身份验证凭据。参见https://developers.google.com/identity/sign-in/web/devconsole-project。“,”状态“:”未授权“}}”

我从Firebase项目控制台获得了密钥 我的php代码是

  public function send_FCM(){
// Method - 1
$fcmUrl = 'https://fcm.googleapis.com/v1/projects/anal.........719/messages:send';
$notification = array(
  "to"=>"/topic/cidade396",
  "notification"=>array(
    "body"=>"test 123"
  )
);
 $headers = [
    'Authorization: key=AIz.........9KWwy5BisxXYbA8',
    'Content-Type: application/json'
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$fcmUrl);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($notification));
$result = curl_exec($ch);
curl_close($ch);
var_dump($result);
return true;

} 有人知道我该如何解决?

2 个答案:

答案 0 :(得分:1)

旧版FCM 使用您从Firebase控制台获取的密钥。使用正在使用的 FCM v1 ,您可以使用根据服务帐户密钥创建的更安全的凭据。您可以在Firebase控制台的“项目设置”>“服务帐户”下下载服务帐户,然后单击“生成新私钥”。有关更多信息,请参见Firebase guide。获取凭证的PHP指导为here

格式为

Authorization: Bearer ya29.ElqKBGN2Ri_Uz...HnS_uNreA

但是它不适用于API密钥。您需要传递Google凭据,您可以在上面的链接中找到生成方法。

答案 1 :(得分:0)

authorizing HTTP v1 send requests文档中的示例显示Authorization标头值以Bearer而非key=开头:

$headers = [
    'Authorization: Bearer AIz.........9KWwy5BisxXYbA8',
    'Content-Type: application/json'
];