java即时通讯_java实现即时通信的完整步骤分享

前言

移动社交是我们日常生活中很常见的软件,最近在做即时通信,我用的是环信,和大家分享一下~~

环信的API都是基于JSON的,所以在构造HTTP请求的时候,要指定请求头:

e27382a1cf0ca8e9464af9e55fb96563.png

bb7ce353325ebf17e002facb2abdc195.png

注意==》环信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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值