Firebase Cloud Message (FCM):尝试从 PHP 向设备发送消息(错误:InvalidRegistration)
Posted
技术标签:
【中文标题】Firebase Cloud Message (FCM):尝试从 PHP 向设备发送消息(错误:InvalidRegistration)【英文标题】:Firebase Cloud Message (FCM) : trying to send message to device from PHP (error: InvalidRegistration) 【发布时间】:2021-12-31 13:07:32 【问题描述】:我正在尝试从 php 发送推送消息,但收到以下错误消息:
"multicast_id":4832091122368281316,"success":0,"failure":1,"canonical_ids":0,"results":["error":"InvalidRegistration"]
我认为浏览器 ID 不匹配,但我不知道应该使用哪个。
当我通过 JS 注册推送通知时,我在我的 PHP 服务器上收到以下负载:
"endpoint":"https://fcm.googleapis.com/fcm/send/XXX:YYY","expirationTime":null,"keys":"p256dh":"ZZZ","auth" :"AAA"
为了在 PHP 中发送消息,我使用了以下代码(在 stackexchange 上找到):
function sendnotification($to, $title, $message, $img = "", $datapayload = "")
$msg = urlencode($message);
$data = array(
'title'=>$title,
'sound' => "default",
'msg'=>$msg,
'data'=>$datapayload,
'body'=>$message,
'color' => "#79bc64"
);
if($img)
$data["image"] = $img;
$data["style"] = "picture";
$data["picture"] = $img;
$fields = array(
'to'=>$to,
'notification'=>$data,
'data'=>$datapayload,
"priority" => "high",
);
$headers = array(
'Authorization: key=MYSERVERKEY',
'Content-Type: application/json'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send');
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($fields));
$result = curl_exec($ch);
curl_close( $ch );
return $result;
我认为我使用了正确的服务器密钥,如果不正确,我会收到不同的错误消息。
对于 $to,我想知道我应该使用什么。我以为我必须在端点之后使用 XXX:YYY 但它不起作用(XXX 很短,YYY 很长)。我也试过 ZZZ 和 AAA,但也没有用。
我的问题:
我应该使用哪种 ID 将消息发送到特定浏览器?
我应该怎么做才能向所有注册的浏览器发送通知?
谢谢!
【问题讨论】:
【参考方案1】:您必须确保存储用户浏览器的令牌,只有在请求提示允许时才能获取,例如
在用户允许请求时,它会生成如下所示的令牌
此令牌可用于将消息发送到特定浏览器。
因此,在您的代码中,您的 $to = 应该是设备令牌。
即“到”:“
【讨论】:
谢谢!我已经在注册浏览器时发布了发送到服务器的 JSON,但是我尝试了所有组合 XXX/YYY/ZZZ 或 AAA(见上文),我不知道哪个应该是来自浏览器的令牌。根据我在您的回答中看到的情况,我会说 XXX:YYY 但我不确定。以上是关于Firebase Cloud Message (FCM):尝试从 PHP 向设备发送消息(错误:InvalidRegistration)的主要内容,如果未能解决你的问题,请参考以下文章
FCM Cloud Messaging 与 Notifications 和 Message 的区别
多次调用 Cloud Functions for Firebase
Google Cloud Message (GCM) sent android is Error inValid Register
如何在 JSON 对象中为 Firebase Cloud Messaging 发送“event_time”?