Je souhaite envoyer une impulsion silencieuse périodiquement par SNS. Ceci est déclenché par les événements Cloudwatch. Le message push est supprimé, mais il est envoyé en tant que texte brut et n'est pas converti en format push silencieux par SNS. Comme vous pouvez le voir, la publication de sujets SNS fonctionne très bien, et la poussée silencieuse s'éteint. Qu'est-ce que je fais de mal? AWS Cloudwatch Events publie un sujet qui ne fonctionne pas: IOS silent push
0
A
Répondre
0
Ne luttez pas avec cela, l'envoyer à une fonction lambda, où vous pouvez créer la demande JSON.
public String handle(JsonObject request, Context lambdaContext) throws
BadRequestException, InternalErrorException {
logger = lambdaContext.getLogger();
Map<String, MessageAttributeValue> messageAttributes = new HashMap<>();
AmazonSNSClient client = new AmazonSNSClient().withRegion(Regions.EU_WEST_1);
PublishRequest rq = new PublishRequest();
rq.setTopicArn(ENDPOINT_TOPIC);
rq.setMessageStructure("json");
rq.setMessage(getSilentAppleMessage());
messageAttributes.put("AWS.SNS.MOBILE.APNS.TTL", new MessageAttributeValue().withDataType("String").withStringValue("120"));
rq.setMessageAttributes(messageAttributes);
client.publish(rq);
GeneralResponse output = new GeneralResponse();
output.setSuccess(true);
return getGson().toJson(output, GeneralResponse.class);
}
public static String getSilentAppleMessage() {
Map<String, Object> mainMessageMap = new HashMap<String, Object>();
Map<String, Object> appleMessageMap = new HashMap<String, Object>();
Map<String, Object> appMessageMap = new HashMap<String, Object>();
appMessageMap.put("content-available", 1);
appleMessageMap.put("aps", appMessageMap);
mainMessageMap.put("default", "");
mainMessageMap.put("APNS_SANDBOX", jsonify(appleMessageMap));
logger.log(jsonify(mainMessageMap));
return jsonify(mainMessageMap);
}
private static String jsonify(Object message) {
try {
return objectMapper.writeValueAsString(message);
} catch (Exception e) {
e.printStackTrace();
throw (RuntimeException) e;
}
}