Below is the code for PHP .
There is no code that is easily accessible. You can do this by maintaining 1 tag field in the database table, for example 1 for an iOS device, and 2 for an Android device. I implemented the same functionality, and below is the code for sending push notifications, respectively.
//This function determines which is the device and send notification accordingly. function sendPushNotificaitonToAllUser($NotificationMsg) { $sql = "select ID,DeviceToken,DeviceType from TblDeviceToken"; $rs = mysql_query($sql); $num = mysql_num_rows($rs); if($num >= 1) { while($row = mysql_fetch_array($rs)) { $deviceToken = $row['DeviceToken']; if($deviceToken!='' || $deviceToken!='NULL') { if($row['DeviceType']==1) deliverApplePushNotification($deviceToken,$NotificationMsg); else if($row['DeviceType']==2) sendAndroidPushNotification($deviceToken,$NotificationMsg); } } } } //APPLE PUSH NOTIFICATION DELIVERY function deliverApplePushNotification($deviceToken,$message) { //Create context $ctx = stream_context_create(); stream_context_set_option($ctx, 'ssl', 'local_cert', PEM_FILE_NAME); stream_context_set_option($ctx, 'ssl', 'passphrase', APPLE_PEM_PASSPHRASE); //Establish connection $fp = stream_socket_client(APPLE_URL, $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); /* if (!$fp) exit("Failed to connect: $err $errstr" . PHP_EOL); */ $body['aps'] = array('alert' => $message, 'sound' => 'default'); // Create the payload body $payload = json_encode($body); // Encode the payload as JSON $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;// Build the binary notification $result = fwrite($fp, $msg, strlen($msg));// Send it to the server //If want to keep track of delivery can be done from here. /*if (!$result) echo '<br/>Message not delivered-->$deviceToken' . PHP_EOL; else echo '<br/>Message successfully delivered-->$deviceToken' . PHP_EOL; */ fclose($fp); // Close the connection to the server } function sendAndroidPushNotification($deviceRegistrationId,$messageText) { $authenticationID=googleAuthenticate(ANDROID_USERNAME,ANDROID_PASSWORD,ANDROID_SOURCE,ANDROID_SERVICE); $result= sendMessageToPhone($authenticationID,$deviceRegistrationId,ANDROID_MSGTYPE,$messageText); } 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]; } 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; }
NOTE Feel free to contact in case of any doubt / request. leave a comment