如何在App中实现IM功能之六快速实现群聊的高级功能——箭扣科技Arrownock

如何在App中实现IM功能

之六

快速实现群聊的高级功能

 

本文通过利用anSocial的Circle API实现群聊的高级功能(如群组身份、群成员匿名发言等)

 

实现方式:

将Circle与anIM的Topic结合:当我们创建群组得到topicId以后,我们同时往Arrownock的服务器创建一个Circle来保存该群组属性。

    Map<String, Object> params = new HashMap<String, Object>();
    params.put("name", topicName);
    params.put("user_id", topicOwner);// 群主的AnSocialuser_id
    params.put("user_ids", user_ids);// 所有群成员的AnSocialuser_id,用","分割
    Map<String, String> customFields = new HashMap<String, String>();
    customFields.put("topicId", topicId);// AnIM创建群组得到的topicId
    params.put("custom_fields", customFields);
    anSocial.sendRequest("circles/create.json",AnSocialMethod.POST, 
        params, new IAnSocialCallback() {
        @Override
        public void onSuccess(JSONObject response) {
        // TODO onSuccess
            String circleId=response.getJSONObject("response")
                        .getJSONObject("circle").getString("id");
        }
        @Override
        public void onFailure(JSONObject response) {
            // TODO onFailure
        }
    });

对于anIM的其他api,Circle也有相应的接口来实现,比如添加成员方法:

    //Circle添加群成员
    Map<String, Object> params = new HashMap<String, Object>();
    // 创建Circle时得到的circleId
    params.put("circle_id", circleId);
    // 新成员的AnSocialuser_id,多个user用","分割
    params.put("add_user_ids", user_ids);
    anSocial.sendRequest("circles/update.json", AnSocialMethod.POST, 
        params, new IAnSocialCallback() {
        @Override
        public void onSuccess(JSONObject response) {
            // TODO onSuccess
        }
        @Override
        public void onFailure(JSONObject response) {
            // TODO onFailure
        }
    });

其他API不一一举例,大家可以上Arrownock的官方文档网站上查询:http://docs.arrownock.com/

群组等级功能的实现方式:

创建Circle的customFields中添加一个等级的属性:customFields.put("topicLevel", 1);这个属性的修改调用circles/update.json API即可,根据多种情况,如群主主动升级,群成员扩充到一定数量时自动升级等等。

 

群成员匿名发言的实现方式:

我们在这里分两种情况实现:

1.群组本身就是匿名发言群

如同实现群组等级一样,在customFields中添加一个是否为匿名的标识位即可:customFields.put("isHideName", 1);群成员发言后,接收用户根据Circle的该标识位判断是显示用户的名称,还是显示匿名。

2.由用户选择是否匿名

首先我们需要在anSocial的User customFields中保存一个属性用来表示该用户哪些群组是匿名发言:customFields.put("hideNameCircleIds", circleIds);//表示哪些群组是匿名发言群成员发言时,首先判断用户当前发言的群组是否在需要匿名发言群组里,如果是,那么需要调用sendMessageToTopic(topicId,message, customData);方法,将当前用户匿名的标识位放入customData属性中,接收消息的用户根据该标识位,界面上不再显示发言用户的名称,而是用匿名代替。

在社交App的使用中,群组聊天是社交功能里一个常用的场景。而群组我们又会把它分为两种形式:

1.讨论组形式(只能实现基本聊天功能)。

2.进阶群组形式(可以实现匿名、身份等功能)。

本文我们将为大家带来如何利用anSocial的circle实现完整的群聊功能。

 

讨论组形式定义:

实现多人聊天场景,无其他特殊功能(如:群成员昵称、群主、匿名等)。


具体实现方式:


anIM实现群组聊天

    //创建群组,传入群组名称和群组成员clientId
    anIM.createTopic("topicName", clientIds);
    //添加删除成员
    anIM.addClientsToTopic(topicId, clientIds);
    anIM.removeClientsFromTopic(topicId, clientIds);
    //移除群组
    anIM.removeTopic(topicId);


进阶群组形式定义:

可实现匿名、群组成员身份、更改群名称、添加或删除群组成员的进阶群聊场景。

具体实现方式:

利用createCircle,将多个用户组合到一起组成一个circle,对于特殊的群组属性,可以放到circle的customFields中,示例如下:

    //组装createCircle的参数
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("user_id", user_id);//群主
    params.put("user_ids", user_ids);//群成员,以","分割
    Map<String, String> customFields = new HashMap<String, String>();
    customFields.put("topicId", topicId);//将anIM创建topic返回的topicId传入
    customFields.put("specialField1", specialField1);
    customFields.put("specialField2", specialField2);
    params.put("custom_fields", customFields);//群组的特殊属性
    //创建circle
    anSocial.sendRequest("circles/create.json", AnSocialMethod.POST, 
        params, new IAnSocialCallback() {
        @Override
        public void onSuccess(JSONObject response) {
        }

        @Override
        public void onFailure(JSONObject response) {
        }
   });

对于添加成员,删除成员可以调用updateCircle来进行修改,对于删除群组可以用deleteCircle

提示:

circle额外提供了父子结构供大家使用,详情可以参考

http://docs.arrownock.com/docs/ansocial/circle/create

 

如何在App中实现IM功能系列文章:

之一离线消息常见浅析

之二快速实现离线消息模块

之三快速实现离线消息推送模块

之四创建稳健的消息发送模块

之五快速实现图片接收和发送

之六快速实现群聊的高级功能

之七快速实现聊天列表排序模块

 



  • 15
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值