C2DM implementation PHP code

23,385

Solution 1

To register your own server system and obtain the Authorise Tokens (this is what Cpt. Ohlund proposed):

function googleAuthenticate($username, $password, $source="Company-AppName-Version", $service="ac2dm") {    


        session_start();
        if( isset($_SESSION['google_auth_id']) && $_SESSION['google_auth_id'] != null)
            return $_SESSION['google_auth_id'];

        // get an authorization token
        $ch = curl_init();
        if(!ch){
            return false;
        }

        curl_setopt($ch, CURLOPT_URL, "https://www.google.com/accounts/ClientLogin");
        $post_fields = "accountType=" . urlencode('HOSTED_OR_GOOGLE')
            . "&Email=" . urlencode($username)
            . "&Passwd=" . urlencode($password)
            . "&source=" . urlencode($source)
            . "&service=" . urlencode($service);
        curl_setopt($ch, CURLOPT_HEADER, true);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_fields);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_FRESH_CONNECT, true);    
        curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

        // for debugging the request
        //curl_setopt($ch, CURLINFO_HEADER_OUT, true); // for debugging the request

        $response = curl_exec($ch);

        //var_dump(curl_getinfo($ch)); //for debugging the request
        //var_dump($response);

        curl_close($ch);

        if (strpos($response, '200 OK') === false) {
            return false;
        }

        // find the auth code
        preg_match("/(Auth=)([\w|-]+)/", $response, $matches);

        if (!$matches[2]) {
            return false;
        }

        $_SESSION['google_auth_id'] = $matches[2];
        return $matches[2];
    }

To send a message to a phone:

// $msgType: all messages with same type may be "collapsed": if multiple are sent,
// only the last will be received by phone. 
function sendMessageToPhone($authCode, $deviceRegistrationId, $msgType, $messageText) {

            $headers = array('Authorization: GoogleLogin auth=' . $authCode);
            $data = array(
                'registration_id' => $deviceRegistrationId,
                'collapse_key' => $msgType,
                'data.message' => $messageText //TODO Add more params with just simple data instead           
            );

            $ch = curl_init();

            curl_setopt($ch, CURLOPT_URL, "https://android.apis.google.com/c2dm/send");
            if ($headers)
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);


            $response = curl_exec($ch);

            curl_close($ch);

            return $response;
        }

Solution 2

I've created an example in my blog in working with Android C2DM. I use Zend Framework and a custom component that I wrote out. It should give you the basic information that you will need in order to handle your Android C2DM implementation in PHP.

Android C2DM PHP w/ Zend Framework: http://blog.digitalstruct.com/2010/11/21/android-c2dm-with-php-and-zend-framework/

Regards,

Mike

Solution 3

Check this out: http://www.toppa.com/2010/google-clientlogin-php-example/ Otherwise I will get back to you, as I will try C2DM later this week.

Solution 4

As C2DM has been officially deprecated (google c2dm)

I recommend using the new GCM API as described in the following link: GCM Php implementation

Share:
23,385

Related videos on Youtube

Amit Thaper
Author by

Amit Thaper

My domains /Development (Android);(Web Services SOAP,REST) /Push notification /SQLite database /EMV /SocketMobile /Cricket /songs

Updated on July 09, 2022

Comments

  • Amit Thaper
    Amit Thaper almost 2 years

    I am creating the Android application where C2DM push notification is used. But i have a problem in creating the php code to use c2dm for sending messages. please guide me how to use the php code to send the messages. Actually there is a problem regarding this that how to get client auth token. I have seen the http://code.google.com/android/c2dm/index.html#server url but according to this i have created the android application and i got the registration id also and i also send to the user but how server uses this to send the application.

    is there anything needed for the server from the android device to send the messages?.

  • Amit Thaper
    Amit Thaper over 13 years
    i want to ask 1 new thing that from where token is to be generated from android device or from application server. here android device is used to receive only messages sent by the application server. i don't want to sent messages from the android device
  • Amit Thaper
    Amit Thaper over 13 years
    Hi Please tell me who will send the request for authtoken its from android application or endserver.
  • Thomas Ahle
    Thomas Ahle about 13 years
    Session uses cookies, doesn't it? How does that work for a server script?
  • Yar
    Yar about 13 years
    Yes, session uses cookies in general. Here session is used ONLY to omit unnecessary authentication request, if auth token is known. That is all. If you call this script from another script this mechanism is not needed as your script knows if it already possesses an auth token, doesn't it?
  • Thomas Ahle
    Thomas Ahle about 13 years
    If I run the script from cron, I need a way to store the auth token. I guess that won't be session.
  • Mr Zorn
    Mr Zorn over 12 years
    Do/should you get a new auth token everytime or is this something that can be stored? (DB/filesystem/etc)
  • Houcine
    Houcine over 12 years
    @MrZorn : you should get the auth token from time to time , because i think that it expires , so every time you got the new auth token you can update the value on your database
  • Kannika
    Kannika over 12 years
    Hey, you said the sendMessageToPhone() function is used for sending a message to a phone. So, how to send a message to many phones?
  • Bao Le
    Bao Le about 12 years
    It works. However, how can we handle CAPTCHA request as Google may request a CAPTCHA: developers.google.com/accounts/docs/AuthForInstalledApps?