基于IM实现直播礼物效果

来源:互联网 发布:linux reboot后起不来 编辑:程序博客网 时间:2024/06/02 12:41

项目已经上线。更新

(改:由于项目直播还未上线,确保保密性,暂时只提供部分源码,只是简单技术交流,为大家做自己做直播刷礼物提供一个简单思路。)

首先,想要实现直播礼物效果,只有即时通讯,其他方法暂时没有想到,我们基于IM至少有两种方法来实现效果。

即时通讯可以选择,融云,网易,腾讯,融云和腾讯的即时通讯是免费的(对用户量有要求,小公司足够了)

建议用腾讯吧,毕竟做了这么多年通讯,效果还是应该问题,利于后期支撑,融云通讯开始收费了,以前免费的

我这里用的是网易的,他发信息的次数有限制,好像是200次/分钟,大于这个就会自动屏蔽该用户的消息,不过也足够了。

第一种:网易的IM提供发送文字,发送图片,发送文件功能·····如图:

这里写图片描述

我们可以在直播房间发送任何你想发送的东西,然后调用相关接口,实现接收,不过类似的这种东西需要归档和解档处理,网易是这样做的

这里用到的是归档操作,想了解归档请看这里

http://blog.csdn.net/xoxo_x/article/details/53313850

这里写图片描述

大家可以参考一下,在你处理的时候需要根据消息的类型type分类,有一丢丢麻烦,我没有这样做。

然而,归档是必须的,虽然自定义字符串,作为识别,很方便,但是,从长远来讲,归档是必须的,因为,自定义字符串识别,有太多的冗余字段,维护起来并不方便,希望大家不要贪图一时麻烦,当然,如果对于高并发要求不高的就无所谓了

第二种方法:我是这样做的,我对发送礼物,添加一个特殊加密字段,然后发送文本信息,组群用户接收到之后会判断处理,当文本信息为礼物字段时,进行拦截,然后代码进行操作,实现UI变化,一定要拦截到信息,否则用户在聊天界面会收到,该加密的特殊字符串,那么老板就哭了。部分代码如下:

因为收费的原因,即使你知道了特殊字段的含义,然而并没有什么用,后台会进行用户金钱验证,没有钱,扣费不成功依旧发不出礼物

这里写图片描述

关于本地礼物动画是怎么写的,网上有很多Demo,一会儿我会提供给大家一个demo链接

礼物效果也不是那么简单,需要用到线程的分配,你需要处理高的并发下的收到的大量信息,是如何井条有序的显示在屏幕上的,这点需要点功底,我这里会给大家一个非常不错的demo。

那么整个消息的发送,,接收,,显示情况是如何进行的?

首先,你需要自己写一个礼物的presentBar,用collectiobview来写,这个不固定,设置点击事件在点击事件中,出发sendmessage操作,如果使用特殊加密字段。那么你给每一个礼物添加一个特殊的字符串就好了,然后sendMessage操作,发送的是一个文本信息。

礼物的展示列表最好用collectionview写,各大直播平台用的应该也是,i简单方便

然后自己写一个代理,在直播页面调用:

这里写图片描述
效果图如下:

这里写图片描述

这时候网易的IM内部的方法就有用了,我们用的是他的IM,他哟一个IM的包,header中包含这方法。
当我们发送消息时,他会调用如下方法:
首先,

这里写图片描述

在这个操作中,我们需要更新本地的UI,需要做一次拦截工作。
然后,他会依次调用

这里写图片描述

  • (void)onRecvMessages:(NSArray *)messages;;;;

在这个方法中我们收到消息,操作拦截,然后使用线程处理礼物信息,具体一点,还需要在这里处理礼物的模型,将模型信息储存到数组,然后,添加线程,线程在礼物Demo中已经封装好,大家不用担心,这样UI就处理完毕。

备注:是因为代理写错了,不是线程的问题

最后附上礼物效果图!

这里写图片描述

重点:礼物效果动画,并非我写,希望大家支持原创
关于这个礼物动画,涉及到了帧动画,以及自动释放池,写的相当牛逼,效果虽然一般,但是不会卡。
https://github.com/chenzhenJG/PresentAnimation

有人问我扣费在哪里进行?

答:这个需要在服务器进行,在本地肯定是不行的,需要保证用户数据的立即同步,否则会有风险,就像程序中加锁一样,不嗯能够用户在这个设备的钱花没了,另一个设备还有呢!

此外,我还想说一句,就是要注意高内聚低耦合,冗余代码要控制好,多自定义,不要在一个类中写几千行代码,后期维护累死你

1 0