使用aws sns从java web应用程序发送短信

用户将在我的网络应用程序上创建一个帐户。 该应用需要通过向用户提供的手机号码发送短信来验证用户身份。 短信是一个简短的唯一代码,用户需要输入到Web浏览器以便应用程序对用户进行身份验证。

如何为此用例配置Amazon AWS SNS?

从我所读到的,SNS是由网站管理员选择一个topic ,然后每个用户订阅该主题。 然后,网站管理员将消息广播样式发送给该主题的所有订阅者。 这不符合我向每个用户发送唯一消息的要求。 另外,为每个电话号码创建一个单独的topic将过于繁琐,更不用说在保护所有电话号码的隐私方面产生安全问题。

Amazon AWS SNS是否可以配置用于此用例? 如果是这样,怎么样?

我正在使用Java。


只有当您需要将SMS消息发送到多个手机号码时,SNS主题才会被锁定。 如果您想将SMS消息发送到单个号码,则可以使用Amazon AWS SDK。

文档可在http://docs.aws.amazon.com/sns/latest/dg/sms_publish-to-phone.html#sms_publish_sdk上找到。

示例代码:

public static void main(String[] args) {
    AWSCredentials awsCredentials = new BasicAWSCredentials("YOUR_Client_ID", "YOUR_Client_secret");
    final AmazonSNSClient client = new AmazonSNSClient(awsCredentials);
    client.setRegion(Region.getRegion(Regions.REGION_YOU_WANT_TO_USE));

    AmazonSNSClient snsClient = new AmazonSNSClient(awsCredentials);
    String message = "My SMS message";
    String phoneNumber = "+1XXX5550100";
    Map<String, MessageAttributeValue> smsAttributes = 
            new HashMap<String, MessageAttributeValue>();
    //<set SMS attributes>
    sendSMSMessage(snsClient, message, phoneNumber, smsAttributes);
}

public static void sendSMSMessage(AmazonSNSClient snsClient, String message, 
    String phoneNumber, Map<String, MessageAttributeValue> smsAttributes) {
    PublishResult result = snsClient.publish(new PublishRequest()
                    .withMessage(message)
                    .withPhoneNumber(phoneNumber)
                    .withMessageAttributes(smsAttributes));
    System.out.println(result); // Prints the message ID.
}

请记住在IAM控制台上创建一个用户,添加访问SNS服务的权限。 您需要添加AmazonSNSFullAccess角色。

用您创建的用户凭证替换YOUR_Client_IDYOUR_Client_secret


单独的SMS / MMS消息不在AWS SNS的明显用例中。

如果您需要将正确的短信/彩信文本消息发送到任意电话号码,则需要转向其他平台,例如Twilio或带宽。


AWS SDK中已经废弃了一些方法。

BasicAWSCredentials awsCredentials = new BasicAWSCredentials("CLIENT-ID", "SECRET-KEY");
AmazonSNS snsClient = AmazonSNSClientBuilder.standard()
                     .withRegion(Regions.fromName("YOUR_REGION"))
     .withCredentials(new AWSStaticCredentialsProvider(awsCredentials)).build();

Map<String, MessageAttributeValue> smsAttributes = new HashMap<String, MessageAttributeValue>();
smsAttributes.put("AWS.SNS.SMS.SenderID",new MessageAttributeValue().withStringValue("SENDER-ID").withDataType("String");
smsAttributes.put("AWS.SNS.SMS.SMSType",new MessageAttributeValue().withStringValue("Transactional").withDataType("String"));

PublishRequest request = new PublishRequest();
request.withMessage("YOUR MESSAGE")
.withPhoneNumber("E.164-PhoneNumber")
.withMessageAttributes(smsAttributes);
PublishResult result=snsClient.publish(request);
链接地址: http://www.djcxy.com/p/32237.html

上一篇: sending sms from java web app using aws sns

下一篇: Amazon SNS too slow and other issues