热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于融云的好友关系实现

好友关系是社交IM中非常重要的一个模块,一般意义上的理解即是成为好友关系以后。才能进行聊天沟通但是对于融云来说只要你给了的userid,我知道了对方的userid就跟

好友关系是社交 IM 中 非常重要的一个模块, 一般意义上的理解即是成为好友关系以后。才能进行聊天沟通  但是对于融云来说 只要你给了的 userid , 我知道了对方的 userid 就跟跟对方 发起聊天也就是发起会话。 我们不妨点击来参考一下 bob 的讲解好友关系的博客  你的 App 怎么去定义好友关系  就看 你和你的 server 怎么去维护这个关系 和 userid 了 下面我会通过 app 实例给大家讲解一下好友关系的实现


一 : 实例展示 



gif 无法预览的同学请点击右边链接 : 这边不得不吐槽一下涛哥的平台,我上传的gif才1.7MB就死活上传不上去.辛苦大家点我


下面对这个动图做一下讲解 

1 我们首先可以清晰的看到 两个端的的用户信息 然后我点击了好友 目前可以清晰的看到现在好友列表里面的是空的没有一个好友数据

2 接下来 我点击了社交 社交里面有个 添加好友 我输入 shenzhen  模糊查询出了两个好友点击我们正在登陆的 shenzhen 添加好友 输入我需要添加的好友信息 shenzhen ni hao

3 这个时候重点来了 beijing 给 shenzhen 发送好友请求同意后 我们可见 验证消息上面的 未读消息小红点出现了 我们点击进去 看到 beijing 申请添加我为好友了

4 此时我们来看看 beijieng 端的 验证消息模块里面 有什么变化 第一次是展示的 请求添加 也就是我申请添加发出去了 等待对方响应 当 shenzhen 点击同意添加以后 此时我再 下拉刷新了 我发出去的 申请添加状态编程了 已添加 目前应该算是整个好友添加以及被同意的完整流程走完了

5 我们再来点击 好友列表  发现两个端彼此的好友列表里面都有了对方 其实整个好友列表 item 下面就是藏了一个 userid 点击后 会调用 stratPrivatechat 这就是所谓的 怎么控制 userid 的出现来维护和实现好友关系

6 最后我们再来看会话列表 会话列表 此时也收到了服务端发来的同意对方成为好友的消息 以及我添加对方时候的验证消息  

注: 好友关系是非常灵活的 建议大家不要盲目被上面的概念固定死了思维 也可以自己有更好的方式去实现, 用目前的接口实现的好友关系 没有立即拒绝添加  只有 同意添加 和 默认不处理 如果你的产品需求有立即拒绝添加 这个需要你和你的后台看怎么去设计接口了


二 : 代码实现

相信大家看了上面的 gif 和 1-6 点的概念 脑海里面已经比较清楚好友关系的实现了  方便大家理解得更加深刻 这边再对代码 和 接口做一下梳理(接口为 Demo server的 接口) 自己的 App 应该有自己的接口


http://webim.demo.rong.io/ request_friend

请求方式:POST
参数:(Integer $id  String message)
返回成功json:

{"code":200}

{"code":304,"message":"unknow error"}

应该必须有个请求加对方为好友的接口 当然搜索查询用户的接口肯定也得有 上面的代码片段是请求加对方为好友 我们再来看看接收到 这个好友申请的时候 服务端做了什么事

服务端有个 好友列表  

http://webim.demo.rong.io/get_friend

请求方式:GET
参数:
返回成功json:
//status : 1 好友, 2 请求添加, 3 请求被添加, 4 请求被拒绝, 5 我被对方删除

{
    "code": 200,
    "result": [
        {
            "id": "6754",
            "email": "yangpan@feinno.com",
            "username": "Ariel@iPhone",
            "portrait": "http://www.gravatar.com/avatar/3f56d1043edd4b9657c465ac7a507067?s=82",
            "status": "1"
        },
        {
            "id": "19237",
            "email": "18919026893@163.com",
            "username": "hahajaj",
            "portrait": "http://www.gravatar.com/avatar/6405153265d25fd4b6dccfacf0fe410c?s=82",
            "status": "1"
        }
    ]
}

这里主要看维护的状态的变化  当你发起 添加对方的好友申请以后 服务端 好友表的 status 这个字段有就有值了 目前是在两个端看到的是不一样 请求端是 请求添加 接收到这个被添加的请求端的 状态是 请求被添加  此时服务端还做了一件事 发了一个 添加好友的消息(这里的消息为融云内置消息) 给被请求好友端 被请求好友端 收到这个消息(接收消息的监听) 去刷新好友列表的 status 状态

1

 @Override
    public boolean onReceived(Message message, int i) {
        MessageContent messageCOntent= message.getContent();
        if (messageContent instanceof ContactNotificationMessage) {
            BroadcastManager.getInstance(mContext).sendBroadcast(FRIEND_MESSAGE);
        }

上面的代码片段是接收消息的监听 收到 服务端推来的好友消息后 发送一个广播去通知刷新好友列表 在上面的 gif 图当中也就是点开验证消息后的界面


http://webim.demo.rong.io/process_request_friend

请求方式:POST
参数:(Integer $id, Boolean $is_access)
O false 不接收
1 true接收
返回成功json:

{"code":200}
{"code":111,"message":"credential is error"}
{"code":306,"message":"unknow error"}

上面的 接口也有是当我收到对方加我为好友的消息后 在服务端存储的状态为 3 也就是请求被添加时候使用的 这个时候 我可以发个请求同意对方添加我为好友 去改变服务端 存储的 status 这个时候状态的 1 也就是你们互相为好友关系了 其实说白了也就是 我请求 和 被请求都是去即使的查询服务端存储的好友关系的 status 如果为 1 我们就把对方的 userid 

做成一个 好友实体 展示在好友列表了 


好了 ,相信你此时如果认真仔细的研读了上面的 gif 图片和 和 概念 还有接口代码 , 我相信好友关系的实现对你来说并不是难事了!

相关资料提供:

笔者演示 gif 的开源项目地址 : https://github.com/13120241790/Seal 欢迎 star or fork 

融云 Demo server 地址:https://github.com/rongcloud/demo-server-php


推荐阅读
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • uniapp开发H5解决跨域问题的两种代理方法
    本文介绍了uniapp开发H5解决跨域问题的两种代理方法,分别是在manifest.json文件和vue.config.js文件中设置代理。通过设置代理根域名和配置路径别名,可以实现H5页面的跨域访问。同时还介绍了如何开启内网穿透,让外网的人可以访问到本地调试的H5页面。 ... [详细]
author-avatar
May蕊心
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有