2017-06-14 17 views
1

私のプロジェクトにAmazon SNSサービスを実装しようとしていました。トピックを作成してトピックに登録することもできます。ここではとphone numberとしてsmsendpointとしています。主な問題は、私は自分の携帯電話番号を確認できず、メッセージを公開できないことです。 tokenconfirmSubscriptionにするにはどうすればよいですか? //subscriptionRequest.withToken(token);Amazon SNS確認トークン

public class SNSServiceImpl implements SNSService { 
    private static final Logger logger = LoggerFactory.getLogger(SNSServiceImpl.class); 

    @Value("${AWS_ACCESS_KEY_ID:key}") 
    private String awsAccessKeyId; 
    @Value("${AWS_SECRET_ACCESS_KEY:secret}") 
    private String awsAccessKeySecret; 
    @Value("${AWS_REGION:us-west-2}") 
    private String awsRegion; 

    private AmazonSNS snsClient; 
    private String subscriptionArn; 

    @PostConstruct 
    public void setConnection() { 
     AWSCredentials awsCredentials = new BasicAWSCredentials(awsAccessKeyId, awsAccessKeySecret); 
     AWSCredentialsProvider awsCredentialsProvider = new AWSStaticCredentialsProvider(awsCredentials); 
     snsClient = AmazonSNSClient.builder() 
       .withRegion(awsRegion) 
       .withCredentials(awsCredentialsProvider) 
       .build(); 
    } 

    @Override 
    public String createTopic(String topicName) { 
     CreateTopicRequest topicRequest = new CreateTopicRequest(topicName); 
     CreateTopicResult topicResult = snsClient.createTopic(topicRequest); 
     return topicResult.getTopicArn(); 
    } 

    @Override 
    public void subscribeToTopic(String topicArn) { 
     SubscribeRequest subscribeRequest = new SubscribeRequest(); 
     subscribeRequest.setTopicArn(topicArn); 
     subscribeRequest.setProtocol("sms"); 
     subscribeRequest.setEndpoint("+14699011920"); 
     SubscribeResult subscribeResult = snsClient.subscribe(subscribeRequest); 

     subscriptionArn = subscribeResult.getSubscriptionArn(); 
    } 

    @Override 
    public void confirmSubscription(String topicArn) { 

     ConfirmSubscriptionRequest subscriptionRequest = new ConfirmSubscriptionRequest(); 
     subscriptionRequest.withTopicArn(topicArn); 
     //subscriptionRequest.withToken(token); 

     ConfirmSubscriptionResult confirmSubscriptionResult = snsClient.confirmSubscription(subscriptionRequest); 
     confirmSubscriptionResult.withSubscriptionArn(subscriptionArn); 
    } 

    @Override 
    public void publishMessage(String topicArn, String message) { 
     PublishRequest publishRequest = new PublishRequest(topicArn, message); 
     PublishResult publishResult = snsClient.publish(publishRequest); 

     System.out.println(publishResult); 

    } 
} 

答えて

3

私はちょうどpublishMessage方法を変更し、私のサービスからconfirmSubscriptionこのメソッドを削除します。

@Component 
public class SNSServiceImpl implements SNSService { 
    private static final Logger logger = LoggerFactory.getLogger(SNSServiceImpl.class); 

    @Value("${AWS_ACCESS_KEY_ID:key}") 
    private String awsAccessKeyId; 
    @Value("${AWS_SECRET_ACCESS_KEY:secret}") 
    private String awsAccessKeySecret; 
    @Value("${AWS_REGION:us-west-2}") 
    private String awsRegion; 

    private AmazonSNS snsClient; 

    @PostConstruct 
    public void setConnection() { 
     AWSCredentials awsCredentials = new BasicAWSCredentials(awsAccessKeyId, awsAccessKeySecret); 
     AWSCredentialsProvider awsCredentialsProvider = new AWSStaticCredentialsProvider(awsCredentials); 
     snsClient = AmazonSNSClient.builder() 
       .withRegion(awsRegion) 
       .withCredentials(awsCredentialsProvider) 
       .build(); 
    } 

    @Override 
    public String createTopic(String topicName) { 
     CreateTopicRequest topicRequest = new CreateTopicRequest(topicName); 
     CreateTopicResult topicResult = snsClient.createTopic(topicRequest); 

     logger.info("Create topic request: " + snsClient.getCachedResponseMetadata(topicRequest)); 
     logger.info("Create topic result: " + topicResult); 
     return topicResult.getTopicArn(); 
    } 

    @Override 
    public void subscribeSNSToTopic(String topicArn, String phoneNumber) { 
     String protocol = "sms"; 
     SubscribeRequest subscribeRequest = new SubscribeRequest(topicArn, protocol, phoneNumber); 
     SubscribeResult subscribeResult = snsClient.subscribe(subscribeRequest); 

     logger.info("Subscribe request: " + snsClient.getCachedResponseMetadata(subscribeRequest)); 
     logger.info("Subscribe result: " + subscribeResult); 
    } 

    @Override 
    public void sendSMSMessageToTopic(String topicArn, String message) { 
     Map<String, MessageAttributeValue> smsAttributes = 
       new HashMap<>(); 
     smsAttributes.put("AWS.SNS.SMS.SenderID", new MessageAttributeValue() 
       .withStringValue("mySenderID") //The sender ID shown on the device. 
       .withDataType("String")); 
     smsAttributes.put("AWS.SNS.SMS.MaxPrice", new MessageAttributeValue() 
       .withStringValue("0.50") //Sets the max price to 0.50 USD. 
       .withDataType("Number")); 
     smsAttributes.put("AWS.SNS.SMS.SMSType", new MessageAttributeValue() 
       .withStringValue("Promotional") //Sets the type to promotional. 
       .withDataType("String")); 

     PublishResult publishResult = snsClient.publish(new PublishRequest() 
       .withTopicArn(topicArn) 
       .withMessage(message) 
       .withMessageAttributes(smsAttributes)); 
     logger.info("Public Result: " + publishResult); 
    } 
} 
関連する問題