Php Firebase错误“;不匹配的Senderid“;从web服务器发送推送通知时
官方文件对此错误作了如下说明: 注册令牌绑定到特定的发送者组。当客户端应用注册FCM时,它必须指定允许哪些发件人发送消息。向客户端应用发送消息时,应使用其中一个发件人ID。如果切换到其他发件人,现有注册令牌将无法工作 我确实在“applicationServerKey”中指定了发送方,即urlB64ToUint8Array(applicationServerPublicKey)。我从firebase控制台获得了公钥,在发送通知时,我使用的是firebase服务器api密钥,也在firebase控制台中提供 以下是我注册客户端的部分代码:Php Firebase错误“;不匹配的Senderid“;从web服务器发送推送通知时,php,firebase,Php,Firebase,官方文件对此错误作了如下说明: 注册令牌绑定到特定的发送者组。当客户端应用注册FCM时,它必须指定允许哪些发件人发送消息。向客户端应用发送消息时,应使用其中一个发件人ID。如果切换到其他发件人,现有注册令牌将无法工作 我确实在“applicationServerKey”中指定了发送方,即urlB64ToUint8Array(applicationServerPublicKey)。我从firebase控制台获得了公钥,在发送通知时,我使用的是firebase服务器api密钥,也在firebase控
const applicationServerPublicKey = '<public key obtained from "web push certificates" inside firebase console -> cloud messaging>';
let swRegistration = null;
// Take the application server's public key which is base 64 URL safe encoded, and convert it to a UInt8Array as this is the expected input of the subscribe call.
function urlB64ToUint8Array(base64String) {
const padding = '='.repeat((4 - base64String.length % 4) % 4);
const base64 = (base64String + padding)
.replace(/\-/g, '+')
.replace(/_/g, '/');
const rawData = window.atob(base64);
const outputArray = new Uint8Array(rawData.length);
for (let i = 0; i < rawData.length; ++i) {
outputArray[i] = rawData.charCodeAt(i);
}
return outputArray;
}
// Register a Service Worker
if ('serviceWorker' in navigator && 'PushManager' in window) {
navigator.serviceWorker.register(pageURL+'inc/js/serviceWorker.js')
.then(function(swReg) {
swRegistration = swReg;
})
.catch(function(error) {
// ignore
});
} else {
// ignore
}
// Call the subscribe() method on service worker's pushManager
function subscribeUser() {
const applicationServerKey = urlB64ToUint8Array(applicationServerPublicKey);
swRegistration.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: applicationServerKey
})
.then(function(subscription) {
// user is subscribed
updateSubscriptionOnServer(subscription, applicationServerKey);
isSubscribed = true;
})
.catch(function(err) {
// ignore
});
}
之所以使用“explode(“/”,$data['endpoint']),是因为它包含从firebase返回的注册id。端点响应如下所示:
现在,var_dump提供:
字符串(119)
{“多播id”:6615023055114007195,“成功”:0,“失败”:1,“规范id”:0,“结果”:[{“错误”:“不匹配的共享”}]}
你能帮我一下吗?经过两天的反复试验,我没有发现错误。
谢谢大家! 我也一样,你知道怎么修吗?你好,你知道吗?因为我有同样的问题。谢谢
$registrationID = explode('/', $data['endpoint']);
$message = [
'title' => 'Message title',
'body' => 'This is sample notification'
];
$payload = [
'registration_ids' => [end($registrationID)],
'data' => $message
];
$headers = [
'Authorization: key=' . FIREBASE_SERVER_KEY,
'Content-Type: application/json'
];
$ch = curl_init('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_POSTFIELDS, json_encode($payload));
$result = curl_exec($ch);
curl_close($ch);
var_dump($result);