在某些情况下,即便正确使用 Magisk hide 隐藏 root 状态,Google Play 应用商店时不时也会出现搜索不到指定应用的情况,如 Netflix 官方客户端。
一番摸索之后,我在 Netflix 的 帮助中心 看到了这么一段话:
The Netflix application may be missing from the Google Play Store if your device is not Google Play Protect certified.
简单来说,那些没有经过 Google Play Protect 认证的设备在 Play 应用商店中是看不到 Netflix 的。
这里的 Google Play Protect 又叫 Play 保护机制,是一套内建于 Google Play 应用商店的应用安全防护机制,它通过 Google Play 服务框架进行更新和部署,自 2017 年面世以来每天都在守护着超过 20 亿台 Android 设备 1。
如果你的设备出厂自带了相对完整的 Google 服务框架或你通过刷入 Open GApps 的方式自行安装了 Google 服务,通过国内应用商店安装一些高风险、不符合 Play 应用商店规范的应用时,可能会看到这样一条提醒。
这就是 Play 保护机制的作用。
但问题在于,现目前很多设备即便能够正常开启 Play 保护机制,在手机为非出厂状态时(如刷机后),位于 Play 应用商店侧栏抽屉 设置
界面底部的 Play 保护机制认证也会显示 未通过认证
。
这意味着 Google Play 检测到了手机软件环境的变化并认为这样的设备已不再具备安全性,而像 Netflix 这类对版权安全要求较高的应用,自然有权根据 Play 保护机制的认证状态决定是否向用户开放下载。这也正是为什么即便我们正确设置了 Magisk hide 也可能在 Play 应用商店中看不到 Netflix 的原因。
我们该如何解决这个问题呢?
要知道,即便是 Google 自家的亲儿子(比如我手里这两台),在解锁 Bootloader 并自行刷写完整版工厂镜像后,也可能会遭遇「Play 保护机制未认证」的尴尬状况。
为了让那些出厂前已经通过了 Google 兼容性认证但机主喜欢动手折腾的 Android 设备 也能平等地享受到应有的 Play 保护机制待遇,流淌着「极客」之血的 Google 其实也为用户开了个「小灶」:GSF 设备注册。
GSF 是 Google Service Framework 的缩写,每台 Android 设备在连接到 Google Play 服务的同时都会获得一个与当前系统和 Google 账号配套的 GSF ID。这个 ID 是我们手动解锁 Play 保护机制认证的关键,获取它的方式有两种。
如果你有一定的玩机经验,在保证设备开启 USB 调试且电脑端环境配置正确的前提下,可以连接手机到电脑然后通过以下命令获取 GSF ID:
adb rootadb shell 'sqlite3 /data/data/com.google.android.gsf/databases/gservices.db "select * from main where name = \"android_id\";"'
如果你觉得手动操作太麻烦,也可以从 Play 应用商店下载 Device ID 这款应用来查看自己的 GSF ID。
获取到 GSF ID 后,我们接下来要做的就是将这个 ID 填写到 GSF 设备注册 页面的输入框并点击 REGISTER 进行注册。需要注意的是,注册前请保证该页面已经登录的 Google 账号与 Android 设备上的 Google 账号一致。
看到网页弹出注册成功的提示后,我们手动将 Play 应用商店停止运行并清除其应用数据,稍等片刻(视网络状况而定)再打开 Play 应用商店,就能在 设置
中看到「Play 保护机制已认证」的字样了(如果不成功,建议重复这一段提到的操作并重启手机)。
至此,我们就可以享受完整的 Play 保护机制了,更重要的是,搭配合理的 Magisk hide 设置和正常的 SatetyNet 状态,Netflix 这类「挑剔」的应用也会正常出现在 Play 应用商店中供我们下载和更新啦。
最后附上文中用到的 Device ID 下载。
https://play.google.com/store/apps/details?id=com.evozi.deviceid