Java集成环信即时通讯(SpringBoot)
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)相关推荐
- Android 使用easeui 3.0 集成环信即时通讯 我踩过的坑
0.关于注冊账号就不用说了. 1.创建应用.获取appkey 0.创建应用 1.填写信息 2.获取appkey 2.集成 0.首先新建一个project 1.这里主要介绍使用easeui来集成环信的即 ...
- 集成环信即时通讯(IM)及使用——服务端
文章目录 目的 流程 使用 注册账号和创建应用 调用环信接口 建议 如何自己搭建一个im服务器 目的 本篇讲述服务端如何集成环信SDK,实现IM系统. 流程 注册账号 创建应用 调用环信接口 使用 注 ...
- android 集成环信 即时通讯
工作这么长时间了,我是一个很懒的人 ,今天正好看见前同事在CSDN上发的博客,记录了那时我们一起工作碰到的问题,勾起了美好的回忆,索性我在记录一下刚刚做完的一些功能,花了将近多半个月做了环信的即时通讯 ...
- 服务器端集成环信即使通讯
<?php /** -------------------------------------------------- 环信PHP REST示例代码 --------- ...
- 环信java,java集成环信 - IM Geek开发者社区-移动开发者社区-开源社区-IM Geek官网...
1.项目环境描述 项目是一个关于教育的项目,主要的架构是Spring,Struts2,Hibernate,前端页面是Jsp. 手机端:Android,IOS 2.项目需求描述 项目中有一个需求是聊天的 ...
- java集成环信SDK用户注册
环信常量类 import org.springframework.stereotype.Component;/*** 环信常量保存工具类* * @author zhangxj**/ @Componen ...
- 环信即时通讯SDK集成——如何使用Swift快速集成环信IM iOS SDK并实现单聊
本文介绍如何使用swift快速集成环信即时通讯 IM iOS SDK 实现单聊. 前提条件 • Xcode (推荐最新版本). • 安装 iOS 10.0 或更高版本的 iOS 模拟器或 Apple ...
- 环信 即时通讯sdk实现客服功能
仅适用于已经集成环信 即时通讯sdk,又需求实现客服功能,而不更换sdk. 下面的api环信 即时通讯并没有在文档中暴露,是我咨询了环信客服后知道的 核心就是 给 Message对象 setAttr ...
- Java服务端集成环信im即时通讯
Java服务端集成环信im即时通讯 先去GitHub上下载官方给的示例 说明一下环信给的demo 解压下载的包 导入项目之后加几个jar包 注意事项 修改OrgInfo和TokenUtil类 跟据IM ...
最新文章
- ATS 5.3.0中开启最高级别的缓存调试信息
- “衣+”挑战百度 图像识别搜索引擎
- excel导入数据库的简单方法
- TCP为什么是四次挥手
- java 工厂模式的写法_java简单工厂模式是什么
- vue中 v-show和v-if的区别?
- CoreAnimation-CABasicAnimation
- Vue编写添加用户的表单 ~ 不要错过哦
- BestCoder Round #70
- pbrt gamma
- 经纬度 度分秒 正则表达式
- 英语四六级资料/四六级真题
- 微信小程序:UI好看的王者荣耀战力查询助手小程序源码
- bittorrent协议
- 根据列表id封装删除某条数据后刷新列表
- css缓慢执行hover
- html5采集手写签名,前端canvas手写签名(含移动端)
- LightningChart JS Crack,2D 和 3D JavaScript 图表
- c语言大小写字母相互转化,(c语言)字符串的大小写字母转化函数
- umeditor php上传图片,html5 - UMeditor thinkphp上传图片出错