利用smsmanager实现后台发送短信示例


以下是使用 `smsmanager` 在 Java 中实现后台发送短信的一个示例。这里假设你已经有了AWS SDK的依赖配置在你的项目中,并且已经设置好了AWS的凭证信息(可以通过环境变量、Java系统属性、AWS凭证文件或IAM角色等方式设置)。


import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.sns.AmazonSNS;
import com.amazonaws.services.sns.AmazonSNSClientBuilder;
import com.amazonaws.services.sns.model.PublishRequest;
import com.amazonaws.services.sns.model.PublishResult;

public class SMSSender {

    // 这里为了示例简化,直接在代码中设置凭证,实际开发中应该通过更安全的方式配置
    private static final String ACCESS_KEY = "你的AWS_ACCESS_KEY_ID";
    private static final String SECRET_KEY = "你的AWS_SECRET_ACCESS_KEY";

    public static void sendSMS(String phoneNumber, String message) {
        // 初始化凭证
        AWSCredentials credentials = new BasicAWSCredentials(ACCESS_KEY, SECRET_KEY);
        
        // 使用凭证构建SNS客户端
        AmazonSNS snsClient = AmazonSNSClientBuilder.standard()
                .withCredentials(new AWSStaticCredentialsProvider(credentials))
                .withRegion("你的区域ID,例如us-west-2")
                .build();

        // 构造发送短信的请求
        PublishRequest publishRequest = new PublishRequest()
                .withPhoneNumber(phoneNumber)
                .withMessage(message);

        try {
            // 发送短信
            PublishResult result = snsClient.publish(publishRequest);
            
            // 输出发送短信的MessageId(可选)
            System.out.println("MessageId: " + result.getMessageId());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        // 调用发送短信的方法
        sendSMS("+8612345678901", "这是一条测试短信");
    }
}

**注意**:

1. 你需要将 `"你的AWS_ACCESS_KEY_ID"` 和 `"你的AWS_SECRET_ACCESS_KEY"` 替换为你自己的AWS凭证。

2. 你需要将 `"你的区域ID,例如us-west-2"` 替换为你所使用的AWS服务所在的区域ID。

3. `sendSMS` 方法中的 `phoneNumber` 参数应该是一个符合国际号码格式的字符串,以 "+" 开头,后面跟随国家代码和手机号码,没有空格或分隔符。

4. 在生产环境中,应该避免在代码中硬编码AWS凭证,而应使用更安全的方式(如环境变量、IAM角色等)来管理凭证。

5. 这个示例假设你已经启用了SNS服务,并且具有向特定手机号码发送短信的权限。如果你遇到权限问题,请检查你的IAM策略。