最近在写的安卓APP中需要加入用户聊天功能,于是在网上搜了一下第三方的聊天API,发现了两款免费的:极光IM 和爱萌IM。还在纠结试用哪款的时候,发现极光IM的API文档怎么都打不开,很开心地从纠结中break了。
在爱萌官网上下了Android SDK和demo。 Demo把核心功能都演示了:单聊,群聊,和客服聊,注册登录,一键登录,等等。不过功能太多不便直接移植到我的项目中。我需要的功能是一键登录(在后台自动为用户注册)和单聊,所以参考demo和API文档,从零开始写。
搭建环境
- 导包
1.1 将libs
包中的IMSDK_1.3.9.jar
包导入libs文件加下
1.2 在src/main路径下新建jniLibs文件夹,将libs
包中的其他包导入
1.3 将res
包中的内容复制到res文件夹下
注意,要把anim
文件夹中的两个xml放到drawable
文件夹中,不然会报错
1.2 在build.gradle
中的dependencies
中加入
compile files('libs/IMSDK_1.3.9.jar')
- 在AndroidManifest.xml中添加权限
<!-- 允许程序打开网络套接字权限 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 保持屏幕常亮所需权限 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- 读取手机联系人信息所需权限 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 向SD卡写入文件所需权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 读取SD卡状态所需权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- 读取或更改系统设置 所需权限 -->
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<!-- 手机震动所需权限 -->
<uses-permission android:name="android.permission.VIBRATE" />
<!-- 创建和删除文件所需权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<!-- 查询网络状态的权限 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 调用系统窗口所需权限 -->
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<!-- 用户定位所需权限 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
<!-- 相机的权限 -->
<uses-permission android:name="android.permission.CAMERA" />
<!-- 允许程序修改全局音频设置 比如说:存储位置 -->
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<!-- 录制语音权限 -->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
- 获取appKey
3.1在爱萌官网上注册,登陆
3.2创建新应用, 填写包名(包名是AndroidManifest.xml中的package name)
3.3创建好了就可以获得appKey了
编写代码
- 初始化SDK
创建MyApplication
类,在onCreate()
方法中初始化SDK
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
// 初始化IMSDK
// 在Application类onCreate()方法中,设置applicationContext和appKey
IMSDK.init(getApplicationContext(),"你的appKey");
}
}
记得把AndroidManifest.xml
中的application:name改为.MyApplication'
- 复制粘贴4个Activity和它需要的资源文件
- 在测试的Activity中编写登陆和启动聊天页面的代码
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// 系统自动注册imsdk账号
// 登录成功后,可通过IMMyself.getCustomUserID()、IMMyself.getPassword() 获取登录用户名和密码
IMMyself.login(true, 5, new OnActionListener() {
@Override
public void onSuccess() {
Toast.makeText(StartChatActivity.this, "一键登录成功", Toast.LENGTH_SHORT).show();
Intent intent = new Intent(StartChatActivity.this, ChatActivity.class);
intent.putExtra("CustomUserID", "IMMyself.getCustomUserID()");
startActivity(intent);
}
@Override
public void onFailure(String s) {
if (s.equals("Timeout")) {
s = "一键登录超时";
} else if (s.equals("Wrong Password")) {
s = "密码错误";
}
Toast.makeText(StartChatActivity.this, s, Toast.LENGTH_SHORT).show();
}
}) ;
这样一个简单的聊天功能就实现啦! 不过测试的时候还是出了一些问题,有的手机好像不支持。一登录就闪退。做demo还可以,所以如果想用在实际项目中,还