依赖配置
在Project的build.gradle中添加如下内容:
buildscript {
....
allprojects {
repositories {
jcenter()
//Bmob的maven仓库地址,必须填写
maven { url "https://raw.github.com/bmob/bmob-android-sdk/master" }
}
....
}
在app的build.gradle文件中添加compile依赖文件
dependencies {
....
//bmob-im:自2.0.5开始提供aar格式:包含BmobNewIM_xxxx.jar、androidasync_2.1.6.jar、 bmob_im_notification_strings.xml
compile 'cn.bmob.android:bmob-im:2.0.5@aar'
//bmob-sdk:3.4.7 IM服务使用BmobSDK的 BmobFile 用于图片、语音等文件消息的发送,因此必须导入特定版本的BmobSDK。
compile 'cn.bmob.android:bmob-sdk:3.4.7-aar'
}
配置AndroidManifest.xml
1、 添加Bmob_APP_KEY:
注:Bmob_APP_KEY 必须填写,否则无法正常使用IM服务。
2、 添加权限
3、 添加Service、receiver标签:
注:自v2.0.5版本开始,将原来的BmobImService名称更换为'BmobIMService',请务必修改,否则将无法正常使用IM服务。
注册消息接收器
如果你使用的是NewIM_V2.0.2以后(包含v2.0.2)的SDK版本,那么你需要自定义消息接收器继承自BmobIMMessageHandler来处理服务器发来的消息和离线消息。
public class DemoMessageHandler extends BmobIMMessageHandler{
@Override
public void onMessageReceive(final MessageEvent event) {
//当接收到服务器发来的消息时,此方法被调用
}
@Override
public void onOfflineReceive(final OfflineMessageEvent event) {
//每次调用connect方法时会查询一次离线消息,如果有,此方法会被调用
}
}
别忘记在Application的onCreate方法中注册这个DemoMessageHandler:
public class BmobIMApplication extends Application{
@Override
public void onCreate() {
super.onCreate();
//NewIM初始化
BmobIM.init(this);
//注册消息接收器
BmobIM.registerDefaultMessageHandler(new DemoMessageHandler(this));
}
}
初始化
在Application的onCreate方法中调用BmobIM.init(context)
public class BmobIMApplication extends Application{
@Override
public void onCreate() {
super.onCreate();
//只有主进程运行的时候才需要初始化
if (getApplicationInfo().packageName.equals(getMyProcessName())){
//im初始化
BmobIM.init(this);
//注册消息接收器
BmobIM.registerDefaultMessageHandler(new DemoMessageHandler(this));
}
}
/**
* 获取当前运行的进程名
* @return
*/
public static String getMyProcessName() {
try {
File file = new File("/proc/" + android.os.Process.myPid() + "/" + "cmdline");
BufferedReader mBufferedReader = new BufferedReader(new FileReader(file));
String processName = mBufferedReader.readLine().trim();
mBufferedReader.close();
return processName;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
注:
初始化方法包含了BmobSDK的初始化步骤,故无需再初始化BmobSDK
在初始化的时候,最好做下判断:只有主进程运行的时候才开始初始化,避免资源浪费。
服务器连接
连接服务器:
User user = BmobUser.getCurrentUser(context,User.class);
BmobIM.connect(user.getObjectId(), new ConnectListener() {
@Override
public void done(String uid, BmobException e) {
if (e == null) {
Logger.i("connect success");
} else {
Logger.e(e.getErrorCode() + "/" + e.getMessage());
}
}
});
注:
调用connect方法,需要传入一个唯一的用户标示clientId,Demo使用的是Bmob的用户登录系统。
断开连接:
BmobIM.getInstance().disConnect();