我的上一篇博客简要的介绍了一下我对即时通讯的一些尝试,后面还介绍了通过bmob实现即时通讯的方式,上一篇主要是对我的一些经验的分享,所以我只提取了很简要的部分讲解,考虑到一些读者可能难以理解,所以为帮助读者理解,这篇博客将手把手教学。
总的步骤如下:

  • 注册并创建应用
  • 获取应用的application id
  • 导入即时通讯sdk
  • 初始化sdk
  • 连接服务器
  • 发送消息
  • 接收消息

先给大家看看效果:

android即时通讯 bmob android即时聊天_即时通讯

注册并创建应用

首先你去bmob平台注册一个开发者账号,流程很简单,不需要很严格的审查。
注册完成后,自行创建一个应用,填写的信息很简单,没有特殊要求。

获取应用的application id

点击进入应用 ->点击设置 ->查看application id 相信如图所示,复制一下这个application id 备用

android即时通讯 bmob android即时聊天_即时通讯_02

导入即时通讯sdk

对于eclipse用户来说比较麻烦,需要自行下载demo中lib包,并导入并编译。而Android Studio用户只需做两步

Step 1:

在项目中的build.gradle中的repositories{}中添加 jcenter()和

maven { url “https://raw.github.com/bmob/bmob-android-sdk/master” }

android即时通讯 bmob android即时聊天_android即时通讯 bmob_03


Step 2:

在app中的build.gradle 中添加

compile ‘cn.bmob.android:bmob-im:2.0.6@aar’

compile ‘cn.bmob.android:bmob-sdk:3.5.5’

因为两者有集成包冲突还需要加上一个

packagingOptions {
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/rxjava.properties'
}

结果如下图所示:

android即时通讯 bmob android即时聊天_android_04

初始化sdk

集成好sdk后需要配置一些东西:
首先在你项目中的manifest中注册一些receiver和service

<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" />

并配置你的密匙:
这里的application id就是前面我们获取到的

<meta-data
            android:name="Bmob_APP_KEY"
            android:value="你自己的application id" />

并配置上一些基础的权限,包括网络权限、WiFi等权限

<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.VIBRATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />

弄好了这些还需要在application中进行初始化,首先你要新建一个类集成application,

如图所示:

android即时通讯 bmob android即时聊天_bmob_05

这里面那个BmobIM.registerDefaultMessageHandler(new ImMessageHandler());是注册消息接收类,不理解没关系,等下会讲。别忘记给把application在manifest中声明。

连接服务器

一些都准备就绪,现在开始连接服务器

BmobIM.connect(et_connect_id.getText().toString(), new ConnectListener() {
                @Override
                public void done(String s, BmobException e) {
                    if (e == null){
                        isConnect = true;
                        Log.i("TAG","服务器连接成功");
                    }else {
                        Log.i("TAG",e.getMessage()+"  "+e.getErrorCode());
                    }
                }
            });

通过以上代码就可以连接服务器。et_connect_id.getText().toString()传入的是你连接服务器的标识id,作为其他用户与你通信的标识。在你需要连接服务器的时候即可调用此代码

发送消息

连接完服务器后就可以进行消息的发送了。

BmobIMUserInfo info =new BmobIMUserInfo();
                info.setAvatar("填写接收者的头像");
                info.setUserId(et_receiver_id.getText().toString());
                info.setName("填写接收者的名字");
                BmobIM.getInstance().startPrivateConversation(info, new ConversationListener() {
                    @Override
                    public void done(BmobIMConversation c, BmobException e) {
                        if(e==null){
                            isOpenConversation = true;
                            //在此跳转到聊天页面或者直接转化
                                        mBmobIMConversation=BmobIMConversation.obtain(BmobIMClient.getInstance(),c);
                            tv_message.append("发送者:"+et_message.getText().toString()+"\n");
                            BmobIMTextMessage msg =new BmobIMTextMessage();
                            msg.setContent(et_message.getText().toString());
                            mBmobIMConversation.sendMessage(msg, new MessageSendListener() {
                                @Override
                                public void done(BmobIMMessage msg, BmobException e) {
                                    if (e != null) {
                                        et_message.setText("");
                                    }else{
                                    }
                                }
                            });
                        }else{
                            Toast.makeText(MainActivity.this, "开启会话出错", Toast.LENGTH_SHORT).show();
                        }
                  }
            });

在发送消息之前必须开启一个会话,会话需要传入的参数就是接受者的id、头像、昵称。打开成功后,还需通过BmobIMConversation.obtain将会话转化后才能进行消息的发送。发送代码已贴,其中et_message.getText().toString(),及是你发送消息的内容

接收消息

虽然把消息发出去了,但是你还是无法看到或者接受其他的消息,这时候我们需要集成一个消息接收类,进行消息的接收

public class ImMessageHandler extends BmobIMMessageHandler{

    @Override
    public void onMessageReceive(MessageEvent messageEvent) {
        super.onMessageReceive(messageEvent);
        //在线消息
        MainActivity.tv_message.append("接收到:"+messageEvent.getMessage().getContent()+"\n");
    }

    @Override
    public void onOfflineReceive(OfflineMessageEvent offlineMessageEvent) {
        super.onOfflineReceive(offlineMessageEvent);
        //离线消息
    }
}

这里自己新建一个类并集成BmobIMMessageHandler,便可接收到其他人发过来的消息。两个方法,读者自行处理数据。结合前面的初始化。把那个BmobIM注册的消息接收器改为你自己新建的类即可。按照步骤过来,这个简单的即时通讯就完成了,我写的这个demo代码量很少,我是直接把bmob的官方文档的主要内容抽离了,想更深层次的学习的,请自行查看官方文档。