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()); }
/** * 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; }
@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); } } } }
/** * 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; }
/** @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()); } }