public void sendMessage(GcmMessage message) { Message.Builder builder = Message.newBuilder() .withDestination(message.getGcmId()) .withPriority("high"); String key = message.isReceipt() ? "receipt" : "notification"; Message request = builder.withDataPart(key, "").build(); ListenableFuture<Result> future = signalSender.send(request, message); markOutboundMeter(key); Futures.addCallback(future, new FutureCallback<Result>() { @Override public void onSuccess(Result result) { if (result.isUnregistered() || result.isInvalidRegistrationId()) { handleBadRegistration(result); } else if (result.hasCanonicalRegistrationId()) { handleCanonicalRegistrationId(result); } else if (!result.isSuccess()) { handleGenericError(result); } else { success.mark(); } } @Override public void onFailure(Throwable throwable) { logger.warn("GCM Failed: " + throwable); } }, executor); }
/** * Construct a message object. * * @return An immutable message object, as configured by this builder. */ public Message build() { if (registrationIds.isEmpty()) { throw new IllegalArgumentException("You must specify a destination!"); } return new Message(collapseKey, ttl, delayWhileIdle, data, registrationIds, priority); } }
@Override public ListenableFuture<Result> call(RetryContext context) throws Exception { SettableFuture<Result> future = SettableFuture.create(); HttpPost request = new HttpPost(url); request.setHeader("Authorization", authorizationHeader); request.setEntity(new StringEntity(message.serialize(), ContentType.parse("application/json"))); client.execute(request, new ResponseHandler(future, requestContext)); return future; } });
@Override public void sendMessage(GcmMessage message) { Message.Builder builder = Message.newBuilder() .withDestination(message.getGcmId()) .withPriority("high");