Java IM環信服務端集成之用戶體系集成(二)

移動端用戶註冊 VS 環信IM用戶體系集成

由於業務我們涉及到即時通訊(IM)的原因,在多個第三方的選擇後,選擇了環信。業務的改變導致了接口的重構下面我就簡述一下環信IM的用戶體系集成的流程以及規則:

涉及到業務參數,請查看Java IM環信服務端集成之創建應用(一)  參數後邊都要用到。

名詞解釋

當您申請了 AppKey 後,會得到一個 xxxx#xxxx 格式的字符串,這個就是您的 AppKey,下文中用到的:

  • org_name 對應#前面部分
  • app_name 對應#後面部分
  • client_id 和 client_secret 可以在環信管理後臺的 APP 詳情頁面看到,在獲取token時候要用到。

環信 ID 規則

在註冊環信賬戶的時候,需要注意環信 ID 的規則:
  • 使用英文字母和(或)數字的組合
  • 不能使用中文
  • 不能使用 email 地址
  • 不能使用 UUID
  • 用戶ID的長度在255字節以內
  • 中間不能有空格或者井號(#)等特殊字符
  • 允許的用戶名正則 “[a-zA-Z0-9_-.]*”(a~z大小寫字母/數字/下劃線/橫線/英文句號),其他都不允許 如果是大寫字母會自動轉成小寫
  • 不區分大小寫。系統忽略大小寫,認爲 AA、Aa、aa、aA 都是一樣的。如果系統已經存在了環信 ID 爲 AA 的用戶,再試圖使用 aa 作爲環信 ID 註冊新用戶,系統返回用戶名重複,以此類推。但是請注意:環信 ID 在數據上的表現形式還是用戶最初註冊的形式,註冊時候使用的大寫就保存大寫,是小寫就保存小寫。即:使用 AA 註冊,環信保存的 ID 就是 AA;使用 Aa 註冊,環信保存的 ID 就是 Aa,以此類推。

數據結構




廢話不多說了,上車。
package com.xunxin.controller.app.huanxin;

import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.xunxin.controller.system.BaseController;
import com.xunxin.dao.sys.PlatformMutualityManagentDao;
import com.xunxin.util.HttpUtils;
import com.xunxin.util.HttpUtils.UHeader;
import com.xunxin.vo.sys.PageData;
import com.xunxin.vo.sys.PlatformMutualityManagent;
import com.xunxin.web.api.bean.Response;
import com.xunxin.web.api.bean.Router;

/**
 * Copyright © 2017 noseparte(Libra) © Like the wind, like rain
 * @Author Noseparte
 * @Compile 2017年10月24日 -- 下午5:31:38
 * @Version 1.0
 * @Description 獲取環信SDK的返回信息
 */
@Controller
@RequestMapping(value=Router.PATH+Router.Easemob.PATH)
public class EasemobController extends BaseController{

	private static final Logger log = Logger.getLogger(EasemobController.class);
	
	private static final String LINKED_URL = "http://www.easemob.com/";
	
	@Autowired
	private PlatformMutualityManagentDao platformMutualityManagentDao; 
	
	@RequestMapping(value=Router.Easemob.GET_TOKEN,method=RequestMethod.POST)
	@ResponseBody
	public Response getToken(PageData pd) {
		log.info("info-: get huanxin token begin");	
		Response res = this.getReponse();
		try {
			PlatformMutualityManagent pm = platformMutualityManagentDao.findOne(pd);
				String app_key = pm.getApp_key();
				String org_name = app_key.split("#")[0];	//組織名稱
				String app_name = app_key.split("#")[1];	//APP名稱
				String client_id = app_key.split("#")[1];	//客戶端id
				String client_secret = app_key.split("#")[1];	//客戶端密鑰
			//post請求路徑
			String url = LINKED_URL + org_name + "/" + app_name + "/" + "token";
			//post請求參數 json
			StringBuffer sb = new StringBuffer();
				sb.append("grant_type:").append("client_credentials");
				sb.append("client_id:").append(client_id);
				sb.append("client_secret:").append(client_secret);
			String argJson = sb.toString();
			//請求頭信息
			List headerList = new ArrayList();
			headerList.add(new UHeader("Content-Type", "application/json"));
			//獲取環信token
			String resp = HttpUtils.getPostResponse(url, argJson, headerList);
			JSONObject obj = JSON.parseObject(resp);
			//TODO 判斷response 狀態碼
				String access_token = obj.getString("access_token");  //token 值
				String expires_in = obj.getString("expires_in");  	//token 有效時間,以秒爲單位,在有效期內不需要重複獲取
				String application = obj.getString("application");  //token 有效時間,以秒爲單位,在有效期內不需要重複獲取
			//獲得返回值 並解析
			PageData tokenPd = new PageData<>();
				tokenPd.put("access_token", access_token);
				tokenPd.put("expires_in", expires_in);
				tokenPd.put("application", application);
			log.info("infoMsg:- get token success, ok");
			return res.success(tokenPd);
		} catch (Exception e) {
			log.error("errorMsg:- An error occurred when get token!");
			return res.failure(e.getMessage());
		}
	}
	
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章