作者:钱唐
从何而来
来到 2021 年,5G 从 2019 年商用那刻起,算是「元年」了 3 年。随着 Android 10/11 两个版本的迭代,iPhone12 以及 iOS14 的呈现,挪动蜂窝网络的最大群体总算开始幻想照进事实,尽管 5G 自身针对「手机」用户现阶段带来的晋升并不是 3G->4G 那样的肉眼可见,并且这一代的冲破从现阶段看也不仅只是做给手机用户的,从 2019 年到明天,仍然还是那一句“时延”“带宽”在寻找新的业务场景和赛道。
代码滚滚,App 的开发码工们带着他们的历史包袱,迎接这新技术、新硬件的到来,这里打算聊聊 5G 来了后,“传统”的挪动利用开发中的坑。
现状
Changing world never stops changing. 如下现状仅截止文章更新工夫点。
现状 1:用户看到手机 5G 图标不代表他用的肯定是 5G
用户看到 NR/5G 标记不代表以后用的肯定是「开发同学」认为的 5G-NR。
对于最终用户的体感,看到信号栏上呈现了 5G/5G+/NR 的时候,就认为 5G 来了。然而放在大背景下,这个图标的显示其实隐匿了一系列技术边界问题:
- NR+NSA 是 5G 不?要不要辨别 SA 和 NSA 来显示?
- 笼罩有余或者功率考量下,是否须要实在的频繁更新状态?
这类问题通信界的大神和运营商、设施商商业巨匠都把排列组合思考进去,整体来看针对在 5G 相干的通信设施中,如果你的手机反对 NR 的状况下,你接入的网络如果是 5G-SA 组网模式,妥妥的显示 5G。针对 NSA 则可能碰到的类型如下,这边对立搬运下:
基于上述的可能性,终端显示是否 5G 的状况,目前国内的配置依据各大运营商定制的需要,以后 5G 图标的显示策略主推 “D+A” 计划:
- 在 闲暇态(没有数据业务的状态,例如:待机)应用“D 计划”;
- 在 连贯态(有数据业务应用的状态,例如:看视频、聊微信、待机后盾在下载文件等)应用“A 计划”;
计划具体逻辑介绍如下:
如果进一步深究,这个是基于什么标准和规范做的?一句话总结:3GPP 规范参考 + 政府法规的根底上,运营商落地对应配置文件,终端设备读取配置展现。如果有趣味的能够参考这篇文章详解国内运营商以后配置的细节:「5G 图标显示策略」援用[2]
现状 2:Android 开发者没有间接获取 5G_NSA 的状态
基于现状 1,咱们晓得当用户看到 5G 标记的状况略简单,然而作为利用开发者,咱其实不 care 它的复杂度,只有咱们的代码能跟着用户界面的变动去变动就行,反正咱跑的是代码不怕变动多。然而,坏消息是咱还没法获取真正的排列组合……
支付宝网络终端团队,2018 年起始终在追踪 AOSP 仓库中针对 NewRadio 相干的适配反对,在国内最早的华为手机反对 5G 空口时,Android- 9 自身有 5G 相干的网络类型状态 -TelephonyManager#NETWORK_TYPE_NR,然而对于这个枚举的一系列变动,也能发现 Google 外部对于 5G 网络类型的适配工作中直至今日尚不明确,譬如:
1、直至 2020 年 10 月才增加明确正文,NETWORK_TYPE_NR 指的是 NR_SA,如果是 NR_NSA, 对不起,TelephoneManger 会通知你是 LTE。
https://android.googlesource….
@@ -2802,7 +2802,11 @@
/** Current network is LTE_CA {@hide} */
@UnsupportedAppUsage
public static final int NETWORK_TYPE_LTE_CA = TelephonyProtoEnums.NETWORK_TYPE_LTE_CA; // = 19.
/** Current network is NR(New Radio) 5G. */
/**
* Current network is NR (New Radio) 5G.
* This will only be returned for 5G SA.
* For 5G NSA, the network type will be {@link #NETWORK_TYPE_LTE}.
*/
2、NETWORK_TYPE_NR 算什么?TelephonyManger.getNetworkClass()接口摇摆不定
2018 年底,咱们就在 AOSP group 中针对 NETWORK_TYPE_NR 在网络类型分类接口中的未适配给 Google 提了 issue。Android-10 的两头版本针对这个问题修复适配上了: public static final int NETWORK_CLASS_5_G = 4,例如 Android_10_r38 援用[3]。
然而在后续的版本中,这个类型分类又移除了,例如 Android_10_r47 援用[4]。
甚至 2020 年 3 月的 master,这个暗藏办法间接被删除了。
基于相似的改变,意味着,当一款 Android 设施在公布的时刻,他援用的理论 release 分支中带入的 TelephonManger 对于 NETWORK_TYPE_NR 的网络类型归类,在零碎中可能是 4G,可能是 UNKNOWN,可能是 5G。
小结下现状 2 上述的剖析,对于开发者而言:
- 用户看到 5G,然而你代码看不到;
- 你拿到了 SA 的 NR 标,NETWORK_TYPE_NR,然而你反射零碎的分类,通知你可能是 3 个答案。
现状 3:iOS14 对于 5G 标识的反对还不错,然而 …
Android 因为反对 5G 比拟早,加上机器碎片度高,不免呈现各种不适。iOS 平台自从 iOS14 起开始反对 5G 且设施间接基于 iPhone12 开始反对。零碎中增加了这两个常量:
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyNRNSA API_AVAILABLE(ios(14.0)) API_UNAVAILABLE(macos);\
CORETELEPHONY_EXTERN NSString * const CTRadioAccessTechnologyNR API_AVAILABLE(ios(14.0)) API_UNAVAILABLE(macos);
通过适配 Reachability 库,iOS14 上可能辨别 NSA 和 SA 的 5G,棒棒的!
不过,你在 iOS14.2 上试试?灰度过程中发现局部闪退的场景,揣测是局部运行时提供的常量在设施中不存在。14.3 目前看妥妥的!
影响和解法
用户侧手机 5G 趋势
毫无疑问,5G 即便再搞几个元年,对于用户生态的浸透是毫无疑问的,从支付宝网络技术的雷达上看,我国 2021 年 1 月上旬,SA 网络部署速度显著放慢,目前曾经「高」达 5‰的拜访 PV 比例,上月同期仅彷徨在 1‰。
如果你要问我 NSA 的占比如何,请仔细阅读前文:
倡议与解法
无奈提供用户感知统一的网络服务
产品设计层面,须要充分考虑以后挪动 App 底层零碎、用户设施的上述现状,针对须要做「5Gxxx 性能」时,确保用户的认知 5G 状态和咱们的服务一致性。防止「为什么我在 5G 网络,然而 xxx 性能没失效」的问题。
短期内,利用生态或者也不会有这类述求?
根底网络框架收口复杂度
业务开发须要理解上述差别,然而更好设计还是在网络根底 SDK 层面提供接口屏蔽,防止间接应用零碎接口甚至反射调用暗藏的接口。
上述适配目前停留在纯正的零碎接口包装类型,针对「我就是想针对 Android NSA 也要能辨认」,目前网上也有各路大神针对不同的厂商提供的各种暗藏接口提供封装。假若将来真的有强的此类需要,咱们也可能会须要做相似的摸索。同时也欢送大家提供贵重倡议和优良的计划。
继续察看
回到文首,真正针对 5G 行业对于网络的关注,其实不应该仅仅局限于手机 App 的开发自身,还是须要继续关注新技术背地的新接入架构、利用场景等等。然而随着运营商一直推动,首当其冲的 App 们,咱们真的筹备好了吗?\
欢送大家一起探讨 5G 高大上背地的各种理论痛处,排雷扫雪,先让用户们用的开心,用的无感。
援用资源
[1] https://zhuanlan.zhihu.com/p/…\
[2]https://mp.weixin.qq.com/s/CH…\
[3]http://aosp.opersys.com/xref/…\
[4]http://aosp.opersys.com/xref/…\
[5]https://android.googlesource….
关注咱们,每周 3 篇挪动技术实际 & 干货给你思考!