AWS SNS - 推送到GCM

时间:2017-01-01 20:21:12

标签: java amazon-web-services push-notification amazon-sns

我正在尝试将AWS SNS用于我的应用的推送通知。我已成功使用用户信息和注册ID设置了各个终端ARN的注册。

我可以通过控制台发送个人消息,但我似乎无法弄清楚如何以编程方式发送它(JAVA)

控制台方式:(工作)

http://docs.aws.amazon.com/sns/latest/dg/mobile-push-send-directmobile.html

通过JAVA尝试的方式:

private void publishToSNSEndpoint(String username) {

        // Find an entry of a users SNS registration and Endpoint ARN
        SNSPush pushConfig = snsPushService.findByUsername(username);

        //Get ARN to String
        String endpointARN = pushConfig.getSNSEnpointARN();

        //Generate SNS Push to user
        String message = "{\"title\":\"Test_Title\",\"description\":\"Test_Description\"}";
        PublishRequest publishRequest = new PublishRequest();
        publishRequest.setMessage(message);
        publishRequest.setTargetArn(endpointARN);
        PublishResult publish = client.publish(publishRequest);

        //print MessageId of message published to SNS topic
        System.out.println("MessageId - " + publish.getMessageId());
    }

目前产生以下错误:

  

使用EndpointARN(确认有效)参数无效:   TargetArn原因:找不到指定目标arn的端点   (服务:AmazonSNS;状态代码:400;错误代码:InvalidParameter;

使用SNS应用程序ARN(三重检查这是有效的)

  

参数无效:TargetArn原因:   arn:aws:sns:ap-southeast-xxxxxxxxx-xxxx无效发布到   (服务:AmazonSNS;状态代码:400;错误代码:InvalidParameter;

有一些文档here。但它似乎很旧了,不再适用了。

我的问题是:如何使用Java和AWS SDK以编程方式将推送通知发送到AWS SNS中的单个EndpointARN。

3 个答案:

答案 0 :(得分:0)

我刚刚为遇到同样问题的人解决过这个问题。

消息格式化是一场噩梦,每个平台都有所不同。

我不得不加上这个。

publishRequest.setMessageStructure("json");

这适用于GCM - Android

String gcmMessage = "{ \"GCM\": \"{ \\\"data\\\": { \\\"message\\\": \\\"Hi, AWS. Sort out your JSON parsing.\\\" } }\" }";

答案 1 :(得分:0)

您还需要设置您的区域。 请注意,好像您正在使用其他一些AWS服务一样,它们可能具有不同的区域。因此,即使您全局拥有SNS,我也建议为其指定区域。

例如我的EC2实例区域与我的SNS区域不同,并且我根据针对EC2的配置推送通知。

答案 2 :(得分:0)

如果您正在使用CLI并遇到此错误,请确保您的区域和消息正确。

aws sns publish \
    --target-arn "arn:aws:sns:us-east-1:xxxxxxxxx:endpoint/GCM/my_sns_application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" \
    --message-structure "json" \
    --message '{"GCM":"{\"notification\":{\"title\":\"test push\",\"body\":\"test body\"}}"}' \
    --region us-east-1