Android: error "mismatch sender id" while pushing notification to android device though PHP and GCM

22.7k views Asked by At

i'm trying to send a notification to my phone via my .php page... everything is set up correctly, but i get the error:

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

i don't know why because the sender id is right, the api also (i've tried the server key and the browser key, just to be sure).

i really don't know where i get wrong!

in my app i have only the sender id and all have gone right, in my server i've got the key for browser (now):

<?php require_once("../pi_classes/commonSetting.php");
include('../pi_classes/User.php');
ini_set("display_errors",1);
class GCM{
    function __construct(){}
    public function send_notification($registatoin_ids,$message){
        // GOOGLE API KEY
        define("GOOGLE_API_KEY","xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
        $url="https://android.googleapis.com/gcm/send";
        $fields=array(
            "registration_ids"=>$registatoin_ids,
            "data"=>$message,
        );
        var_dump($fields);
        $headers=array(
            "Authorization: key=".GOOGLE_API_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_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;
    }
}
// ======================
//=INVIA LE NOTIFICHE AGLI UTENTI =
// ======================
$messaggio="Ciao, sono una notifica!";
$pushCounter=0;
$registatoin_ids=array();
$result=mysql_query("SELECT android_regi_id FROM user_details");
while($row=mysql_fetch_array($result)){
    $token=$row["android_regi_id"];
    if($token!=""){
        $registatoin_ids[]=$token;
        $pushCounter++;
    }
}
if($pushCounter>0){
    $gcm=new GCM();
    $message=array("price"=>$messaggio);
    $result_android=$gcm->send_notification($registatoin_ids,$message);
    echo $result_android;
}
4

There are 4 answers

0
Raj Kumar On

Please run below script in your terminal

curl -X POST \  
-H "Authorization: key=  write here api_key" \  
-H "Content-Type: application/json" \  
-d '{      
"registration_ids": [  
"write here reg_id generated by gcm"  
],  
"data": { 
"message": "Manual push notification from Rajkumar"
},
"priority": "high"
}' \
https://android.googleapis.com/gcm/send

MismatchSenderId because within same device you have logged with different keys. to solve this problem uninstall an app and run it again and update the registration key. and then run the CURL script in your terminal which I post above it will give success message and you will get a notification to your device

0
M_iserte On

I had the same problem.

The solution is use my Project Number instead of API_KEY for the sender_id in the android app. On the server script you have to keep the API_KEY.

You can see your Project Number in the tab "Overview" inside your project on Google Developers Console.

0
Jatin Bansal On

this error just come because of your firebase server key and google-service.json file not same

  • First check your project on firebase and get download google-service.json file.
  • then put into your android project
  • then retrieve server key from cloud messaging tab from firebase and set in your php file
0
Akhil Dad On

I had the same issue. the exact issue was I forgot to change the new google-services.json which I have downloaded after importing my project to Firebase from GCM.

Make sure you update the google-services.json after importing