Firebase 网络推送通知

Sun*_*kur 3 codeigniter push-notification firebase firebase-cloud-messaging angular5

我正在尝试使用 angular5 和 Codeignitor 中的 firebase 发送网络推送通知。初始化 firebase 后,我可以将 deviceToken 发送给我想要发送推送通知的人。当我尝试使用 curl 在后端发送它时。它总是向我显示这个错误

{
    "multicast_id":8778443463170192739,
    "success":0,
    "failure":1,
    "canonical_ids":0,
    "results":[
        {
            "error":"MismatchSenderId"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

在后端 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);    
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我。我为此花了很多时间,但没有找到任何解决方案。

我有一个疑问。deviceToken/deviceID 是否取决于 messageSenderID?

小智 5

首先尝试从 FCM 控制台发送通知给 deviceToken。我使用了下面的代码,它工作正常。我在 helper 中编写了这个函数,并在多个控制器中使用了它。第二件事: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 );
}
Run Code Online (Sandbox Code Playgroud)