当前位置: 首页 > 知识库问答 >
问题:

AWS SNS -推送至GCM

谭凯
2023-03-14

我正在尝试使用AWS SNS来推送我的应用程序的通知。我已经使用用户信息和注册ID成功设置了各个endpointARN的注册。

我可以通过控制台发送单独的消息很好,但是我似乎不知道如何以编程方式发送它(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());
    }

这当前会产生以下错误:

使用终端节点ARN(确认有效) 参数无效:目标Arn 原因:未找到指定目标arn的终端节点(服务:亚马逊网络;状态代码:400;错误代码: 无效参数;

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

参数无效: 目标Arn 原因: arn:aws:sns:ap-东南-XXXXXX-xxxx 无效发布到 (服务: 亚马逊网络;状态代码:400;错误代码: 无效参数;

这里有一些文档。但它看起来很旧,不再起作用了。

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

共有3个答案

朱典
2023-03-14

如果您正在使用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
姬泰
2023-03-14

您还需要设置您的地区。请注意,如果您使用其他AWS服务,它们可能会有不同的地区。因此,我建议您为您的SNS指定地区,即使您拥有全球范围的SNS。

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

申宜
2023-03-14

我只是为任何遇到同样问题的人制定的。

消息格式是一场噩梦,每个平台都不一样。

我不得不加上这个。

publishRequest.setMessageStructure("json");

这是针对GCM-Android的

String gcmMessage = "{ \"GCM\": \"{ \\\"data\\\": { \\\"message\\\": \\\"Hi, AWS. Sort out your JSON parsing.\\\" } }\" }";
 类似资料:
  • 我正在尝试为我的核心项目设置CI,并将其包装到我们的feed。我在这里学习了软件包管理的禅宗教程 有点过时,但我相信我已经成功地翻译了这些变化。 My Build似乎工作正常,它构建并将打包成几个包。 这个版本似乎也可以工作,但是< code>Nuget Feed没有用最新的包更新。 我的发布任务只是一个任务,如下图所示。日志显示它找到并下载了这些包,但在实际推送到时没有显示任何成功。 这是一个日

  • 我试图通过在线文档将stripe应用程序实现到iOS应用程序中。到目前为止一切都很好,现在把paymentView推到我的导航控制器堆栈上,我得到了一个完全破碎的屏幕。虽然stripe视图有问题,但是当我没有登录(见下面的代码-没有给出标识)并且登录屏幕被推送时,它也是完全黑色的。这个视图不会有问题,因为如果我在这个视图之前从另一个视图推送登录视图,它的加载就可以了。 那么,为什么通过下面的buy

  • 我生成了一个没有密码的SSH密钥对,并将公钥添加到GitHub。 连接 成功,但当我重命名密钥时,它失败了。 但是当我想推送我的更改时,它仍然会询问我的用户名和密码组合。 有没有办法在没有密码的情况下推送?

  • 问题内容: 我一直在尝试纠正此错误已有大约一个小时,而我的解决方案已用完,所以请帮助我。 heroku创建 运行正常没有问题 git push heroku主 需求文件: proc文件 网络:python manage.py runserver 0.0.0.0:$PORT –noreload Heroku日志: 问题答案: 我能够通过以下方式运行它: 克隆你的git仓库 从您的删除 我假设您没有,

  • 一、基础配置 第一步:创建个推账号 如没有个推账号,需要创建个推推送账号及应用,获得AppID、AppKey和Master Secret 参数。如下图所示: 第二步:在智能触达中配置个推账号 在诸葛「智能触达→设置→触达渠道→推送消息」中,找到「个推推送」,填入上一步中得到的AppKey和Master Secret参数并完成开通。 第三步:确认SDK中添加推送逻辑代码 按照个推最新的开发文档集成时

  • 我花了很多时间来解决我的这个问题,阅读文档多次,谷歌在这里和那里:SO,Laracast,Larachat等,但仍然无法让Laravel回声订阅推动者存在频道,它没有显示任何错误在控制台选项卡 公共和私人频道工作正常,用户可以订阅,用户可以监听/触发事件 注意:在创建这篇文章之前,我有一些与我的当前问题相关的搜索问题,它们都没有答案 一些和我类似的问题: https://laravelquesti