2
votes

I have setup the third party GCM server with the API key, setup the Android app with the APP_SERVER_URL= "http://(localIPAddress):4430/gcm.php?shareRegId=1" and placed my computers public IP address, not the localIPAdderss in the "Allowed IPs" in the Google App Console.

The Android app notes its' Registration_id is shared with the 3rd party server, yet when testing to send a message from my server to the app it notes:

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

How can I get this to work?

gcm.php in Apache htdocs on port 4430:

<?php
    //generic php function to send GCM push notification
   function sendPushNotificationToGCM($registatoin_ids, $message) {
        //Google cloud messaging GCM-API url
        $url = 'https://android.googleapis.com/gcm/send';
        $fields = array(
            'registration_ids' => $registatoin_ids,
            'data' => $message,
        );
        // Google Cloud Messaging GCM API Key
        define("GOOGLE_API_KEY", "(my console API key)"); // My API Key form Google console
        $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_VERIFYHOST, 0);   
        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);
        return $result;
    }
?>
<?php

    //this block is to post message to GCM on-click
    $pushStatus = "";   
    if(!empty($_GET["push"])) { 
        $gcmRegID  = file_get_contents("GCMRegId.txt");
        $pushMessage = $_POST["message"];   
        if (isset($gcmRegID) && isset($pushMessage)) {      
            $gcmRegIds = array($gcmRegID);
            $message = array("m" => $pushMessage);  
            $pushStatus = sendPushNotificationToGCM($gcmRegIds, $message);
        }       
    }

    //this block is to receive the GCM regId from external (mobile apps)
    if(!empty($_GET["shareRegId"])) {
        $gcmRegID  = $_POST["regId"]; 
        file_put_contents("GCMRegId.txt",$gcmRegID);
        echo "Ok!";
        exit;
    }   
?>
<html>
    <head>
        <title>Google Cloud Messaging (GCM) Server in PHP</title>
    </head>
    <body>
        <h1>Google Cloud Messaging (GCM) Server in PHP</h1> 
        <form method="post" action="gcm.php/?push=1">                                                
            <div>                                
                <textarea rows="2" name="message" cols="23" placeholder="Message to transmit via GCM"></textarea>
            </div>
            <div><input type="submit"  value="Send Push Notification via GCM" /></div>
        </form>
        <p><h3><?php echo $pushStatus; ?></h3></p>        
    </body>
</html>

Tutorial Source: http://javapapers.com/android/google-cloud-messaging-gcm-for-android-and-push-notifications/

1

1 Answers

1
votes

Looks like the sender ID you called gcm.register(senderID) with is not the sender ID of your server. You'll have to double check this in your Android code. It is the project number of your project from the Google Developers Console.

Full description of the error is here.