使用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_ID和YOUR_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