Firebase Web Push-уведомление - PullRequest
       5

Firebase Web Push-уведомление

0 голосов
/ 30 августа 2018

Я пытаюсь отправить веб-push-уведомление, используя firebase в angular5 и Codeignitor. После инициализации firebase я могу получить deviceToken, которому я хочу отправить push-уведомление. Когда я пытаюсь отправить его на сервер с помощью curl. Это всегда показывает мне эту ошибку

{
    "multicast_id":8778443463170192739,
    "success":0,
    "failure":1,
    "canonical_ids":0,
    "results":[
        {
            "error":"MismatchSenderId"
        }
    ]
}

В запросе API бэкэнда я использую "Ключ сервера", который "AAAA8q7RESs:APA91bFrOrzgvTb0yQTqTF6huozIvgi_5xf1lY8qv5kyoDViuBYnVFr3Qfxg3DZHN_e7-AqWBIvRlQvPJkgZtxKIpCYs_aUUiYHOKuKLLJvzxAENjKmF4mCQJb94tJV8J-vBgnv0FPPY".

Но всегда показывать одну и ту же ошибку.

Мой код Php бэкэнда

public function sendpushnotification() {
    $request = json_decode(file_get_contents('php://input'),true);
    $url = 'https://fcm.googleapis.com/fcm/send';
    $fields = array(
        'registration_ids'  => array($request['token']),
        'data'              => array( "message" => "Hello this is test push notification" ),
    );
    $headers = array( 
        'Authorization: key=AAAA8q7RESs:APA91bFrOrzgvTb0yQTqTF6huozIvgi_5xf1lY8qv5kyoDViuBYnVFr3Qfxg3DZHN_e7-AqWBIvRlQvPJkgZtxKIpCYs_aUUiYHOKuKLLJvzxAENjKmF4mCQJb94tJV8J-vBgnv0FPPY',
        'Content-Type: application/json'
    );


    // Open connection
    $ch = curl_init();

    // Set the url, number of POST vars, POST data
    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_POSTFIELDS, json_encode( $fields ) );

    // Avoids problem with https certificate
    curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false);

    // Execute post
    $result = curl_exec($ch);
    curl_close($ch);
    echo json_encode($result);    
}

Может кто-нибудь мне поможет. Я потратил много времени на это, но не нашел никакого решения.

И у меня есть запрос. Зависит ли deviceToken / deviceID от messageSenderID?

1 Ответ

0 голосов
/ 30 августа 2018

Прежде всего попробуйте отправить уведомление с консоли FCM, выдав устройство DeviceToken. Я использовал приведенный ниже код, и он работает нормально. Я написал эту функцию в помощнике и использовал ее в нескольких контроллерах. Второе: deviceToken / deviceID будет использоваться для пользователя, который получит сообщение.

function sendFCM($message, $id, $message_info='', $type ='') {

    $API_ACCESS_KEY = "YOUR_FCM_SERVER_KEY";

    $url = 'https://fcm.googleapis.com/fcm/send';

    $fields = array (
            'registration_ids' => array (
                    $id
            ),
            'data' => array (
                    "message" => $message,
                    'message_info' => $message_info,
            ),                
            'priority' => 'high',
            'notification' => array(
                        'title' => $message['title'],
                        'body' => $message['body'],                            
            ),
    );
    $fields = json_encode ( $fields );

    $headers = array (
            'Authorization: key=' . $API_ACCESS_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_POSTFIELDS, $fields );
    $result = curl_exec ( $ch );
    curl_close ( $ch );
}
...