美文网首页
Bmob即时通讯服务快速集成指南

Bmob即时通讯服务快速集成指南

作者: 天神Deity | 来源:发表于2017-07-29 15:14 被阅读153次

    依赖配置

    在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:

       <meta-data
            android:name="Bmob_APP_KEY"
            android:value="Bmob平台的Application ID" />
    

    注:Bmob_APP_KEY 必须填写,否则无法正常使用IM服务。

    2、 添加权限

        <!--网络权限 -->
        <uses-permission android:name="android.permission.INTERNET" />
        <!-- 监听网络的变化 -->
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
        <!-- 设备休眠 -->
        <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" />
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
        <!--摄像头-->
        <uses-permission android:name="android.permission.CAMERA" />
        <!--录音-->
        <uses-permission android:name="android.permission.RECORD_AUDIO" />
        <!--通知震动-->
        <uses-permission android:name="android.permission.VIBRATE" />
    

    3、 添加Service、receiver标签:

      <receiver android:name="cn.bmob.newim.core.ConnectChangeReceiver" >
            <intent-filter>
                <action android:name="cn.bmob.action.RECONNECT" />
                <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
                <action android:name="android.intent.action.BOOT_COMPLETED" />
                <action android:name="android.intent.action.USER_PRESENT" />
            </intent-filter>
      </receiver>
      <service
        android:name="cn.bmob.newim.core.service.BmobIMService"
        android:process=":bmobcore" />
      <service
        android:name="cn.bmob.newim.core.service.NotifyService"
        android:process=":bmobcore" />
      <service android:name="cn.bmob.newim.core.service.ReConnectService" />
      <service android:name="cn.bmob.newim.core.service.HeartBeatService" />
    

    注:自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();
    

    相关文章

      网友评论

          本文标题:Bmob即时通讯服务快速集成指南

          本文链接:https://www.haomeiwen.com/subject/wdqclxtx.html