声明:此博客仅为个人学习记录使用。
最近无聊时浏览了一下各大招聘网站发现,招聘要求上都有写到有im经验或者是集成过融云环信的经验。
这里博主特意去了解一下XMPP协议以及使用OpenFire服务器搭建了简易的即时聊天demo下面是地址有兴趣的朋友可以看看,不喜勿喷哈,有建议或意见都可以留言相互交流。
XMPP博客地址
集成步骤融云官网都有,这里是本人根据个人集成的激励做一个记录,获取大家也有可能碰到的。
废话不多说,进入整体,首先登陆融云官网注册一个账号那是不用说的登陆融云官网
注册好以后可以先看看官网的文档和一些功能的相关介绍。也可以下载一个融云的demo自己跑跑,感受一下融云的功能,这里就不多介绍了。
这里下载好SDK后有这些内容。
这里现在做简单集成,只需要IMLib即可。
这里到这一步选择好后直接finish,导入IMLib以后可能你使用的编译环境的版本和这个会有所不同,需要大家自己去设置了。还有就是编译工具的版本要大于21
在您集成融云 SDK 前环境要求如下:
这里来自融云官方提示:
Android SDK Build-tools 请升级到 21 及以上版本。
JAVA 编译版本 JDK 1.7 及以上版本。
使用 IMKit 需要 Android Support V4 21 及以上版本。
刚刚我们下载好的sdk文件中有一个这个目录
点击进去后
这两个copy到项目APP的libs目录下
其中MiPush是小米的推送不用的话可以不添加,接下来就是目录:PushLib\pushDaemon下的libs下的个平台的的so文件都copy到libs下。如下图:
接下来就是目录:PushLib\pushDaemon\executable下的so文件夹全部拷贝到到项目app moudle下的main文件夹下的assets目录下,AndroidStudio下是没有这个文件夹的大家自己建一个放进去就行。
做到这里接下来就是配置我们的 build.gradle了,如下是我的gradle中的代码大家注意
注意:这里要注意的是,sourceSets下的配置要配对否则会报加载so的异常。
还有就是这里我集成了IMKit,这里是一些关于Im界面的包,这里只是说连接到融云,可以先不集成进去。
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion '25.0.0'
defaultConfig {
applicationId "com.itnb.rongclouddemo"
minSdkVersion 9
targetSdkVersion 19
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
ndk {
abiFilters "armeabi-v7a", "x86"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets {
main {
jni.srcDirs = []
jniLibs.srcDirs = ['libs']
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:23.0.1'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
testCompile 'junit:junit:4.12'
compile project(':IMKit')
compile project(':IMLib')
}
接下来就是配置我们App下的AndroidMainFest.xml文件了。
首先是添加一些权限,在这里本人偷懒,把下载的融云demo里的权限直接copy过来了,大家根据自己需要去添加哈。
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 获取机型信息权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
<!-- 查看 Wi-Fi 状态 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 查看网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CAMERA" />
<!-- 录音 -->
<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_SETTINGS" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
<!--获取联系人信息,demo中演示发送通讯录消息-->
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
接下来是添加一些固定的设置如下图:
其中标签meta-data 下的 Value的值是你在融云注册的账号创建项目的appkey。
接下来就是在你的项目中创建一个Application
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
RongIM.init(this);//初始化融云
}
}
-------------------------------------------------------------------------------------
融云提示:
关于初始化的注意事项
融云的 SDK 使用了跨进程机制来进行通信,运行后您的 App 后您会发现以下三个进程: 1、您的应用进程;2、您的应用进程: ipc,这是融云的通信进程;3、io.rong.push,这是融云的推送进程。
您可以在任意进程使用 RongIM,我们推荐初次集成的用户在主进程使用。
接下来是链接了
/**
* <p>连接服务器,在整个应用程序全局,只需要调用一次,需在 {@link #init(Context)} 之后调用。</p>
* <p>如果调用此接口遇到连接失败,SDK 会自动启动重连机制进行最多10次重连,分别是1, 2, 4, 8, 16, 32, 64, 128, 256, 512秒后。
* 在这之后如果仍没有连接成功,还会在当检测到设备网络状态变化时再次进行重连。</p>
*
* @param token 从服务端获取的用户身份令牌(Token)。
* @param callback 连接回调。
* @return RongIM 客户端核心类的实例。
*/
private void connect(String token) {
if (getApplicationInfo().packageName.equals(App.getCurProcessName(getApplicationContext()))) {
RongIM.connect(token, new RongIMClient.ConnectCallback() {
/**
* Token 错误。可以从下面两点检查 1. Token 是否过期,如果过期您需要向 App Server 重新请求一个新的 Token
* 2. token 对应的 appKey 和工程里设置的 appKey 是否一致
*/
@Override
public void onTokenIncorrect() {
}
/**
* 连接融云成功
* @param userid 当前 token 对应的用户 id
*/
@Override
public void onSuccess(String userid) {
Log.d("LoginActivity", "--onSuccess" + userid);
startActivity(new Intent(LoginActivity.this, MainActivity.class));
finish();
}
/**
* 连接融云失败
* @param errorCode 错误码,可到官网 查看错误码对应的注释
*/
@Override
public void onError(RongIMClient.ErrorCode errorCode) {
}
});
}
}
其中的getCurProcessName这个方法代码如下:
public static String getCurProcessName(Context applicationContext) {
ActivityManager activityManager = (ActivityManager) applicationContext.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> runningApps = activityManager.getRunningAppProcesses();
if (runningApps == null) {
return null;
}
int pid = android.os.Process.myPid();
for (ActivityManager.RunningAppProcessInfo procInfo : runningApps) {
if (procInfo.pid == pid) {
return procInfo.processName;
}
}
return null;
}
这里的connect方法需要一个Token,这里的话可以在你的融云上创建的项目中获取
在你的项目中调用connect方法传入token,这里没有根据官方的提示做请求因为这里只是为了记录连接服务器。一切步骤从简。
然后运行你的项目。
在logcat中看到此条日志表示你已经成功集成了融云Sdk并链接成功。这只是第一步当人,使用融云开发im肯定不止这些,本人会奋力挖掘下面的内容,整理成blog帮助那些可能和我犯过同样问题的亲们。未完待续,么么哒…