Php Firebase错误“;不匹配的Senderid“;从web服务器发送推送通知时

Php Firebase错误“;不匹配的Senderid“;从web服务器发送推送通知时,php,firebase,Php,Firebase,官方文件对此错误作了如下说明: 注册令牌绑定到特定的发送者组。当客户端应用注册FCM时,它必须指定允许哪些发件人发送消息。向客户端应用发送消息时,应使用其中一个发件人ID。如果切换到其他发件人,现有注册令牌将无法工作 我确实在“applicationServerKey”中指定了发送方,即urlB64ToUint8Array(applicationServerPublicKey)。我从firebase控制台获得了公钥,在发送通知时,我使用的是firebase服务器api密钥,也在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);