梗概:根据极光文档,java注册用户到极光IM分为两个步骤,第一步,调用文件上传接口,上传头像,获取返回的 media_id ,即资源文件id。第二步调动注册接口,带上头像数据即可。代码如下:
相关技术栈:RestTemplate,Lombok
一、编写上传文件方法
上传成功后返回资源id
//文件上传极光
public String uploadHead(String username){
//生成base64加密秘钥,appkey:secret在极光IM开发平台获取
String keys = "Basic " + Base64.getEncoder().encodeToString("appkey:secret".getBytes());
//接口路径
String url = "https://api.im.jpush.cn/v1/resource?type=image";
//头像文件路径
File file = new File("D:\\test.png");
FileSystemResource resource = new FileSystemResource(file);
MultiValueMap<String,Object> param= new LinkedMultiValueMap<>();
param.add("filename",resource);// 文件
ParameterizedTypeReference<String> resultType = new ParameterizedTypeReference<String>(){};
HttpHeaders httpHeaders = new HttpHeaders();
MediaType mediaType = MediaType.parseMediaType("multipart/form-data;charset=UTF-8"); // 上传文件需要设置的类型
httpHeaders.setContentType(mediaType);
httpHeaders.add("Authorization",keys);
HttpEntity<MultiValueMap<String, Object>> request = new HttpEntity<>(param, httpHeaders);
// 提交post请求
ResponseEntity<String> exchange = restTemplate.exchange(url, HttpMethod.POST, request, resultType);
int statusCode = exchange.getStatusCodeValue();
if(200 != statusCode){
log.error("文件上传失败,当前账户:{}",username);
return "";
}
String body = exchange.getBody();
JSONObject o = JSONObject.parseObject(body);
log.info("状态码:{},返回结果:{}",statusCode,body);
return o.getString("media_id");
}
二、构造注册数据,调用注册API注册至极光
引用对象实体:
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
public class JiGuangInfo {
private String username;
private String password;
private String nickname;
private String avatar;
}
//调用极光注册接口同时注册
public boolean registerJiGuangUser(List<JiGuangInfo> jiGuangInfos){
//生成base64加密秘钥,appkey:secret在极光IM开发平台获取(将改行代码抽取至类变量)
String keys = "Basic " + Base64.getEncoder().encodeToString("appkey:secret".getBytes());
String url = "https://api.im.jpush.cn/v1/users";
//设置请求数据的格式
HttpHeaders headers = new HttpHeaders();
headers.add("Authorization",keys);
//封装请求内容
HttpEntity<List<JiGuangInfo>> objectHttpEntity = new HttpEntity<>(jiGuangInfos,headers);
//发起请求
ResponseEntity<String> responseEntity = restTemplate.postForEntity(url,objectHttpEntity,String.class);
int statusCode = responseEntity.getStatusCodeValue();
String body = responseEntity.getBody();
//极光API返回201为正常
if(201 != statusCode){
log.error("注册失败,状态码:{},返回结果:{}",statusCode,body);
return false;
}
log.info("注册成功,状态码:{},返回结果:{}",statusCode,body);
return true;
}
三、生成注册信息注册
@org.junit.Test
public void test(){
List<JiGuangInfo> list = new ArrayList<>();
JiGuangInfo jiGuangInfo = new JiGuangInfo("dingwh", "123456", "这个橘子超甜", uploadHead("dingwh"));
list.add(jiGuangInfo);
boolean b = registerJiGuangUser(list);
log.info("注册结果:{}",b ? "success" : "fail");
}
支持批量注册