Android集成腾讯云通信IM

最近研究了一下腾讯云通信IM的相关内容,腾讯云通信提供了聊天需要的功能,包括C2C聊天,群组聊天,可以提供类似于QQ级别通信服务。同时对于没有后台的开发者,腾讯云通信提供了账号托管服务。最后说最重要的,腾讯云通信有专门的开发者技术交流群,有任何问题都可以在里面@技术开发人员,里面的开发者态度很好,比网易云什么的强多了,而且腾讯云通信IM的开发文档和demo也比较全面,可以学到不少开发知识和开发技巧。

云通信首页:https://cloud.tencent.com/product/im
云通信开发指南:https://cloud.tencent.com/document/product/269/9227

第一点:账号集成
腾讯云云通信其实包含了两个部分,一个部分是账号集成模式(TLS),一个是正式的云通信服务。
账号集成模式包含两种模式,分别针对不同的开发者:
(1)独立模式
(2)托管模式
简单来说,独立模式是指开发者拥有自己的后台服务,用户的登录和注册都在自己的服务器上完成;托管模式是指开发者没有自己的后台服务器,那么就可以使用托管模式,将自己的用户信息托管到腾讯云服务器上,开发文档指出,托管模式可以提供等同于QQ账号的安全等级。
下面主要说托管模式,独立模式在APP端不需要集成TLS,后台集成TLS之后会将和TLS服务器通讯,并将sign返回给APP端。

第二点:TLS详解
在使用云通信IM的时候,用户在登录的时候只需要两个参数:identifier和sign,identifier是用户的账号,那sign是怎么来呢?就是通过TLS返回的密钥。
简单来说:就是用户在登录的时候,其实是经历了两个过程:首先使用用户名和密码登录到TLS后台,TLS后台进行验证之后会返回当前用户的sign,之后在使用用户账号和sign登录到IM的后台,之后就可以进行聊天等操作。
这样做有什么好处呢?
(1)快速登录,用户登录一次之后,可以将用户的identifier和sign保存下来,之后不需要登录TLS后台就可以直接登录云通信IM的服务器
(2)安全:如果想要实现用户的快速登录,之前是将用户的用户名和密码保存下来,这样的话用户的用户民和密码很不安全,使用identifier配合sign登录,不用保存用户的用户名和密码,只需要保存用户的用户名和sign,但是sign是有一个失效时间的,过了这个时间就需要重新刷新sign,同时每次获取的sign都是不同的,这样对用户的账号也是一种保护。

第三点:TLS使用
之前说过,用户在登录和注册都需要现经过TLS服务器,那主要说一下手机账号注册和登录TLS的流程:
(1) 在进行注册和登录之前,首先要初始化TLS:

 private void initTls() {
        QALSDKManager.getInstance().setEnv(0);
        QALSDKManager.getInstance().init(BaseApplication.getInstance(), BaseApplication.SDK_APP_ID);
        //初始化TLSHelper
        tlsHelper = TLSHelper.getInstance().init(BaseApplication.getInstance(), BaseApplication.SDK_APP_ID);
    }

(2)手机账号注册:用户输入手机号,获取验证码,检查验证码,注册成功:所有的注册流程都是通TLSSmsRegListener这个接口进行回调,这个接口提供以下方法:

  private TLSSmsRegListener smsRegListener = new TLSSmsRegListener() {
        @Override
        public void OnSmsRegAskCodeSuccess(int i, int i1) {
            ToastUtils.toastMessage("腾讯云注册短信验证码下发成功,请注意查收");
        }

        @Override
        public void OnSmsRegReaskCodeSuccess(int i, int i1) {
            ToastUtils.toastMessage("腾讯云注册短信验证码下发成功,请注意查收");
        }

        @Override
        public void OnSmsRegVerifyCodeSuccess() {
            LogUtils.LogI("注册短信验证码对比成功");
            doRegister();
        }

        @Override
        public void OnSmsRegCommitSuccess(TLSUserInfo tlsUserInfo) {
            ToastUtils.toastMessage("注册成功,请登录");
            LogUtils.LogI("注册成功:" + tlsUserInfo.identifier + "," + TLSHelper.getInstance().getUserSig(tlsUserInfo.identifier));
            //注册成功之后并不会直接返回sig,需要返回上个界面执行登录操作
            if (doRegisterSuccessListener != null) {
                doRegisterSuccessListener.registerSuccess();
            }
        }

        @Override
        public void OnSmsRegFail(TLSErrInfo tlsErrInfo) {
            ToastUtils.toastMessage("注册出错:" + tlsErrInfo.Msg);
            LogUtils.LogI("注册出错" + tlsErrInfo.ErrCode + "," + tlsErrInfo.Title + "," + tlsErrInfo.Msg);
        }

        @Override
        public void OnSmsRegTimeout(TLSErrInfo tlsErrInfo) {
            ToastUtils.toastMessage("注册超时,请稍候重试");
        }
    };

可以看到,每一步都有不同的回调:
用户输入手机号并验证成功之后需要引导用户获取验证码,获取验证码使用以下方法:

 tlsHelper.TLSSmsRegAskCode(ProgressUtils.PHONE_BEFORE + inputPhone.getText().toString(),
  smsRegListener);

验证码有时候可能等待时间较长或者没有发送,用户可以重新获取验证码,重新获取验证码使用以下方法:

tlsHelper.TLSSmsRegReaskCode(smsRegListener);

用户获取到验证码并且输入之后,需要对比验证码是否输入正确,此时需要使用以下方法:

tlsHelper.TLSSmsRegVerifyCode(inputCode.getText().toString(), smsRegListener);

当用户输入的验证码没问题之后,就可以执行真正的注册,注册使用以下方法:

tlsHelper.TLSSmsRegCommit(smsRegListener);

直行到这里,用户已经成功注册了,此时就可以让用户执行登录操作了,登录操作的流程和回调和注册是一样的,只是有些方法参数列表不一样,这里就不说了。

第四点:云通信IM正式使用

经过了第三步的操作,我们已经可以登陆到TLS后台了,此时在登录成功之后会将用户的sign返回,其实TLS已经对用户的sign进行了保存,不过我们也可以自己对用户的identifier保存,之后使用会比较方便。到这里就可以进行腾讯云通信IM的使用了。

首先将云通信IM的SDK下载下来,之后将相关的jar包倒入到项目中即可,这一块在文档的概述中有详细介绍:
https://cloud.tencent.com/document/product/269/9227

在使用云通信的相关服务之前,需要先对云通信服务进行配置,这里的配置建议在Application中进行:

 //app_id
    public static final int SDK_APP_ID = 你自己的appid;
    //account_type
    public static final int ACCOUNT_TYPE = ;
    //TIMManager实例
    private TIMManager timManager;

初始化TIMManager:

 //初始化IMSDK
        TIMSdkConfig config = new TIMSdkConfig(SDK_APP_ID)
                .enableCrashReport(false)
                .enableLogPrint(true)
                .setLogLevel(TIMLogLevel.DEBUG)
                .setLogPath(Environment.getExternalStorageDirectory().getPath() + "/justfortest/");

        TIMManager.getInstance().init(this,config);
        if (MsfSdkUtils.isMainProcess(this)) {
            TIMManager.getInstance().setOfflinePushListener(new TIMOfflinePushListener() {
                @Override
                public void handleNotification(TIMOfflinePushNotification timOfflinePushNotification) {
                    timOfflinePushNotification.doNotify(getInstance(), R.mipmap.ic_launcher);
                }
            });
        }

这里仍然是根据文档给出的配置就可以了。

云通信的相关服务配置好之后就可以使用了,但是在用户登录之前还要载入用户自定义的配置:用户的配置就是对消息的配置,好友的配置,关系链的配置,群组的配置等,我这里做了一个activity的基类,对于一些比较重要的回调(例如有新消息的回调)在activity的基类中做了监听。

public void setLoginBeforeConfig(){
        TIMUserConfig userConfig = new TIMUserConfig();
        userConfig.setFriendshipSettings(new TIMFriendshipSettings());//资料关系链拉取字段
        userConfig.setUserStatusListener(baseActivity);//用户状态变更需要实时监听
        //设置连接状态
        userConfig.setConnectionListener(new TIMConnListener() {
            @Override
            public void onConnected() {
                LogUtils.LogI("已经连接");
                baseActivity.showToast("连接成功");
            }

            @Override
            public void onDisconnected(int i, String s) {
                LogUtils.LogI("连接失败:"+i+","+s);
                baseActivity.showToast("连接失败:"+i+","+s);
            }

            @Override
            public void onWifiNeedAuth(String s) {
                LogUtils.LogI("当前wifi需要验证:"+s);
            }
        });
        //群组事件监听暂时不需要
        //设置会话刷新
        userConfig.setRefreshListener(new TIMRefreshListener() {
            @Override
            public void onRefresh() {
                LogUtils.LogI("正在刷新");
            }

            @Override
            public void onRefreshConversation(List<TIMConversation> list) {
                LogUtils.LogI("刷新完成:"+list.size());
            }
        });

        TIMUserConfigMsgExt userMsgConfig = new TIMUserConfigMsgExt(userConfig);
        userMsgConfig.setMessageReceiptListener(new TIMMessageReceiptListener() {
            @Override
            public void onRecvReceipt(List<TIMMessageReceipt> list) {

            }
        });
        userMsgConfig.setMessageRevokedListener(new TIMMessageRevokedListener() {
            @Override
            public void onMessageRevoked(TIMMessageLocator timMessageLocator) {

            }
        });
        //启用消息存储
        userMsgConfig.enableStorage(true);
        //启用消息已读回执
        userMsgConfig.enableReadReceipt(true);
        //资料关系链扩展用户配置
        TIMUserConfigSnsExt userSnsConfig = new TIMUserConfigSnsExt(userMsgConfig);
        userSnsConfig.enableFriendshipStorage(true);
        userSnsConfig.setFriendshipProxyListener(baseActivity);
        //群组管理扩展用户配置不做监听
        //将用户配置与通讯管理器绑定
        //新消息监听
        TIMManager.getInstance().addMessageListener(new EventMessage());
        TIMManager.getInstance().setUserConfig(userSnsConfig);
    }

到这里相关配置就完了,用户就可以通过在TLS中获取的sign登录到云通信服务器了,之后的操作都在官方文档里面做了很详细的说明,可以直接查看文档。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值