Нотификация GCM & APNS (Google Cloud Messaging GCM)

Java

package com.javapapers.java.gcm; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.google.android.gcm.server.Message; import com.google.android.gcm.server.Result; import com.google.android.gcm.server.Sender; @WebServlet("/GCMNotification") public class GCMNotification extends HttpServlet { private static final long serialVersionUID = 1L; // Put your Google API Server Key here private static final String GOOGLE_SERVER_KEY = "AIzaSyDA5dlLInMWVsJEUTIHV0u7maB82MCsZbU"; static final String MESSAGE_KEY = "message"; public GCMNotification() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Result result = null; String share = request.getParameter("shareRegId"); // GCM RedgId of Android device to send push notification String regId = ""; if (share != null && !share.isEmpty()) { regId = request.getParameter("regId"); PrintWriter writer = new PrintWriter("GCMRegId.txt"); writer.println(regId); writer.close(); request.setAttribute("pushStatus", "GCM RegId Received."); request.getRequestDispatcher("index.jsp") .forward(request, response); } else { try { BufferedReader br = new BufferedReader(new FileReader( "GCMRegId.txt")); regId = br.readLine(); br.close(); String userMessage = request.getParameter("message"); Sender sender = new Sender(GOOGLE_SERVER_KEY); Message message = new Message.Builder().timeToLive(30) .delayWhileIdle(true).addData(MESSAGE_KEY, userMessage).build(); System.out.println("regId: " + regId); result = sender.send(message, regId, 1); request.setAttribute("pushStatus", result.toString()); } catch (IOException ioe) { ioe.printStackTrace(); request.setAttribute("pushStatus", "RegId required: " + ioe.toString()); } catch (Exception e) { e.printStackTrace(); request.setAttribute("pushStatus", e.toString()); } request.getRequestDispatcher("index.jsp") .forward(request, response); } } }

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

PHP

GCM

function push_gcm($registrationIds) { $apiAccessKey = 'AI.............b0'; $action = "send_coordinate"; $msg = array ( 'message' => '', 'action' => $action ); $fields = array ( 'registration_ids' => $registrationIds, 'data' => $msg ); $headers = array ( 'Authorization: key=' . $apiAccessKey, 'Content-Type: application/json' ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://android.googleapis.com/gcm/send'); 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, JSON_UNESCAPED_UNICODE)); curl_exec($ch); curl_close($ch); }

APNS

function push_apns($device_tokens) { $is_dev = false; $action = "send_coordinate"; $aps = array( 'content-available' => 1, 'sound' => '' ); $body = array( 'aps' => $aps, 'action' => $action ); $payload = json_encode($body); $apns_port = 2195; $pathdir = "/home/push-private/"; if ($is_dev) { $apns_url = 'gateway.sandbox.push.apple.com'; $apns_cert = $pathdir . 'evak_driver_dev.pem'; $passphrase = "geel_evak_driver"; } else { $apns_url = 'gateway.push.apple.com'; $apns_cert = $pathdir . 'evak_driver_prod.pem'; $passphrase = "geel_evak_driver"; } $stream_context = stream_context_create(); stream_context_set_option($stream_context, 'ssl', 'local_cert', $apns_cert); stream_context_set_option($stream_context, 'ssl', 'passphrase', $passphrase); $apns = stream_socket_client('ssl://' . $apns_url . ':' . $apns_port, $error, $error_string, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $stream_context); if ($apns) { foreach($device_tokens as $token) { $apns_message = chr(0) . pack('n',32) . pack('H*', $token) . pack('n',strlen($payload)) . $payload; fwrite($apns, $apns_message, strlen($apns_message)); } @socket_close($apns); @fclose($apns); } }

Статьи

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