分享两个Android权限 (WAKE_LOCK和allowBackup) 引起的问题
问题1:
QA反馈,Android手机上,游戏在运行过程中,按下锁屏键,再按返回,为何没有出现锁屏页或是密码输入页,而是直接回到游戏中?
原因及解决方案:
按下锁屏键后,系统会进入“休眠”的状态,这时候再按下锁屏键,返回到系统,这里会涉及到两个界面,分别叫keyguard(锁屏页)和bouncer(密码输入页)
正常的流程是,如果我们设计了密码保护,那么会先回到keyguard,再回到bouncer,让用户输入密码并进入系统.
在我们的游戏中,锁屏返回后,直接回到游戏,逻辑上也是成立的,但实测中,如果游戏涉及到含有广告的地方,可能会对逻辑产生一定的影响,比如出现了在返回观看广告的过程中,弹出了密码框,或是回到游戏中,某些业务逻辑不正常等等.
锁屏直接回到游戏的原因是在AndroidManifest.xml中配置了WAKE_LOCK权限:
<uses-permission android:name="android.permission.WAKE_LOCK" />
删除即可。
问题2.
QA反馈,Android手机卸载游戏客户端,重新安装,为何之前的存档数据还在?(存档并没有做服务器同步)
unity forum中也有提问:
https://forum.unity.com/threads/playerprefs-persist-in-android-device-after-app-uninstall.590062/
原因及解决方案:
游戏分为单人模式和多人模式,多人模式是经过服务器同步的,单人游戏的数据是存放在本地,使用Unity的PlayerPrefs存储,所以,当我卸载客户端的时候,单机游戏的数据肯定是
要随程序包一起被clear掉的
起初碰到这个问题感觉很匪夷所思,因为单机游戏的数据,存放在了不同的几个key中,有的key已经被clear掉,有的key的数据还依然存在
最后排查发现,也是AndroidManifest中,开启了allowBackup:
<application>
android:allowBackup="true"
....
</application>
在API 8以后,谷歌为用户提供了应用程序数据备份和恢复的功能。
此功能的开关决定于该应用程序中AndroidManifest.xml文件中的allowBackup属性值[1] ,其属性值默认是true。当allowBackup标志为true时,用户即可通过adb backup和adb restore来进行对应用数据的备份和恢复,这可能会带来一定的安全风险。
开启allowBackup是很危险的,一些第三方的检测工具会给出安全警告,甚至会有被盗号等风险,具体可以参考下面这篇文章:
https://blog.csdn.net/qq_31387043/article/details/51452782
直接在AndroidManifest.xml中直接设置allowBackup=false是不对的
具体修改如下:
tools:replace="android:allowBackup"
android:allowBackup="false"
感谢您的阅读, 如文中有误,欢迎指正,共同提高
欢迎关注我的技术分享的微信公众号,Paddtoning帕丁顿熊,期待和您的交流