0

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? SNS publish AWS Cloudwatch Events publie un sujet qui ne fonctionne pas: IOS silent push

Cloudwatch events

push

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; 
    } 
}