一个客户要求在他的项目中使用亚马逊的pinpoint做移动推送,查阅文档后发现还是一脸懵逼,还是在亚马逊的一名技术人员的引导下才找到方法,下面把代码记录一下
该项目服务端是基于springboot,客户端用的RN,本文只记录服务端部分
首先是依赖要有
<!--亚马逊pinpoint服务-->
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-pinpoint</artifactId>
<version>1.11.888</version>
</dependency>
然后在test中简要示例代码
package com.abon.v2ce;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.AWSCredentialsProvider;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.pinpoint.AmazonPinpoint;
import com.amazonaws.services.pinpoint.AmazonPinpointClientBuilder;
import com.amazonaws.services.pinpoint.model.*;
import org.junit.Test;
import java.util.HashMap;
import java.util.Map;
public class AwsPinpointTest {
protected static String accessKeyId = "xxxxxxxxxxxxxxxx";
protected static String accessKeySecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx+cq";
private static final Regions region = Regions.US_EAST_2;
// IOS推送测试
@Test
public void sendForIos() {
String appId = "xxxxxxxxxxxxxxxx";
String deviceId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
try {
AWSCredentials awsCredentials = new BasicAWSCredentials(accessKeyId, accessKeySecret);
AWSCredentialsProvider awsCredentialsProvider = new AWSStaticCredentialsProvider(awsCredentials);
AmazonPinpoint client = AmazonPinpointClientBuilder.standard()
.withCredentials(awsCredentialsProvider)
.withRegion(region)
.build();
Map<String, AddressConfiguration> addressMap = new HashMap<>();
addressMap.put(deviceId, new AddressConfiguration().withChannelType(ChannelType.APNS));
SendMessagesRequest request = new SendMessagesRequest()
.withApplicationId(appId)
.withMessageRequest(new MessageRequest()
.withAddresses(addressMap)
.withMessageConfiguration(new DirectMessageConfiguration()
.withAPNSMessage(new APNSMessage()
.withAction("OPEN_APP")
.withAPNSPushType("alert")
.withBody("消息内容:" + System.currentTimeMillis())
.withTitle("this is title")
)
)
);
client.sendMessages(request);
System.out.println("publish ok!");
} catch (Exception ex) {
System.out.println("publish error: " + ex.getMessage());
}
}
// Android推送测试
@Test
public void sendForAndroid() {
String appId = "xxxxxxxxxxxxxxxx";
String deviceId = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
try {
AWSCredentials awsCredentials = new BasicAWSCredentials(accessKeyId, accessKeySecret);
AWSCredentialsProvider awsCredentialsProvider = new AWSStaticCredentialsProvider(awsCredentials);
AmazonPinpoint client = AmazonPinpointClientBuilder.standard()
.withCredentials(awsCredentialsProvider)
.withRegion(region)
.build();
Map<String, AddressConfiguration> addressMap = new HashMap<>();
addressMap.put(deviceId, new AddressConfiguration().withChannelType(ChannelType.GCM));
SendMessagesRequest request = new SendMessagesRequest()
.withApplicationId(appId)
.withMessageRequest(new MessageRequest()
.withAddresses(addressMap)
.withMessageConfiguration(new DirectMessageConfiguration()
.withGCMMessage(new GCMMessage()
.withAction("OPEN_APP")
.withBody("消息内容:" + System.currentTimeMillis())
.withTitle("this is title")
)
)
);
client.sendMessages(request);
System.out.println("publish ok!");
} catch (Exception ex) {
System.out.println("publish error: " + ex.getMessage());
}
}
}
要注意的是,sdk中对账号密钥的鉴权我没有用它官网说的文件的方式,而是直接用的awsCredentialsProvider