公司项目中需要进行服务器控制用户端操作
由于前期规划提出的需求,放弃了推送和WebSocket
然后转换思路使用即时通讯实现C/S,根据通话消息内容进行判断做出相应的操作
好了。不啰嗦开整。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
第一步。上官网
https://cloud.tencent.com/product/im
继续进入控制台
创建应用
创建完事下载SDK,我项目中使用的是V3
下载成功Ctrl目录Libs里的jar包,添加之后记得依赖jar包。这里需要操作一波,关于so文件
在项目的src目录下新建jniLibs目录把so文件考入
然后在app的buildgradle文件中添加
下一步AndroidManifest
添加权限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
继续添加提供的Service和Receiver
<!-- 【必须】消息收发service -->
<service
android:name="com.tencent.qalsdk.service.QalService"
android:exported="true"
android:process=":QALSERVICE" >
</service>
<service
android:name="com.tencent.qalsdk.service.QalAssistService"
android:exported="false"
android:process=":QALSERVICE" >
</service>
<!-- 【必须】 离线消息广播接收器 -->
<receiver
android:name="com.tencent.qalsdk.QALBroadcastReceiver"
android:exported="false">
<intent-filter>
<action android:name="com.tencent.qalsdk.broadcast.qal" />
</intent-filter>
</receiver>
<receiver
android:name="com.tencent.qalsdk.core.NetConnInfoCenter" android:process=":QALSERVICE">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.TIME_SET" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.TIMEZONE_CHANGED" />
</intent-filter>
<!-- ImSDK 3.0.2 后添加 -->
<intent-filter>
<action android:name="com.tencent.qalsdk.service.TASK_REMOVED" />
</intent-filter>
</receiver>
OK~ 基本工作已经完成开始根据官方文档实现功能吧
---------------------------------------------------------
https://cloud.tencent.com/document/product/269/9229
sdk第一步初始化。不是纸尿布。一瞅美滋滋,单例直接
初始化就稳妥
关于文档的细则大家可以自行阅读我这对部分主要的内容截图展示了
TIMSdkConfig config=new TIMSdkConfig(sdkid);//控制台创建应用对应的sdkid TIMManager.getInstance().init(this,config);
其他设置根据自行选择。我先完成功能
然后大家觉得应该就简单了。但是发生了我写这篇文章的重要原因。因为我没有仔细看文档的内容介绍。所以坑了小半天。
大家可以根据情况选择模式,我这使用了托管模式
直接TLS文档开始,文档中介绍的可以,直接用就可以的,文档内容自行阅读,我这直接提供一个实现方式其他的大家自行测试
String usersign; final TLSHelper tlsHelper=TLSHelper.getInstance(); tlsHelper.TLSPwdLogin("用户名", "账号".getBytes(), new TLSPwdLoginListener() {@Overridepublic void OnPwdLoginSuccess(TLSUserInfo tlsUserInfo) {Log.e("Login",tlsUserInfo.toString());usersign=tlsHelper.getUserSig(tlsUserInfo.identifier);}@Overridepublic void OnPwdLoginReaskImgcodeSuccess(byte[] bytes) {Log.e("Login",bytes.toString());}@Overridepublic void OnPwdLoginNeedImgcode(byte[] bytes, TLSErrInfo tlsErrInfo) {Log.e("Login",tlsErrInfo.toString());}@Overridepublic void OnPwdLoginFail(TLSErrInfo tlsErrInfo) {Log.e("Login",tlsErrInfo.toString());}@Overridepublic void OnPwdLoginTimeout(TLSErrInfo tlsErrInfo) {Log.e("Login",tlsErrInfo.toString());} });
我们登录需要的sign在这里面获取到了
妥了回到官方文档大家就知道我这么做是干什么了,云通信用户TIMManager登录需要userSig我们就先获取到然后继续操作
退出操作
好了到了最后一步了。给客户端添加消息监听
TIMManager.getInstance().addMessageListener(new TIMMessageListener() {@Overridepublic boolean onNewMessages(List<TIMMessage> list) {Log.e("Get Message",list.toString());for (int i=0;i<list.size();i++){msg=list.get(i);for (int j=0;j<msg.getElementCount();j++){TIMElem elem=msg.getElement(j);TIMElemType timElemType=elem.getType();if (timElemType==TIMElemType.Text){Log.e("Message",elem.toString()+"---"+timElemType);TIMTextElem timTextElem= (TIMTextElem) msg.getElement(j);Log.e("GetMessage",timTextElem.getText());if (timTextElem.getText().equals("Love")){mainHandler.removeMessages(NORMAL);startActivity(new Intent(ShowMainAct.this,ShowToLoveAct.class));}else if (timTextElem.getText().equals("Game")){mainHandler.removeMessages(NORMAL);startActivity(new Intent(ShowMainAct.this,UnityPlayerActivity.class));}}}}return false;} });
Ok,咱们通过腾讯云通信的后台测试一下,控制台找你的应用选择用户管理
在后台可以手动添加用户,给用户(android app)发送消息
后台打印获取成功,
好了到此关于腾讯云通讯登录到消息接收的内容完成了