Веб пу sh и ФКМ - PullRequest
       6

Веб пу sh и ФКМ

0 голосов
/ 06 апреля 2020

Я просто не могу заставить это работать. Проблема в том, что нет четкого объяснения того, куда ставить какой ключ.

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"
    }
  ]
}

Есть идеи, где поставить какой ключ? Я до сих пор понятия не имею, что делать с закрытым ключом пары ключей ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...