前言
移动社交是我们日常生活中很常见的软件,最近在做即时通信,我用的是环信,和大家分享一下~~
环信的API都是基于JSON的,所以在构造HTTP请求的时候,要指定请求头:
注意==》环信API必须携带token才可以访问。
创建一个认证类
public class Authentic {
private static Token token = new Token();
private TalkHttpService service;
public Authentic(TalkHttpService service) {
this.service = service;
}
public Authentic(TalkHttpService service, Token token) {
this.service = service;
if (token != null) {
Authentic.token = token;
}
}
public Token getToken() {
this.flush();
return token;
}
public void task() {
this.flush();
}
/**
* @describe 申请认证 POST PUT 这两种请求携带参数
* @author 何章怀晓 hezhanghuaixiao
* @date 2020/9/8 17:02
* @other
*/
public void applyAuthentication(HttpEntityEnclosingRequestBase request) {
this.flush();
request.addHeader("Authorization", "Bearer " + token.toString());
}
/**
* @describe 申请认证 GET DELETE 这两种请求不携带参数
* @author 何章怀晓 hezhanghuaixiao
* @date 2020/9/8 17:02
* @other
*/
public void applyAuthentication(HttpRequestBase request) {
this.flush();
request.addHeader("Authorization", "Bearer " + token.toString());
}
private void flush() {
synchronized (Authentic.class) {
try {
//如果超时
if (token.isExpire()) {
//判断APPID和秘钥信息
if (_Global.APP_CLIENT_ID != null && _Global.APP_CLIENT_SECRET != null) {
Map param = new HashMap();
param.put("grant_type", "client_credentials");
param.put("client_id", _Global.APP_CLIENT_ID);
param.put("client_secret", _Global.APP_CLIENT_SECRET);
//请求获取token
TalkNode res = service
.request(_Global.URR_TOKEN, _Global.HTTP_METHOD_POST, param, null, null);
//成功获取token
if (res != null && res.getAccess_token() != null && res.getExpires_in() != null
&& res.getExpires_in() > 0) {
//赋值
token = new Token(res.getAccess_token(),
res.getExpires_in() * 1000 + System.currentTimeMillis());
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static class Token {
private String token;
private Long expire;
public Token() {
}
public Token(String token, long expire) {
this.token = token;
this.expire = expire;
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
public Long getExpire() {
return expire;
}
public void setExpire(Long expire) {
this.expire = expire;
}
public boolean isExpire() {
return expire == null || System.currentTimeMillis() > expire;
}
@Override
public String toString() {
return token;
}
}
}
创建请求接口
public interface TalkHttpService {
/**
@describe
@param
* @param url 请求地址
* @param method请求方法
* @param param参数
* @param auth加密认证
* @param field字段转换
@return com.hedashi.protal.model.TalkNode
@author 何章怀晓 hezhanghuaixiao
@date 2020/9/8 17:21
@other
*/
TalkNode request(String url, int method, Object param,
Authentic auth, String[][] field) throws Exception;
/**
@describe
@param
* @param url 请求地址
* @param file文件名称
* @param auth加密认证
* @param equal字段转换
@return com.hedashi.protal.model.TalkNode
@author 何章怀晓 hezhanghuaixiao
@date 2020/9/8 17:21
@other
*/
TalkNode upload(String url, File file, Authentic auth,
String[][] equal) throws Exception;
/**
@describe
@param
* @param url 请求地址
* @param file文件名称
* @param auth加密认证
* @param header请求头
@return void
@author 何章怀晓 hezhanghuaixiao
@date 2020/9/8 17:21
@other
*/
void downLoad(String url, File file, Authentic auth,
Map header) throws Exception;
}
创建全局变量对不同模块操作
/*
@describe 全局变量
@params
@return
@author 何章怀晓
@date 2020/7/30 9:30
@other
*/
public class _Global {
public static String APP_KEY = "";
public static String APP_CLIENT_ID = "";
public static String APP_CLIENT_SECRET = "";
//每页数量
public static int APP_PAGE_SIZE = 10;
public static final int HTTP_METHOD_GET = 1;
public static final int H