Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

cordova fcm plugin on Android data.wasTapped not working

I am trying to use cordova fcm plugin on Android to implement the data sent by Firebase Cloud Messaging. I successfully received the notifications, but when I tap them they are not giving the alert I want.

Here is the code used in index.js:

    onDeviceReady: function() {
        app.receivedEvent('deviceready');
        FCMPlugin.onNotification(
            function(data){
                if(data.wasTapped){
                    //Notification was received on device tray and tapped by the user.
                    alert( JSON.stringify(data) );
                }else{
                    //Notification was received in foreground. Maybe the user needs to be notified.
                    alert( JSON.stringify(data) );
                }
            },
            function(msg){
                alert('onNotification callback successfully registered: ' + msg);
            },
            function(err){
                alert('Error registering onNotification callback: ' + err);
            }
        );
    },

And here is the php code I used to send the notification:

    function pushAndroidNotification ($productUrl, $message, $deviceToken) {
        $url = 'https://fcm.googleapis.com/fcm/send';

        $fields = array(
            'registration_ids' => array($deviceToken),
            'notification' => array(
                "title" => "rBUX", 
                "body" => $message,
                "icon" => "name_of_icon" ),
            'data' => array("url" => $productUrl)
        );
        $jfields = json_encode($fields);
        echo "\r\n<br>Post json:".$jfields;

        $headers = array(
            'Authorization: key = AIzaSyBPRoJ7zgmevPYIzoDweVgNTbmsPBW5ofo',
            '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, $jfields);
        $result = curl_exec($ch);
        if ($result === FALSE) {
            echo "\r\n<br>Notify Failed:".curl_error($ch);
            die('Curl failed: '.curl_error($ch));
        }else{
           echo "\r\n<br>Notify passed:".$result;
        }
        $jresponse = json_decode($result, true);

        curl_close($ch);

        return $jresponse;
    }

But every time I launch the app, I can see the alert "onNotification callback successfully registered: OK", so the FCM plugin is not completely disabled. I would like to launch the url when I tap on the notification, but for now it appears that I can't even use the data. If anyone knows how to solve this please tell me, and please let me know how to use stringified data to launch the url in cordova inAppBrowser, thank you.

like image 390
Nathan Mizuya Avatar asked Aug 31 '16 14:08

Nathan Mizuya


1 Answers

For "cordova-plugin-fcm" plugin, You need to set click_action to FCM_PLUGIN_ACTIVITY in the notification payload part.

I got the following from their website:

{
  "notification":{
    "title":"Notification title",  //Any value
    "body":"Notification body",  //Any value
    "sound":"default", //If you want notification sound
    "click_action":"FCM_PLUGIN_ACTIVITY",  //Must be present for Android
    "icon":"fcm_push_icon"  //White icon Android resource
  },
  "data":{
    "param1":"value1",  //Any data to be retrieved in the notification callback
    "param2":"value2"
  },
    "to":"/topics/topicExample", //Topic or single device
    "priority":"high", //If not set, notification won't be delivered on completely closed iOS app
    "restricted_package_name":"" //Optional. Set for application filtering
}
like image 161
Jay Avatar answered Nov 14 '22 23:11

Jay