【经验分享】SDK状态机:2.3.2版本前后异常掉线逻辑处理

当AgoraSDK迭代到2.3.2版本以后,SDK的状态管理更加规范。用户可以通过getConnectionState方法主动查询SDK所处的实时状态,SDK状态变化也会通过onConnectionStateChanged( ConnectionState State, Char* Reason )及时反馈给应用,这样极大地提高应用对每次通话全生命周期管理的方便性。

但是新用户对SDK状态理解不是很深入,实际应用场景中经常产生一些问题。为了帮助用户更好地理解新版本SDK的状态机,我将个人的理解沉淀如下图,跟大家共同讨论。

SDK2.3.2引擎状态"State Machine"转换如下:

SDK2.3.2引擎状态"Reason Machine"转换如下:

SDK2.3.2以前版本异常掉线处理逻辑:

SDK2.3.2版本异常掉线处理逻辑:

SDK2.3.2异常掉线用户常见问题及解决方案如下:

另外,使用声网SDK最常使用的功能就是加入频道和离开频道,但是joinChannel过程对一些开发者而言是一个BlackBox,开发者不了解加入频道会做哪些操作,也不清楚这些操作容易出现哪些问题,应该如何从应用层面预处理潜在的隐患。

因此某些开发者在代码中调用joinChannel后往往默认加入频道成功,不会考虑客户端弱网或者其他可能失败的因素,这样最终用户有的时候加入频道失败,但是由于没有收到任何提示,以为加入频道成功,但却出现无声以及黑屏的问题。

从实践出发,为大家介绍joinChannel的过程,开发者遇到的常见问题,以及应用层面的预处理建议。抛砖引玉,希望跟大家一起学习讨论,如有理解不准确之处,还希望大家多多指点。

加入频道过程图解:

加入频道时的常见问题:

Native端E2E传输过程示意图:

Web端E2E传输过程示意图:

3赞