public static void main(String args[]) { Sender sender = new Sender("AIzaSyAvibNcQ9OwiB_h-glX4SD4ZQjJGgWiJ9k"); Message message = new Message.Builder().build(); Result result = null; try { result = sender.send( message, "APA91bHttEIg49kyyJtbA0tQT-6Na6V5moCqqN6QJrT_hjMHZkSB85KOR6N5_rINEXpqsTJzoQtNQ-fKY52kwidhGDayyO8iqJuz9exMan2aUUklRqJ0K0Ar4f0_lvqOzYoZ4qH8SoX5FUfs-cUbqhWoz_cgt8GKMg", 1); } catch (IOException e) { System.out.println("Error occured."); e.printStackTrace(); } if (result.getMessageId() != null) { String canonicalRegId = result.getCanonicalRegistrationId(); if (canonicalRegId != null) { // same device has more than on registration ID: update database System.out.println("same device has more than on registration ID: update database"); } } else { String error = result.getErrorCodeName(); if (error.equals(Constants.ERROR_NOT_REGISTERED)) { // application has been removed from device - unregister // database System.out.println("application has been removed from device - unregister database"); } } System.out.println("Inforr:" + result.toString()); }
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"); System.out.println("regId111: " + regId); PrintWriter writer = new PrintWriter("GCMRegId.txt"); writer.println(regId); writer.close(); request.setAttribute("pushStatus", "GCM RegId Received."); Sender sender = new Sender(GOOGLE_SERVER_KEY); Message message = new Message.Builder() .timeToLive(30) .delayWhileIdle(true) .addData(MESSAGE_KEY, "loopback connector") .build(); result = sender.send(message, regId, 1); 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); } }
/** * Sends the message using the Sender object to the registered device. * * @param message the message to be sent in the GCM ping to the device. * @param sender the Sender object to be used for ping, * @param deviceInfo the registration id of the device. * @return Result the result of the ping. */ private static Result doSendViaGcm(String message, Sender sender, DeviceInfo deviceInfo) throws IOException { // Trim message if needed. if (message.length() > 1000) { message = message.substring(0, 1000) + "[...]"; } // This message object is a Google Cloud Messaging object, it is NOT // related to the MessageData class Message msg = new Message.Builder().addData("message", message).build(); Result result = sender.send(msg, deviceInfo.getDeviceRegistrationID(), 5); if (result.getMessageId() != null) { String canonicalRegId = result.getCanonicalRegistrationId(); if (canonicalRegId != null) { endpoint.removeDeviceInfo(deviceInfo.getDeviceRegistrationID()); deviceInfo.setDeviceRegistrationID(canonicalRegId); endpoint.insertDeviceInfo(deviceInfo); } } else { String error = result.getErrorCodeName(); if (error.equals(Constants.ERROR_NOT_REGISTERED)) { endpoint.removeDeviceInfo(deviceInfo.getDeviceRegistrationID()); } } return result; }
<T> T send(GoogleMessage gmsg, PushResponseHandler<T> handler) { try { Result result = sender.sendNoRetry(gmsg.toPayload(), gmsg.token()); return result.getMessageId() != null ? handler.onGoogleSuccess(gmsg, result) : handler.onGoogleFail(gmsg, result); } catch (IOException ex) { return handler.onGoogleThrow(gmsg, ex); } }
@Override public void onNewDataComplete() { // gather data Map<String, String> payload = new HashMap<>(); payload.put(DATA_KEY_SOURCE, source.getId()); payload.put(DATA_KEY_DEBUG, Boolean.TRUE.toString()); String collapseKey = source.getId(); final List<String> devices = new ArrayList<>(); devices.add(client.getGcmClientId()); // send Message.Builder builder = new Message.Builder().collapseKey(collapseKey); for (Map.Entry<String, String> e : payload.entrySet()) { builder.addData(e.getKey(), e.getValue()); } MulticastResult multicastResult; try { multicastResult = gcmSender.send(builder.build(), devices, 5); } catch (IOException io) { setErrorResult(io); return; } // analyze the results List<Result> results = multicastResult.getResults(); for (int i = 0; i < devices.size(); i++) { String regId = devices.get(i); Result result = results.get(i); String messageId = result.getMessageId(); if (messageId != null) { Log.info("Succesfully sent message to device: " + regId + "; messageId = " + messageId); String canonicalRegId = result.getCanonicalRegistrationId(); if (canonicalRegId != null) { // same device has more than on registration id: update it setUpdateClientResult(client, new GcmClient(client.getId(), canonicalRegId)); return; } } else { String error = result.getErrorCodeName(); if (error.equals(Constants.ERROR_NOT_REGISTERED)) { // application has been removed from device - unregister it setRemoveClientResult(client); return; } else { setErrorResult(error); return; } } } setSuccessResult(); }
/** * Send to the first 10 devices (You can modify this to send to any number of devices or a * specific device) * * @param message The message to send */ public void sendMessage(@Named("message") String message) throws IOException { if (message == null || message.trim().length() == 0) { log.warning("Not sending message because it is empty"); return; } // crop longer messages if (message.length() > 1000) { message = message.substring(0, 1000) + "[...]"; } Sender sender = new Sender(API_KEY); Message msg = new Message.Builder().addData("message", message).build(); List<RegistrationRecord> records = ofy().load().type(RegistrationRecord.class).limit(10).list(); for (RegistrationRecord record : records) { Result result = sender.send(msg, record.getRegId(), 5); if (result.getMessageId() != null) { log.info("Message sent to " + record.getRegId()); String canonicalRegId = result.getCanonicalRegistrationId(); if (canonicalRegId != null) { // if the regId changed, we have to update the datastore log.info( "Registration Id changed for " + record.getRegId() + " updating to " + canonicalRegId); record.setRegId(canonicalRegId); ofy().save().entity(record).now(); } } else { String error = result.getErrorCodeName(); if (error.equals(Constants.ERROR_NOT_REGISTERED)) { log.warning( "Registration Id " + record.getRegId() + " no longer registered with GCM, removing from datastore"); // if the device is no longer registered with Gcm, remove it from the datastore ofy().delete().entity(record).now(); } else { log.warning("Error when sending message : " + error); } } } }
/** Processes the request to add a new message. */ @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException, ServletException { List<String> devices = Datastore.getDevices(); String status; if (devices.isEmpty()) { status = "Message ignored as there is no device registered!"; } else { // NOTE: check below is for demonstration purposes; a real application // could always send a multicast, even for just one recipient if (devices.size() == 1) { // send a single message using plain post String registrationId = devices.get(0); Message message = new Message.Builder().build(); Result result = sender.send(message, registrationId, 5); status = "Sent message to one device: " + result; } else { // send a multicast message using JSON // must split in chunks of 1000 devices (GCM limit) int total = devices.size(); List<String> partialDevices = new ArrayList<String>(total); int counter = 0; int tasks = 0; for (String device : devices) { counter++; partialDevices.add(device); int partialSize = partialDevices.size(); if (partialSize == MULTICAST_SIZE || counter == total) { asyncSend(partialDevices); partialDevices.clear(); tasks++; } } status = "Asynchronously sending " + tasks + " multicast messages to " + total + " devices"; } } req.setAttribute(HomeServlet.ATTRIBUTE_STATUS, status.toString()); getServletContext().getRequestDispatcher("/home").forward(req, resp); }
/** * Sends the message using the Sender object to the registered device. * * @param message the message to be sent in the GCM ping to the device. * @param sender the Sender object to be used for ping, * @param deviceInfo the registration id of the device. * @return Result the result of the ping. * @throws IOException */ private static Result sendViaGcm(Message msg, Sender sender, DeviceInfo deviceInfo) throws IOException { Result result = sender.send(msg, deviceInfo.getDeviceRegistrationId(), 5); LOG.info("Sent ping to device of user: " + deviceInfo.getUserHandle()); if (result.getMessageId() != null) { String canonicalRegId = result.getCanonicalRegistrationId(); if (canonicalRegId != null) { endpoint.removeDeviceInfo(deviceInfo.getDeviceRegistrationId()); deviceInfo.setDeviceRegistrationId(canonicalRegId); endpoint.insertDeviceInfo(deviceInfo); } } else { String error = result.getErrorCodeName(); if (error.equals(Constants.ERROR_NOT_REGISTERED)) { endpoint.removeDeviceInfo(deviceInfo.getDeviceRegistrationId()); } } return result; }
@Override public <T> void send(T message) { // meh: sender = new Sender(googleAPIKey); List<MobileApplicationInstance> instances = this.getInstances(); // String token = instances.get(0).getDeviceToken(); String token = "123"; Message msg = new Message.Builder() .addData("text", message.toString()) .addData("title", "FOOOOO") .build(); // send it out..... try { sender.send(msg, token, 0); } catch (IOException e) { e.printStackTrace(); } }
/** @param params */ @ApiMethod(name = "sendone", path = "sendone", httpMethod = ApiMethod.HttpMethod.POST) // public void sendOneMessage(@Named("message") String message,@Named("regid")String regid, // @Named("from") String from, @Named("to") String to) throws IOException { public void sendOneMessage(@Named("params") ArrayList<String> params) throws IOException { logger.warning(" params size " + params.size()); logger.warning(" zero is msg " + params.get(0)); logger.warning(" one is regid " + params.get(1)); logger.warning(" two is from " + params.get(2)); logger.warning(" three is to " + params.get(3)); // logger.warning("sendOneMessage called"); // logger.warning(" send() from " + from + " to " + to + " message " + message + " reg id " // +regid); /// logger.warning(message+" / "+regid+" / "+from+" / "+to); String message = params.get(0); String regid = params.get(1); String from = params.get(2); String to = params.get(3); logger.warning( " send() from " + from + " to " + to + " message " + message + " reg id " + regid); if (message == null || message.trim().length() == 0) { logger.warning("Not sending message because it is empty"); return; } // crop longer messages if (message.length() > 1000) { message = message.substring(0, 1000) + "[...]"; } Sender sender = new Sender(API_KEY); Message msg = new Message.Builder() // .delayWhileIdle(true) .addData(com.ramogi.xbox.backend.Constants.TO, to) .addData(com.ramogi.xbox.backend.Constants.FROM, from) .addData(com.ramogi.xbox.backend.Constants.MSG, message) .build(); try { Result result = sender.send(msg, regid, 5); Contactplus contactplus = new Contactplus(); contactplus.setRegId(regid); contactplus.setEmail(from); if (result.getMessageId() != null) { logger.info("Message sent to " + regid); String canonicalRegId = result.getCanonicalRegistrationId(); if (canonicalRegId != null) { // if the regId changed, we have to update the datastore // logger.info("Registration Id changed for " + regid + " updating to " + canonicalRegId); // record.setRegId(canonicalRegId); // ofy().save().entity(record).now(); contactplus.setRegId(canonicalRegId); ofy().save().entity(contactplus).now(); } } else { String error = result.getErrorCodeName(); if (error.equals(Constants.ERROR_NOT_REGISTERED)) { logger.warning( "Registration Id " + regid + " no longer registered with GCM, removing from datastore"); // if the device is no longer registered with Gcm, remove it from the datastore // ofy().delete().entity(record).now(); ofy().delete().entity(contactplus).now(); } else { logger.warning("Error when sending message : " + error); } } logger.info("Result: " + result.toString()); } catch (IOException e) { logger.warning(e.getMessage()); } }