Java集成环信即时通讯(SpringBoot)

前言:链接: 环信官网友情链接.
官网注册一个社区版账号,社区版限制注册100个用户。
企业版资费如下
还有硬性要求,账号余额9000以上

准备完成得到需要的参数

环信Api链接:链接: http://docs-im.easemob.com/im/server/ready/user#用户管理.

接下来完成简单的获取环信token,授权注册,以及发送消息的功能实现

1.需要的maven依赖:

<dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger2</artifactId><version>2.4.0</version></dependency><dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactId><version>2.4.0</version></dependency><dependency><groupId>com.easemob</groupId><artifactId>rest-java-sdk</artifactId><version>1.0.2</version></dependency>

2.controller层

/*** 获取环信token*/
@PostMapping("/getHXToKen")
@CrossOrigin(origins = "*", maxAge = 3600)//跨域
public Token getHXToKen(String username,String password) {HXUtil hxUtil=new HXUtil();Token token = hxUtil.getToken();return token;
}/*** 授权添加环信用户*/
@PostMapping("/addHXUser")
@CrossOrigin(origins = "*", maxAge = 3600)//跨域
public ResultMap addHXUser(String uId, String username,String password,String token) {return userService.addHXUser(uId, username, password, token);
}/*** 环信发送信息*/
@PostMapping("/sendToUser")
@CrossOrigin(origins = "*", maxAge = 3600)//跨域
public Boolean sendToUser(String sendUser, String targetUser, String msg) {HXUtil hxUtil=new HXUtil();Boolean aBoolean = hxUtil.sendToUser("发件人账号", "收件人账号", "信息");return aBoolean;
}

3.service层

@Override
public ResultMap addHXUser(String uId, String username, String password, String token) {HXUtil hxUtil=new HXUtil();Token token2 ;//判断redis中是否存在tokenBoolean judgeToken = jedisClientPool.exists("token");if (judgeToken){//存在就获取tokenString token1 = jedisClientPool.get("token");//判断前端传入token是否和后端token一致if (token1.equals(token)){//通过token授权注册环信用户Boolean aBoolean = hxUtil.addUser(username, password,token);if (aBoolean){//注册成功更新数据库环信账号Boolean aBoolean1 = userMapper.updUserHxById(uId, username, password);if (aBoolean1){return ResultMap.ok(200,"注册成功!");}else {return ResultMap.error(400,"注册成功,数据更新失败!");}}else {return ResultMap.error(400,"注册失败!");}}else {//不一致重新更新tokentoken2= hxUtil.getToken();jedisClientPool.set("token",token2.getAccess_token());jedisClientPool.expire("token",过期时间);return ResultMap.error("token已过期").put("token",token2.getAccess_token());}}else {//token不存在获取tokentoken2 = hxUtil.getToken();jedisClientPool.set("token",token2.getAccess_token());//定义token过期时间jedisClientPool.expire("token",过期时间);//获取tokenString token3 = jedisClientPool.get("token");//通过token授权注册用户Boolean aBoolean = hxUtil.addUser(username, password,token3);if (aBoolean){//更新数据库用户环信账号Boolean aBoolean1 = userMapper.updUserHxById(uId, username, password);if (aBoolean1){return ResultMap.ok(200,"注册成功!").put("token",token2.getAccess_token());}else {return ResultMap.error(400,"注册成功,数据更新失败!");}}return ResultMap.error(400,"注册失败!").put("token",token2.getAccess_token());}
}

4.工具类

import cn.zkly.com.pojo.HXUser;
import cn.zkly.com.pojo.Token;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.*;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;import java.util.Arrays;/***  环信工具类*/
@Configuration
public class HXUtil {private static RestTemplate restTemplate = new RestTemplate();// 对应环信平台Orgnameprivate static final String ORG_NAME = "Orgname";// 对应环信平台Client IDprivate static final String CLIENT_ID = "";// 对应环信平台Client Secretprivate static final String CLIENT_SECRET = "";// 对应环信平台appnameprivate static final String APP_NAME = "appname";// 链接前缀private static final String URL_PREFIX = "http://a1.easemob.com/" + ORG_NAME + "/" + APP_NAME + "/";private  Token token;public enum HXMessageType {txt,// 文本img,// 图片loc,// 位置audio,// 音频video,// 视频file// 文件}/*** 获取Token * token存在时间为7天,可以将token存入redis* @return token*/public  Token getToken() {JSONObject body = new JSONObject();body.put("grant_type", "client_credentials");body.put("client_id", CLIENT_ID );body.put("client_secret", CLIENT_SECRET );HttpEntity httpEntity = new HttpEntity(body.toString(), null);ResponseEntity<Token> tokenResponseEntity = restTemplate.postForEntity(URL_PREFIX + "token", httpEntity, Token.class);token =  tokenResponseEntity.getBody();HttpStatus statusCode = tokenResponseEntity.getStatusCode();token.setStatusCode(statusCode.value());if(statusCode.value()==200){return token;}else {return null;}}/*** 添加用户** @param username 用户名(唯一非空)* @param password 密码* @return 是否成功*/public  Boolean addUser(String username, String password,String token) {try {JSONArray body = new JSONArray();JSONObject jsonObject = new JSONObject();jsonObject.put("username", username);jsonObject.put("password", password);body.add(jsonObject);MultiValueMap<String, String> stringMultiValueMap = new LinkedMultiValueMap<String, String>();stringMultiValueMap.add("Bearer",token);//通过token授权添加用户HttpEntity httpEntity = new HttpEntity(body.toString(),stringMultiValueMap );ResponseEntity responseEntity = restTemplate.postForEntity(URL_PREFIX + "users", httpEntity, null);return responseEntity.getStatusCodeValue() == 200;} catch (RestClientException e) {e.printStackTrace();return false;}}/*** 发送消息** @param sendUser   发送用户* @param targetUser 接收用户* @param msg  发送消息* @return 是否成功*/public  Boolean sendToUser(String sendUser, String targetUser, String msg) {try {JSONObject body = new JSONObject();body.put("target_type", "users");JSONArray targetUserjson = new JSONArray();targetUserjson.add(targetUser);body.put("target", targetUserjson);JSONObject msgJson = new JSONObject();msgJson.put("type", HXMessageType.txt.name());msgJson.put("msg", msg);body.put("msg", msgJson);body.put("from", sendUser);HttpEntity httpEntity = new HttpEntity(body, getHttpHeaders(MediaType.APPLICATION_JSON, MediaType.APPLICATION_JSON));ResponseEntity responseEntity = restTemplate.postForEntity(URL_PREFIX + "messages", httpEntity, null);System.out.println(responseEntity.getStatusCodeValue());return responseEntity.getStatusCodeValue() == 200;} catch (RestClientException e) {e.printStackTrace();return false;}}/*** 获取HttpHeaders** @param contentType 客户端发送类型* @param accept      响应类型* @return HttpHeaders*/private  HttpHeaders getHttpHeaders(MediaType contentType, MediaType... accept) {HttpHeaders headers = new HttpHeaders();//设置headers.add("Authorization", "Bearer " + getToken().getAccess_token());headers.setContentType(contentType != null ? contentType : MediaType.APPLICATION_JSON);headers.setAccept(Arrays.asList((accept != null && accept.length > 0) ? accept : new MediaType[]{MediaType.APPLICATION_JSON}));return headers;}}

添加的用户可以去环信官网我的应用中"Im用户"查看是否成功,发送消息可以去下载个Android apk包让前端人员更改一下AndroidManifest里的配置 安装测试即可
好记性不如烂笔头~~

Java集成环信即时通讯(SpringBoot)相关推荐

  1. Android 使用easeui 3.0 集成环信即时通讯 我踩过的坑

    0.关于注冊账号就不用说了. 1.创建应用.获取appkey 0.创建应用 1.填写信息 2.获取appkey 2.集成 0.首先新建一个project 1.这里主要介绍使用easeui来集成环信的即 ...

  2. 集成环信即时通讯(IM)及使用——服务端

    文章目录 目的 流程 使用 注册账号和创建应用 调用环信接口 建议 如何自己搭建一个im服务器 目的 本篇讲述服务端如何集成环信SDK,实现IM系统. 流程 注册账号 创建应用 调用环信接口 使用 注 ...

  3. android 集成环信 即时通讯

    工作这么长时间了,我是一个很懒的人 ,今天正好看见前同事在CSDN上发的博客,记录了那时我们一起工作碰到的问题,勾起了美好的回忆,索性我在记录一下刚刚做完的一些功能,花了将近多半个月做了环信的即时通讯 ...

  4. 服务器端集成环信即使通讯

    <?php /**     --------------------------------------------------     环信PHP REST示例代码     --------- ...

  5. 环信java,java集成环信 - IM Geek开发者社区-移动开发者社区-开源社区-IM Geek官网...

    1.项目环境描述 项目是一个关于教育的项目,主要的架构是Spring,Struts2,Hibernate,前端页面是Jsp. 手机端:Android,IOS 2.项目需求描述 项目中有一个需求是聊天的 ...

  6. java集成环信SDK用户注册

    环信常量类 import org.springframework.stereotype.Component;/*** 环信常量保存工具类* * @author zhangxj**/ @Componen ...

  7. 环信即时通讯SDK集成——如何使用Swift快速集成环信IM iOS SDK并实现单聊

    本文介绍如何使用swift快速集成环信即时通讯 IM iOS SDK 实现单聊. 前提条件 • Xcode (推荐最新版本). • 安装 iOS 10.0 或更高版本的 iOS 模拟器或 Apple ...

  8. 环信 即时通讯sdk实现客服功能

    仅适用于已经集成环信 即时通讯sdk,又需求实现客服功能,而不更换sdk. 下面的api环信 即时通讯并没有在文档中暴露,是我咨询了环信客服后知道的 核心就是 给 Message对象  setAttr ...

  9. Java服务端集成环信im即时通讯

    Java服务端集成环信im即时通讯 先去GitHub上下载官方给的示例 说明一下环信给的demo 解压下载的包 导入项目之后加几个jar包 注意事项 修改OrgInfo和TokenUtil类 跟据IM ...

最新文章

  1. ATS 5.3.0中开启最高级别的缓存调试信息
  2. “衣+”挑战百度 图像识别搜索引擎
  3. excel导入数据库的简单方法
  4. TCP为什么是四次挥手
  5. java 工厂模式的写法_java简单工厂模式是什么
  6. vue中 v-show和v-if的区别?
  7. CoreAnimation-CABasicAnimation
  8. Vue编写添加用户的表单 ~ 不要错过哦
  9. BestCoder Round #70
  10. pbrt gamma
  11. 经纬度 度分秒 正则表达式
  12. 英语四六级资料/四六级真题
  13. 微信小程序:UI好看的王者荣耀战力查询助手小程序源码
  14. bittorrent协议
  15. 根据列表id封装删除某条数据后刷新列表
  16. css缓慢执行hover
  17. html5采集手写签名,前端canvas手写签名(含移动端)
  18. LightningChart JS Crack,2D 和 3D JavaScript 图表
  19. c语言大小写字母相互转化,(c语言)字符串的大小写字母转化函数
  20. umeditor php上传图片,html5 - UMeditor thinkphp上传图片出错

热门文章

  1. 渗透测试培训必会工具xray扫描器被动扫描的使用(二)
  2. 【Unity】物体爆炸,碎片横飞
  3. 30行代码,让27吨发电机原地爆炸
  4. 头条号音频项目,轻松日入200+
  5. 招聘岗位:大数据建模工程师 年薪:25-48W 工作地点:北京
  6. html5段落跳转,jQuery全屏跟随和可平滑跳转到相应文章段落的导航菜单
  7. 【CET4四级英语】【单词】英语四级高频词汇(5)
  8. 烧结机液压系统比例阀控制器
  9. 备份还原数据数据库(固定IP版)
  10. 强化学习算法(一)————表格型方法