基于云信的app聊天(IM)功能模块开发(一)——创建用户

来源:互联网 发布:郁冬 it 编辑:程序博客网 时间:2024/05/19 21:44

最近在开发的时候需要用到即时通讯模块(IM),由于自己开发IM模块太耗时耗力,决定使用网易的云信第三方服务,具体云信SDK如何使用我这里就不写了,请查看官网开发手册:http://dev.netease.im/


  • 最先介绍的是注册用户模块:
    由于使用的是第三方IM服务,只在IM上面会使用到云信服务器,但其他信息还是存储在自己的App服务器中,这就需要是App、AppServer、IMServer三方通讯。

每一个用户都配备一个云信ID(accid)和一个通行证(token)这都是在注册云信ID的时候云信服务端会返回回来的,建议保存在AppServer中,每次App客户端需要的时候想AppServer索取。要保证每个App客户端中只有一个accid。

下面是注册账号的流程图
这里写图片描述

Created with Raphaël 2.1.0开始App客户端创建用户App客户端验证手机号是否正确?AppServer端创建用户(还未在服务端记录)Server服务端验证手机号是否正确?Server服务端向云信服务端发送创建云信ID请求云信服务端返回结果云信服务端是否创建云信ID成功?appServer服务器保存云信服务器返回的accid和token创建成功,并通知App客户端结束创建失败,并向App客户端返回失败信息yesnoyesnoyesno

在开发App客户端时需要云信SDK请前往官网下载:http://netease.im/im-sdk-demo

服务端接口:

/** * 云信服务接口 * @author  作者 E-mail:陈孜豪 1577408950@qq.com * @date 创建时间:2017年3月2日 下午4:05:32 * @version 1.0 * @parameter * @since * @return */public interface YunXinServer {    // 注册云信ID    String register(String userName);    // 存储云信ID和token    User saveAccidAndToken(String username, String accid, String token);}

服务端接口实现:

/** * @author  作者 E-mail:陈孜豪 1577408950@qq.com * @date 创建时间:2017年3月2日 下午4:20:37 * @version 1.0 * @parameter * @since * @return */@Servicepublic class YunXinServerImpl implements YunXinServer{    private static final Logger LOGGER = LoggerFactory.getLogger(UserServiceImpl.class);    private final UserRepository userRepository;    /**     * 装载userRepository     *      * @param userRepository     */    @Autowired    public YunXinServerImpl(UserRepository userRepository) {        this.userRepository = userRepository;    }    @Override    public String register(String username) {        // TODO Auto-generated method stub        String accid= username;        DefaultHttpClient httpClient = new DefaultHttpClient();        String url ="https://api.netease.im/nimserver/user/create.action";        HttpPost httpPost = new HttpPost(url);        String appKey ="c0f965848c17b549289fe102f66237c9";        String appSecret = "7543c00029f7";        String nonce =  "12345";        String curTime = String.valueOf((new Date()).getTime() / 1000L);        String checkSum = CheckSumBuilder.getCheckSum(appSecret, nonce ,curTime);//参考 计算CheckSum的java代码        // 设置请求的header        httpPost.addHeader("AppKey", appKey);        httpPost.addHeader("Nonce", nonce);        httpPost.addHeader("CurTime", curTime);        httpPost.addHeader("CheckSum", checkSum);        httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded;charset=utf-8");        // 设置请求的参数        List<NameValuePair> nvps = new ArrayList<NameValuePair>();        nvps.add(new BasicNameValuePair("accid", accid));        try {            httpPost.setEntity(new UrlEncodedFormEntity(nvps, "utf-8"));        } catch (UnsupportedEncodingException e1) {            // TODO Auto-generated catch block            e1.printStackTrace();        }        // 执行请求        HttpResponse response = null;        try {            response = httpClient.execute(httpPost);        } catch (ClientProtocolException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        // 返回结果        String result = "";        try {            result = EntityUtils.toString(response.getEntity(), "utf-8");        }catch (ParseException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }        System.out.println(result);        return result;    }    @Override    public User saveAccidAndToken(String username, String accid, String token) {        User user = userRepository.findByUsername(username);        user.setAccid(accid);        user.setToken(token);        return userRepository.save(user);    }}

Controller中注册逻辑:

...上面的appServer端注册过程省略// 创建云信ID获取accid以及token        String accid = "";        String token = "";        String name = "";        String desc = "";        try {            String yunXinResult = yunXinServer.register(form.getUsername());            JSONObject jsonObject = JSONObject.parseObject(yunXinResult);            int code = jsonObject.getInteger("code");            if (code == 200) {                JSONObject info = jsonObject.getJSONObject("info");                accid = info.getString("accid");                token = info.getString("token");                name = info.getString("name");            }            else {                desc = jsonObject.getString("desc");            }            // 200403414416431500            if (code == 403) {                message.setMsg(0, "403失败");                return new ResponseEntity<Message>(message, HttpStatus.OK);            }            if (code == 414) {                message.setMsg(0, "414失败");                return new ResponseEntity<Message>(message, HttpStatus.OK);            }            if (code == 416) {                message.setMsg(0, "416失败");                return new ResponseEntity<Message>(message, HttpStatus.OK);            }            if (code == 431) {                message.setMsg(0, "431失败");                return new ResponseEntity<Message>(message, HttpStatus.OK);            }            if (code == 500) {                message.setMsg(0, "500失败");                return new ResponseEntity<Message>(message, HttpStatus.OK);            }        } catch (Exception e) {            message.setMsg(0, "与云信server通讯失败");            return new ResponseEntity<Message>(message, HttpStatus.OK);        }        yunXinServer.saveAccidAndToken(form.getUsername(), accid, token);        // ok, redirect        message.setMsg(1, "用户创建成功");
0 0
原创粉丝点击