分享两个Android权限 (WAKE_LOCK和allowBackup) 引起的问题

发表于2019-03-22
评论5 4.6k浏览

问题1:


QA反馈,Android手机上,游戏在运行过程中,按下锁屏键,再按返回,为何没有出现锁屏页或是密码输入页,而是直接回到游戏中?


原因及解决方案:


按下锁屏键后,系统会进入“休眠”的状态,这时候再按下锁屏键,返回到系统,这里会涉及到两个界面,分别叫keyguard(锁屏页)和bouncer(密码输入页)




正常的流程是,如果我们设计了密码保护,那么会先回到keyguard,再回到bouncer,让用户输入密码并进入系统.


在我们的游戏中,锁屏返回后,直接回到游戏,逻辑上也是成立的,但实测中,如果游戏涉及到含有广告的地方,可能会对逻辑产生一定的影响,比如出现了在返回观看广告的过程中,弹出了密码框,或是回到游戏中,某些业务逻辑不正常等等.


锁屏直接回到游戏的原因是在AndroidManifest.xml中配置了WAKE_LOCK权限:


 <uses-permission android:name="android.permission.WAKE_LOCK" />


删除即可。


通常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"


-----周末愉快 2019.3.22

感谢您的阅读, 如文中有误,欢迎指正,共同提高 


欢迎关注我的技术分享的微信公众号,Paddtoning帕丁顿熊,期待和您的交流





如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引