• 即时通讯常见问题

    即时通讯常见问题

    Q:IM的开源地址是什么?
    A:
    Android:bmob-android-im-sdk
    iOS : bmob-iOS-im-sdk


    Q:为什么我的手机接收不到信息
    A:请先在Web后台配置包名或者证书。


    Q:消息推送的时候我没开启网络,在推送一段时间后再开启网络,会收到消息吗?
    A:在断网开始的一分钟内发的消息是接收不到的,因为心跳包的默认时间是一分钟,这一分钟内,服务器不认为该链接是断开的,所以消息不会保存成离线消息。


    Q:Bmob可以做群聊吗?
    A:可以利用数据实时同步来实现群聊。

    思路可以这样:

    1.创建一个群聊表,包括 群组id信息 发送人信息 聊天信息,这里可以把所有的聊天内容放进去;
    2.创建一个群组信息表,包括 群组用户列表 创建时间 群组名称等;
    3.创建一个群组信息变更表,包括 群组id信息,用一个字段记录有消息新增;

    当有人在群组中发起聊天时,首先先往群聊表中新增一条记录,然后往群组信息表更表中更新一下记录。所有群组的人都监听自己群组对应的群组信息表更表的几行。


    Q:为什么发送位置的时候定位不了
    A:
    1.如果你是直接用demo里面的bin目录下的apk的话,是不存在这个问题的。
    2.如果你是下载demo之后直接运行的话,需要去重新去百度地图官网申请key,因为demo里面的可以是和我的eclipse绑定在一起的,相信做过百度地图开发的知道这是为什么。

    Q:我想实现私信功能 应该用IM来实现吗
    A:有两种方案:
    1.使用IM实现
    2.如果私信功能对实时信要求并不是很高,那么也可以将聊天记录放在表中,并且采用定时拉取的方法。


    Q:im sdk支持群聊活着广播消息么?
    A:SDK内部暂时还没有实现群聊部分,只是在内部预留了相关的接口,方便后续开发而已。


    Q:android新版IM不支持好友管理?
    A:新版IM不同于旧版IM,不再提供与用户相关的操作了,比如登录、注册、好友管理相关的。开发者可以自行实现


    Q:用自己的key运行新版BmobIMDemo,IM通讯的各种消息的数据库表在哪?(IM即使通讯的注册数据是保存在哪里,BmobIM里面的聊天数据储存在哪个数据库

    A:目前新版IM是没有将发送的消息存储到Bmob后台的,开发者可自行选择存储,sdk的聊天消息都是本地存储的


    Q:不论对方是否为我的好友,开启聊天的方式都是BmobIM.getInstance().startPrivateConversation()吗

    意思是说好友和陌生人开启聊天的方式都是一样的?只是好友在聊天列表里方便查找?

    那陌生人的好友的区别在哪里? 可以在聊天界面的标题 设置类似qq的添加好友吗?
    A:只有会话的概念,没有好友的概念,新版的IM好友管理需要开发者自行实现。


    Q:Unity使用Android和iOS的IM的SDK,可以实现即时通讯么?
    A:Unity支持调用android和iOS和IMSDK,可以实现


    Q:Bmob Im 是采用什么协议?
    A:基于TCP的自定义协议。


    Q:新版本IM兼容老版本吗?
    A:不兼容,新版IM采用全新的协议实现。


    Q:利用数据同步功能实现群聊
    答:用数据实时同步实现群聊的思路可以这样:

    1.创建一个群聊表,包括 群组id信息 发送人信息 聊天信息,这里可以把所有的聊天内容放进去
    2.创建一个群组信息表,包括 群组用户列表 创建时间 群组名称等
    3.创建一个群组信息变更表,包括 群组id信息,用一个字段记录有消息新增

    当有人在群组中发起聊天时,首先先往群聊表中新增一条记录,然后往群组信息表更表中更新一下记录。所有群组的人都监听自己群组对应的群组信息表更表的几行。

    热心的用户实现了一个Android基于Bmob群聊功能的实现


    Q:怎样用邮箱查找用户?

    参考查找用户那部分的代码:(如果希望邮箱是唯一的话,还需要在Web后台指定email字段是唯一键)

    查询用户
    查询用户和查询普通对象一样,只需指定BmobUser类即可,如下:

    1. BmobQuery<BmobUser> query = new BmobQuery<BmobUser>();
    2. query.addWhereEqualTo("email", "heshaoyue@bmob.cn");
    3. query.findObjects(this, new FindListener<BmobUser>() {
    4. @Override
    5. public void onSuccess(List<BmobUser> object) {
    6. // TODO Auto-generated method stub
    7. //这里得到的就是用户信息
    8. toast("查询用户邮箱成功:"+object.size());
    9. }
    10. @Override
    11. public void onError(int code, String msg) {
    12. // TODO Auto-generated method stub
    13. toast("查询用户失败:"+msg);
    14. }
    15. });

    Q:关于离线消息的推送机制问题
    为什么我们离线能接受到消息呢?我们登陆的时候是不是因为服务器知道我们的帐号id再某个地方登陆了,就把消息推送到那个设备上,那么我们离线的时候下次再上线能接受到消息是怎么做到的?
    A:离线消息这个需要服务端支撑的,服务端在向特定用户(设备)下发消息的时候,会去检测下当前用户的客户端连接是否正常,如果连接已经关闭了,表明该设备下线或者处于关机状态,此时服务端会将发给该用户的所有消息凑存在一个数组中,之后在等该用户上线(重新建立连接)的时候,服务器会再将这些离线消息按照时间先后顺序依次下发给该用户。


    Q:使用了IM组件,推送怎么搞?
    A:最新版本的IM不需要再使用推送,如果需要在用户离线时使用推送功能,可以直接使用推送sdk推送内容。


    Q:为什么IM组件在有的手机上可以接受到聊天推送,有的手机上就接收不到呢?
    A:有一些定制过的机器,比如小米、魅族这些,你根据系统的情况做一下处理。


    Q:一个用户发送消息,另一个用户怎么知道他发送消息了。里面的工作原理是什么
    A:首先,两个用户对应的终端都跟Bmob服务器保持了一个心跳长连接服务,这样的话,终端和服务器端就可以双通道通讯了。

    接着,一个用户发送消息给另外一个用户,消息首先到Bmob服务器,Bmob服务器根据消息的内容体判断是发给哪个终端,然后再把消息发送下去。

    整个的工作原理就是:websocket长连接。


    Q:关于 BmobRealTimeData 的几个问题
    1.isConnected() 的返回结果是实时更新的吗?比如用户本来连接成功,但是过一会儿没有网络了,再调用该函数是不是会返回false?
    2.失去网络连接,然后又恢复网络连接后,BmobRealTimeData 实例会不会自动重连?
    3.这个是基于长连接的吗?耗电情况如何?

    A:
    1.实时的,没有网络返回false.
    2.会自动重连
    3.长连接, websocket,不会怎么耗电,你可以自行测试下


    Q:在IMSDK中如何获得用户的状态(在线,或下线,无打扰,等)
    A:可以定时(比如5分钟)更新一下用户表,这样就可以通过用户表的updatedAt和当前时间的比较,知道用户是否在线了。


    Q:BmobI’M2.0 有没有系统消息功能
    A:没有,需要用户自行扩展


    Q:发送请求添加好友,BmobIMUserInfo 是发送方,还是接收方的信息啊?
    A:发送方的信息,SDK内部已经弄好了,给别人发送消息,肯定需要接收方的信息


    Q:新版本IM是不是没有附近的人这个功能了
    A:新版IM已经不提供这样的功能了,这些功能开发者可以自行封装,新版IM采用的是全新架构,只负责消息的发送和接收,并不再提供与具体业务逻辑相关的API方法