隐私常见问题排查 - MiEcosystem/miot-plugin-sdk GitHub Wiki
1 云端隐私逻辑与适配介绍
先查看开发者文档,了解背景知识:开发者文档:集成云端隐私
云端隐私弹窗的基本逻辑
- 插件框架SDK根据本地记录以及云端记录,决定是否需要弹出云端隐私弹窗。
- 本地记录存储在手机上,云端记录存储的服务器上。有本地记录的情况下,不会去获取云端记录。
- 只要有其中一个记录,则不会弹出云端隐私弹窗。在没有本地记录与云端记录的情况下,需要弹出云端隐私弹窗。
- 在需要弹出云端隐私弹窗的情况下,SDK会通过网络请求,获取对应云端隐私链接,弹出云端隐私弹窗,并展示云端隐私的链接。
- 如果网络请求没有获取到符合要求的数据,则不会弹出云端隐私弹窗。
- 弹出过隐私弹窗,如果需要再次弹出,需要在此手机上删除设备。如果不删除设备且之前同意过(无论是否在其他设备上被重新绑定),都无法弹出
本地记录与云端记录的保存与清除
- 保存本地记录:用户点击云端隐私弹窗的同意按钮;没有本地记录,但是有云端记录的情况下,会保存本地记录。
- 清除本地记录:卸载App、解绑设备或清除所有数据(该项仅Android适用)
- 保存云端记录:用户点击云端隐私弹窗的同意按钮
- 清除云端记录:解绑设备
插件代码需要去掉过时Api调用以及插件中本地隐私文件,使用PrivacyEvent监听获取在线隐私同意状态
插件使用云端隐私之后,需要去掉插件代码中原有本地隐私相关的逻辑。其中包括
- alertLegalInformationAuthorization
- openPrivacyLicense
- previewLegalInformationAuthorization
- privacyAndProtocolReview
- batchGetDeviceDatas([{ did: Device.deviceID, props: ["prop.s_auth_config"] }])
- CommonSetting中本地隐私的配置项
共享设备
- 共享设备也支持弹出云端隐私弹窗
- 共享设备也是根据本地记录以及云端记录决定是否云端隐私弹窗,没有特殊逻辑
- 共享设备和主设备(暂且这么称呼)共用同一份云端记录。也就是说,某一方点击云端隐私弹窗的同意按钮之后,就会保存云端记录,另一方也能够读取到。另外,如果读取到了云端记录,在没有本地记录的情况下会保存本地记录,下次进入插件则读取本地记录即可,不用读取云端记录。
云端隐私更新弹窗
- 在设备有本地记录,且平台上有配置云端隐私变更版本的前提下,如果本地记录的版本小于云端变更版本,则会弹云端隐私更新弹窗。
- 云端隐私更新弹窗与普通云端隐私弹窗的区别在于,云端隐私更新弹窗会显示变更内容。
2 云端隐私弹窗常见问题
问题1 云端隐私弹窗无法弹出
1. 检查平台配置以及插件代码是否去掉了本地隐私弹窗的调用
先检查在iot开发者平台上,指定插件版本,是否已经正确配置云端隐私。如果已经配置,其状态是否为上线。非上线状态的云端隐私,只有白名单用户可以获取到。
2. 确定是否android、iOS两端都有问题
3. 检查是否有本地记录或者云端记录
在已经正确配置云端隐私的情况下,为了避免本地记录或云端记录的干扰,可以通过解绑设备的方式,清除该手机上的本地记录以及云端记录。(注意,这种方式并不能清除其它手机上,该设备的本地记录)在清除记录之后,再次进入插件,查看是否有云端隐私弹窗。
4. 抓包查看获取云端隐私链接的接口的返回情况(手机操作过程记得录屏)
如果清除本地与云端记录之后,依然无法弹出云端隐私弹窗,则通过抓包方式排查。
服务端链接:https://api.io.mi.com/app/v2/plugin/get_protocol
抓包教程:Android端抓包 iOS端抓包
SDK会向get_protocol接口发起4个网络请求,对应type_int含义为:1. 隐私政策 2.用户协议 3. 用户体验计划 4.儿童保护规则
注意:
- 线上release包不支持抓包,需要使用开发包,即调试环境
- 抓包之前打开明文传输的开关
- 可以通过Charles的Sequence -> Filter进行过滤,例如:
5. 如果type_int为1的请求,返回的数据异常,则可能服务端存在问题,可以将提工单到服务端,并附上抓包文件与录屏文件。
6. 若服务端返回结果正常,则在米家App中提交反馈日志,提工单到米家App,并在工单中说明问题复现时间,所在地区、用户id,抓包文件与录屏文件。
问题2 云端隐私弹窗只有隐私政策,没有用户协议
例如:
1. 检查平台配置
查看iot平台上,是否正确配置用户协议链接
2. 确定是否android、iOS两端都有问题
3. 抓包查看获取用户协议链接的接口的返回情况(手机操作过程记得录屏)
参照问题1中第4步,此时type_int为2
4. 如果type_int为2的请求,返回的数据异常,则可能服务端存在问题,可以将提工单到服务端,并附上抓包文件与录屏文件。
5. 若服务端返回结果正常,则在米家App中提交反馈日志反馈,提工单到米家App,并在工单中说明问题复现时间,所在地区、用户id,抓包文件与录屏文件。
问题3 点击隐私链接或者其它链接,跳转之后显示为空白
1.进入之后显示全空白并无任何提示
- 抓包查看plugin/get_protocol接口返回情况 抓包查看获取云端隐私链接的接口的返回情况
- 如果对应type_int的url为空,需要找后台排查
- 如果对应的url不为空,确认下是否Android、IOS都存在问题
问题4 云端隐私弹窗弹出异常,不符合预期
-
从7.3(SDK 10066)版本开始,Android端支持在开发者模式下,将云端隐私状态显示出来,方便定位问题。
-
前置条件是打开“开发模式”以及“进入插件是否Toast云端隐私信息”的开关(路径为 我的-开发者选项-开发者模式, 具体如下图所示)。
-
开发者在打开这两个开关以后,进入插件,会出现如下弹窗。将弹窗内容录屏或者截屏后,附在工单中。
设置--更多设置-- 法律信息常见问题
问题1 点击法律信息提示"获取不到隐私,请检查手机网络或联系米家反馈问题"
提示该问题是因为没有拿到隐私链接,出现该问题需要以下步骤排查
- 先检查插件隐私是属于本地隐私还是云端隐私
- 本地隐私需要自查本地隐私文件是否存在
- 云端隐私需要参考第2条关于《2.云端隐私弹窗常见问题》步骤进行排查 云端隐私排查步骤
问题2 点击隐私链接或者其它链接,跳转之后显示为空白
问题3 pdf下载
1.PDF导出字体出现断裂
导出PDF方案
采用WebView的createPrintDocumentAdapter创建文档打印器,进行pdf导出。
出现问题原因
WebView进行分页时无法识别文字或者图片,又无可以设置的参数,因此会出现字体断裂情况。现在没有统一的处理方案应对所有厂商不同类型、内容的隐私协议文件
解决建议
厂商自行对出现断裂上方或者下方加些空格,慢慢调整文件内容。PDF支持导出是合规性问题,字体出现断裂是体验问题,如果问题影响不严重也可以等后续看看有没有更好的导出方案。 或者开发者有更好的导出方案欢迎提供。
2.PDF点击导出后提示“文件损坏”
进入手机目录Documents/external目录查看导出的pdf文件,使用其他阅读器是否正常。如果其他阅读器打开正常,那说明是选择默认的阅读器有问题
4.只显示隐私协议不显示用户协议
5.隐私政策/用户协议中超链接链接点击后无法跳转
使用米家7.2以上版本再重新验证是否还有问题