Я просто не могу заставить это работать. Проблема в том, что нет четкого объяснения того, куда ставить какой ключ.
function subscribeUser() {
if ('serviceWorker' in navigator) {
navigator.serviceWorker.ready.then(function(reg) {
const mykey = "FIREBASE_SETTINGS_TAB_CLOUD_MESSAGING_WEBCONFIG_PUBLIC_KEY";
reg.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: mykey
}).then(function(sub) {
console.log(sub);
console.log(sub.endpoint);
}).catch(function(e) {
if (Notification.permission === 'denied') {
console.warn('Permission for notifications was denied');
} else {
console.error('Unable to subscribe to push', e);
}
});
})
}
}
При обновлении я получаю Pushsubscription:
PushSubscription {endpoint: "ENDPOINT_URL", expirationTime: null, options: PushSubscriptionOptions}
endpoint: "ENDPOINT_URL"
expirationTime: null
options: PushSubscriptionOptions {userVisibleOnly: true, applicationServerKey: ArrayBuffer(65)}
__proto__: PushSubscription
Я использую эту конечную точку для получения sh уведомления , Я ожидаю получить сообщение об успехе некоторого вида.
function test_message()
{
$registration_ids = array("FIREBASE_SETTINGS_TAB_CLOUD_MESSAGING_SENDER_ID");
$message = array(
'title' => 'This is a title.',
'body' => 'Here is a message.',
'vibrate' => 1,
'sound' => 1
);
$url = 'ENDPOINT_URL';
$fields = array(
'registration_ids' => $registration_ids,
'data' => $message
);
$headers = array(
'Authorization: key=FIREBASE_SETTINGS_TAB_CLOUD_MESSAGING_SERVER_KEY',
'Content-Type: application/json'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
$result = curl_exec($ch);
if ($result === FALSE) {
die('Curl failed: ' . curl_error($ch));
}
curl_close($ch);
echo $result;
}
Но вместо успеха я получаю: ключ в заголовке авторизации не соответствует идентификатору отправителя, который использовался для подписки этого пользователя. Убедитесь, что вы используете правильный ID отправителя и ключ сервера с консоли Firebase.
Если я не использую ENDPOINT_URL, а просто https://fcm.googleapis.com/fcm/send, я получаю это сообщение:
{
"multicast_id": 465150057699707430,
"success": 0,
"failure": 1,
"canonical_ids": 0,
"results": [
{
"error": "InvalidRegistration"
}
]
}
Есть идеи, где поставить какой ключ? Я до сих пор понятия не имею, что делать с закрытым ключом пары ключей ...