集成阶段
这一阶段我们不必详细说明,因为融云官网给我们的SDK文档相当详细顺着他的步骤即可。
使用阶段
融云初始化
public class App extends Application{
@Override
public void onCreate() {
super.onCreate();
//初始化融云
RongIM.init(this);
}
}
在mainactivity中连接融云,注意测试阶段可以简单的使用融云的测试token连接
//kris 这个token为融云调试token 真正项目中一般会在登录接口中给你返回token 替换即可
String token = "/J0eHW43mJdYDJg+0gKKZPRTe2GHWU4uO8Hvo+MUDHW6IduhjEa5yInXxsWDUOk5GH9WTfGOBnqoqulyj8HViQ==";
RongIM.connect(token, new RongIMClient.ConnectCallback() {
@Override
public void onSuccess(String userId) {
Log.e("MainActivity", "——onSuccess—-" + userId);
Toast.makeText(MainActivity.this,"用户id"+userId,Toast.LENGTH_SHORT).show();
}
@Override
public void onError(RongIMClient.ErrorCode errorCode) {
Log.e("MainActivity", "——onError—-" + errorCode);
}
@Override
public void onTokenIncorrect() {
//Connect Token 失效的状态处理,需要重新获取 Token
}
});
/**
* 启动单聊
* context - 应用上下文。
* targetUserId - 要与之聊天的用户 Id。
* title - 聊天的标题,如果传入空值,则默认显示与之聊天的用户名称。
*/
if (RongIM.getInstance() != null) {
RongIM.getInstance().startPrivateChat(MainActivity.this, "1234", "");
}
/**
* 启动群组聊天界面。
*
* @param context 应用上下文。
* @param targetGroupId 要聊天的群组 Id。
* @param title 聊天的标题。开发者需要在聊天界面通过intent.getData().getQueryParameter("title")获取该值, 再手动设置为聊天界面的标题。
*/
// if ( RongIM.getInstance()!=null) {
// //发起群聊天
// RongIM.getInstance().startGroupChat(mActivity, groupID, groupName);
// }else{
// Tip.tipshort(mActivity,"群聊内容为空");
// }
此时,我们就开始运行程序检测token是否连接融云成功,如果你使用的是Android7.0手机的话你会发现怎么都不能发送消息。然后,在顺着SDK文档找上一遍发现还是没有问题呀,为什么会出现这个问题呢,然后详细看了日志会提示这样一个错误
java.lang.UnsatisfiedLinkError: dlopen failed: library “libsqlite.so” not found
at java.lang.Runtime.load0(Runtime.java:897)
at java.lang.System.load(System.java:1505)
at com.getkeepsafe.relinker.SystemLibraryLoader.loadPath(SystemLibraryLoader.java:29)
at com.getkeepsafe.relinker.ReLinkerInstance.loadLibraryInternal(ReLinkerInstance.java:200)
at com.getkeepsafe.relinker.ReLinkerInstance.loadLibrary(ReLinkerInstance.java:140)
at com.getkeepsafe.relinker.ReLinker.loadLibrary(ReLinker.java:70)
at com.getkeepsafe.relinker.ReLinker.loadLibrary(ReLinker.java:51)
at io.rong.imlib.NativeObject.(NativeObject.java:13)
at io.rong.imlib.NativeClient.init(NativeClient.java:157)
at io.rong.imlib.LibHandlerStub.init(LibHandlerStub.java:50)
at io.rong.imlib.IHandler$Stub.onTransact(IHandler.java:52)
at android.os.Binder.execTransact(Binder.java:565)
libsqlite.so文件找不见了,好勒,差啥我们就干啥,libsqlite.so下载
好了接下来你可能觉得可以了,那到未必。如果你的buildToolsVersion低于26的话问题就是如下了,为啥会报这样的错呢?(已经更新到26的话可以忽略这一步)
Process: com.zontonec.ztteacher, PID: 26682
java.lang.NoClassDefFoundError: Failed resolution of: Lio/rong/push/PushService;
at io.rong.push.RongPushClient.init(RongPushClient.java:146)
at io.rong.imlib.RongIMClient.initSDK(RongIMClient.java:451)
at io.rong.imlib.RongIMClient.init(RongIMClient.java:481)
at io.rong.imkit.RongIM.initSDK(RongIM.java:155)
at io.rong.imkit.RongIM.init(RongIM.java:209)
at com.zontonec.ztteacher.App.onCreate(App.java:66)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1028)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5720)
at android.app.ActivityThread.-wrap2(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1637)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:156)
at android.app.ActivityThread.main(ActivityThread.java:6585)
at java.lang.reflect.Method.invoke(Native Method)
融云 Android SDK 在 2.8.25-Dev 这个版本就对对 Android 8.0 做了适配。
所有项目出错了,因此,对于IMKIT下面的依赖版本一定要大于26以上才能保证正常使用
在升级到 2.8.25-Dev 版本以上时,
需要注意:SDK 中用到了 Support Library 中的比较新的 API,因此在升级 SDK 的时候,需要将工程
项目的 gradle 文件中的 Support Library 依赖升级到 26.0.0 以后,在 IMKit 中 gradle 文件中添加以下代码:
dependencies {
compile 'com.android.support:support-v4:26.1.0'
}
如果工程中其他的module也用到了 Support Library 相关的库,也需要同步升级到 26.0.0 版本以上;
相应的,compileSdkVersion 和 buildToolsVersion 也需要同步升级到 26.0.0 以上的版本:
compileSdkVersion 26
buildToolsVersion '26.0.2'
另外,如果您工程的 build.gradle 里没有配置对谷歌 marven 仓库的依赖,也需要添加上。如下图所示:
repositories {
jcenter()
mavenCentral()
maven {
url 'https://maven.google.com/'