iOS直播间开发经验小结

536 阅读6分钟

1.房间内的信令消息应该是由后台进行分发,而不是客户端自己分发

1.1假如客户端进行分发会怎么样?

  • 客户端谁来发信令消息?
    • 按照业务上的区分逻辑。我们很容易想到如踢人禁言禁麦这种控制性信令只能由房主或管理员身份来触发。发文字消息或者发图片这种普适性信令可以由发起者触发。初看,这套逻辑没问题,但实际上,隐患很大。如下
    • 客户端存在被破解的可能性 客户端进行加密? 我拦截你的加密消息 原模原样的再发一遍呢? 那你就得校验唯一性。 只校验唯一性也有问题,还得在加上时间戳的校验。因为我们的信令消息id一般都是实时保存在内存中的,不会做本地保存。有可能被人拿杀死进程前的信息来重发一遍。【比如礼物类消息】,如果消息id做本地保存的话,也会有新的问题,时间你要保存多久?空间你要保存到多大后删除呢? 攻击者还可以不用管你的任何加密方式,直接把客户端内存值的数量进行修改,比如上报给接口数量是1个礼物,但客户端发信令消息的时候给你篡改成99个。如果客户端校验不仔细,就会有此漏洞。
  • 维护成本巨大
  • 工作量大,安卓和iOS各需要写一遍发信令的逻辑。
  • 在版本迭代中,很容易遇到信令消息字段新增,修改或者弃用的场景。如果由客户端进行维护,那需要严格保持iOS和安卓版本的一致性。而且由于安卓的新版本更新率远低于iOS,经常会有iOS为了兼容安卓的老版本,不断的发旧信令消息。
  • 线上出问题了,没办法及时做处理。 如笔者遇见过,在房间内发特殊的阿语字符,安卓房间收到后会瞬间崩溃。如果文本消息由后台进行分发,遇上此情况,就可以迅速屏蔽该字符避免崩溃。
  • 其他问题 多人抢麦,A,B,C三个客户端同时发起了抢麦,从逻辑上来讲,这三个人信令消息发出的时候,必定时间戳是不同的,有大小之分。但是其他客户端并不知道。假如真实的点击时间最早是A,其次B,最后C。很可能到达E这个客户端的顺序是B,A,C。到达F这个客户端的顺序是C,A,B。这样就引起了多台手机麦位上人员显示不一致的问题。【当时受困于客户端自己瞎搞的逻辑,折中成是先收到谁的消息,麦位就先显示谁,在一定时间内,比如5s内收到了其他的上麦消息,对比时间戳,若更早,则替换麦上的人】这样的体验并不是很好,在房间人多时,麦位上会先显示一个人,往往又会马上显示另外一个人。而如果由后台控制谁才可以上麦,则完全没有上述问题。 以上逻辑,客户端还会掺杂着时间戳问题。有恶意的用户,他可以先断网,在触发断网强制退出回调前,恢复网络,因为这时还未拉到麦位信息,所以麦位可进行点击,此时用户进行点击,并同时把手机时间戳往前调到一个合适的时间。这样无论他怎么操作,他都可以把原来的麦位进行替换掉【笔者曾遇到过的问题,大R被反复恶意下麦】。注意,这种场景下,时间戳仅在App启动时候的一次修正并不能解决任何问题。需要每次实时修正。当然,我们有更简单的判断,未拉取到数据之前,直接不允许用户进行点击操作。 为了坚持让客户端去发信令消息,我们当然还可以做以下尝试 本地客户端可以通过一些方式来增加被攻击的门槛,但是性价比低。 混淆与加固: 笔者混淆过一段时间 但有一次审核时来被苹果发现了,审核被拒,警告不允许再混淆。 安卓应用360进行加固和混淆的,据了解,一样可以被专业人士直接破解 内存保护: 增加业务复杂度,因为每当客户端发消息的时候,都需要内存比对一下信息,看是否篡改。当有正常业务逻辑触发用户信息修改的时候,还需额外同步其他地方修改。 或者应用一些其他的高级防护技术【防调试,防止反编译,代码变现,代码乱序,指令替换等】以上自己实现,工作量大,容易引起各种各样其他Bug,产出回报小。如果直接用成熟的SDK,比如爱加密,则会加大成本费用(基础版防护SDK几万起步)。
  • 以上所有问题的根源在于,客户端没有一个真实性参考平台。本地的一切信息都有可能会被造假。而将造假后的信息发送给其他客户端,很容易引起各种各样无休止的问题,客户端会陷入无尽的折磨之中,只能去被动防御。而当线上真遇到此问题时,从用户反馈到客服,客服反馈到测试,开发讨论分析,定出解决方案,到进行修改,通过测试,上架成功,用户更新。等这一系列流程走完后,最少过去三四天了,平台的口碑早就受到了影响。综上,如果一条信令消息被篡改后,可能会影响其他客户端,那么这类消息必须由后台进行分发。

2.房间锁问题

  • 房间锁,无论在什么情况下,接口都不应该直接返回锁的密码值,让客户端进行比对密码是否正确,哪怕是进行加密后的。对于密码是否正确的判断一定是由后台判断,前端只负责提交用户进入时输入的密码。
  • 房间锁,一般我们会设计成纯数字的形式。注意:当客户端采用纯数字键盘时,需要后台对阿语下的数字进行额外处理,或客户端自定义纯阿拉伯数字键盘(有的大R会不喜欢这样的键盘,他们就喜欢用自己的语言数字),或客户端本身进行阿语判断,转换为阿拉伯数字后在上传。

3.目标用户人群的定位

  • 将印度人和中东人放一起 会产生大量矛盾和文化冲突
  • 印度人喜欢一些印度特殊的礼物 比如拖鞋 会觉得很嗨
  • 阿拉伯人瞧不起印度人 觉得印度人又穷又闹