How to send FCM notification to app from web

后端 未结 5 575
鱼传尺愫
鱼传尺愫 2020-12-23 10:51

I am developing chat app which is based on Firebase Database and Storage. Everything is working fine, but now I need implementation of FCM to receive notification on app whe

相关标签:
5条回答
  • 2020-12-23 11:09

    You can use Postman instead. Open Postman extension in chrome and use the POST url https://fcm.googleapis.com/fcm/send.

    0 讨论(0)
  • 2020-12-23 11:19

    Sending a push notification is only a matter of sending a post request to FCM servers.

    Here is working example:

    $data = json_encode($json_data);
    //FCM API end-point
    $url = 'https://fcm.googleapis.com/fcm/send';
    //api_key in Firebase Console -> Project Settings -> CLOUD MESSAGING -> Server key
    $server_key = 'YOUR_KEY';
    //header with content_type api key
    $headers = array(
        'Content-Type:application/json',
        'Authorization:key='.$server_key
    );
    //CURL request to route notification to FCM connection server (provided by Google)
    $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, $data);
    $result = curl_exec($ch);
    if ($result === FALSE) {
        die('Oops! FCM Send Error: ' . curl_error($ch));
    }
    curl_close($ch);
    

    Example of the JSON pay load:

    [
        "to" => 'DEVICE_TOKEN',
        "notification" => [
            "body" => "SOMETHING",
            "title" => "SOMETHING",
            "icon" => "ic_launcher"
        ],
        "data" => [
            "ANYTHING EXTRA HERE"
        ]
    ]
    
    0 讨论(0)
  • 2020-12-23 11:19

    You can send the post request without curl (which was not available on my server)

    sendNotification("New post!", "How to send a simple FCM notification in php", ["new_post_id" => "605"], "YOUR_SERVER_KEY");
    
    function sendNotification($title = "", $body = "", $customData = [], $serverKey = ""){
        if($serverKey != ""){
            ini_set("allow_url_fopen", "On");
            $data = 
            [
                "to" => '/topics/new_post',
                "notification" => [
                    "body" => $body,
                    "title" => $title,
                ],
                "data" => $customData
            ];
    
            $options = array(
                'http' => array(
                    'method'  => 'POST',
                    'content' => json_encode( $data ),
                    'header'=>  "Content-Type: application/json\r\n" .
                                "Accept: application/json\r\n" . 
                                "Authorization:key=".$serverKey
                )
            );
    
            $context  = stream_context_create( $options );
            $result = file_get_contents( "https://fcm.googleapis.com/fcm/send", false, $context );
            return json_decode( $result );
        }
        return false;
    }
    
    0 讨论(0)
  • function MultiandroidNotification($deviceToken, $message,$type,$title=null,$sub_title=null,$device_type=null,$data = null,$content_available = null)
    {
    
        if($content_available == 1){
            $content_available = false;
        }else{
            $content_available =  true;
        }
        if($type == 12 || $type == 13){
            $priority = '';
        }else{
            $priority = 'high';
        }
    
        $deviceToken = array_values($deviceToken);
        $no = null;
    
        $apiKey = 'XXXXXXXXXXXXXXXXXXXXXX';
    
        $notification = array("text" => "test",'badge' => "1",'sound' => 'shutter.wav','body'=>$message,'icon'=>'notif_icn','title'=>$title,'priority'=>'high','tag'=>'test','vibrate'=> 1,'alert'=> $message);
    
        $msg = array('message'=> $message,'title'=> $title,'sub_title'=> $sub_title,'type'=>$type,'activitydata' => $data);
    
        if($device_type == 'android'){
            $fields = array("content_available" => true,"priority" => "high",'registration_ids'=> $deviceToken,'data'=> $msg);
        }else{
            $fields = array('notification' => $notification,"content_available" => $content_available,"priority" => $priority,'registration_ids'=> $deviceToken,'data'=> $msg);
        }
    
        $headers = array('Authorization: key=' . $apiKey,'Content-Type: application/json');
    
        if ($headers){
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, "https://fcm.googleapis.com/fcm/send");
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
            $response = curl_exec($ch);
        }
            $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
            if (curl_errno($ch)) {
                return false; //probably you want to return false
            }
            if ($httpCode != 200) {
                return false; //probably you want to return false
            }
            curl_close($ch);
            return $response;
    }
    
    0 讨论(0)
  • 2020-12-23 11:27

    Try this code it works for me android as well as iOS

    <?php
        $url = "https://fcm.googleapis.com/fcm/send";
        $token = "your device token";
        $serverKey = 'your server token of FCM project';
        $title = "Notification title";
        $body = "Hello I am from Your php server";
        $notification = array('title' =>$title , 'body' => $body, 'sound' => 'default', 'badge' => '1');
        $arrayToSend = array('to' => $token, 'notification' => $notification,'priority'=>'high');
        $json = json_encode($arrayToSend);
        $headers = array();
        $headers[] = 'Content-Type: application/json';
        $headers[] = 'Authorization: key='. $serverKey;
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST,"POST");
        curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
        curl_setopt($ch, CURLOPT_HTTPHEADER,$headers);
        //Send the request
        $response = curl_exec($ch);
        //Close request
        if ($response === FALSE) {
        die('FCM Send Error: ' . curl_error($ch));
        }
        curl_close($ch);
    ?>
    
    0 讨论(0)
提交回复
热议问题