AWS Cloudwatch Events 发布主题无效:IOS 静默推送

AWS Cloudwatch Events publish topic not working :IOS silent push

我想通过 SNS 定期发送静默推送。这是由 Cloudwatch 事件触发的。 推送消息发出,但以原始文本形式发送,未通过 SNS 转换为静默推送格式。如您所见,SNS 主题发布工作正常,静默推送结束。 我究竟做错了什么?

不要为此纠结,将它发送到 lambda 函数,您可以在其中创建 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;
    }
}