起因
项目上线之后,接到一些玩家反馈,在登录界面点击没有响应,无法登陆的。小米,魅族等应用商店上的差评也大多集中于此:
心里一万只草泥马在奔腾!!!
排查问题

首先,排查逻辑代码,找出是谁写的代码,大概会被拿去祭天吧!然而并没有,逻辑代码并没有问题。

然后,搜索相关的信息,也没什么有用的信息,直到无意中在Unity论坛中看到这篇文章: https://forum.unity.com/threads/5-6-1p2-breaks-touch-input.474030/
心态崩了,竟然是Unity3d的锅,如果最近有Unite,我觉得拿一只锅去参会!!!
Unity在某个版本为了解决按键劫持的问题,进行了一次改动:
(900191) - Android: Dropped obscured touch events to prevent tapjacking.
这个改动实在太不起眼,根本没有引起多少人的重视,然而影响却实在是爆炸!
当运行游戏时,一些全屏透明的app在后台运行,会被Unity3d判断为按键劫持,从而丢弃了按键事件。
典型的应用:
语音助手,如小米平台的小爱助手
调整屏幕亮度app,如google play下载量较大的Screen Dimmer
定位&解决
首先定位到unity3d的5.6.1升级到5.6.2解决了这个问题,由于表现是在unity3d逻辑之外就丢弃了按键事件,推测unity3d可能是在java层进行了修改。于是安装5.6.1和5.6.2并导出UnityPlayerActivity.java文件进行比对,差异比较中发现只有一个文件有差异:

如果drop按键事件就是这几行代码,那么这就是罪魁祸首了,王同学为了保险起见,在5.6.1版本下制作了unity安装包,并利用两份不同的UnityPlayerActivity.java,分别制作了安装包,安装到手机上,结果按钮依然无法点击。那么便证明了推断改动在java中是错误的,又做了无用功。
那么如何解决这个问题?只有升级版本这条路了。
1.开发组成员说以下三个版本及相应更新的版本已经移除了防止按键劫持的修改: Anti tapjack measures removed in: 5.5.4p2, 5.6.2p2, 2017.1.0f3  
由于我们使用的版本是5.4.5p4,而项目已经上线,上述的3个版本都至少跨越了一个大版本,我们并不敢轻易升级。后来无意中发现5.4.6f3也移除了防止按键移除的修改。
所以目前所知是四个版本及后续版本修复了该问题:5.4.6f3,5.5.4p2, 5.6.2p2, 2017.1.0f3 
2.去吐槽开发小哥吧!看帖子[ https://forum.unity.com/threads/5-6-1p2-breaks-touch-input.474030/]里外国人吐槽起来真是毫不留情

后记

这个问题本身很简单,排查起来却相当费时,如果其他团队能在上线前发现这个问题,处境就会主动地多,不会面临类似我们上线之后内心崩溃的状况。最后,希望大家都能做出好玩的游戏!

Unity3d防止按键劫持导致无法响应点击事件相关推荐

  1. 设置TextView下划线并响应点击事件(SpannableString)

    下面是一个20行的完整Demo代码:基本原理是使用一个SpannableString并设置其ClickableSpan来响应点击事件. TextView useInfo = (TextView) fi ...

  2. 控件不响应点击事件解决办法

    以前,我们判断控件是否被点击是根据它的坐标及尺寸判断的. 不过,在WP/SL中,是否被点击了还要增加一个判断依据,那就是这里是否有内容. 所以,有时我们的控件死活就是不响应点击事件,原因就在这里,点击 ...

  3. 如何让Toast响应点击事件等基础Android基础文章N篇

    Toast 响应点击事件 import java.lang.reflect.Field; import android.content.Context; import android.util.Log ...

  4. Android EditText 如何不可编辑又可以响应点击事件

    设置EditText不可编辑可能有人会想到用setEnable方法,但是设置了setEnable(false)之后,EditText的点击事件就不可以响应了. 如果我们想让EditText不可编辑又能 ...

  5. LinearLayout获取焦点并响应点击事件监听

    LinearLayout控件 <LinearLayoutandroid:id="@+id/gj_recruit"android:layout_width="matc ...

  6. aspx.net响应点击事件(页面button的onclick事件)

    aspx.net响应点击事件(页面button的onclick事件) aspx.net制作网页还是比较简单的,直接动态网页并且连接数据库都是so easy首先在页面代码片: <form id=& ...

  7. android 点击跳过,android开发里跳过的坑——button不响应点击事件

    昨天遇到一个头疼的问题,在手机上按钮事件都很正常,但是在平板上(横屏显示的状态),button点击事件不响应,代码简化如下: public class Test extends Activity im ...

  8. Android EditText中插入图片并响应点击事件

    EditText中插入图片基本就是两种方法: 1,通过Html.fromHtml(..)来实现[mw_shl_code=java,true]eText.append(Html.fromHtml(&qu ...

  9. 安卓java浮层不响应点击事件,Android悬浮窗屏蔽悬浮窗外部所有的点击事件的实例代码...

    Android可以在所有应用上方添加View,就是给WindowManager添加一个View,在创建的View的时候可以给这个View设置LayoutParams(android.view.Wind ...

最新文章

  1. 各类常见的网站检查工具
  2. 利用vue进行页面滚动监听,上拉刷新
  3. 深圳大学计算机课程表2018,深圳大学国际交流学院2017—2018学年第1学期本科生课程表...
  4. Android studio 创建kotlin工程
  5. webmagic抓取实例
  6. 8 SD配置-企业结构-分配-给公司代码分配销售组织
  7. vue 根据for循环变量值设置子容器的样式
  8. 最近见了几位东半球的顶级技术大拿
  9. 2016年Esri技术公开课全年资料分享
  10. three.js 坐标系、camera位置属性、点、线、面
  11. 删除文件部分内容 php,php实现遍历目录并删除指定文件中指定内容_php技巧
  12. Postman安装使用
  13. 全网首发:WINDOWS某些文件夹,提供管理员权限后也无法删除,正确解决办法
  14. Atitit 软件理论方面的书籍 目录 1. 计算机科学分为计算机理论和计算机应用。 计算机基础理论包含以下几部分: 2 1.1. ( 1) 程序理论( 程序逻辑、程序正确性验证、形式开发方法等
  15. python题目58:工厂流水线调度
  16. 使用Apache FtpServer搭建FTP服务器 [FlashFXP]
  17. Python开发的第一步:利用Python开发一个桌面小程序
  18. 三亚科技创新创业大赛完美落幕,珈和科技等五个企业获一等奖
  19. 计算机毕业设计Java宠物收养管理系统(源码+系统+mysql数据库+lw文档)
  20. 使用AWS的python库boto3调用ec2服务

热门文章

  1. 免费商城源码PHP类英文商城系统cms相对好的有哪些
  2. JAVA基础测试企业面试题
  3. 关于对掘金和csdn的认识
  4. 大数据Hadoop之——新一代流式数据湖平台 Apache Hudi
  5. 防蓝光眼镜有必要买吗?
  6. VASP计算笔记_声子谱计算
  7. 100baseT,1000baseX,1000baseTX,1000baseFX - 扫盲
  8. Citrix NetScaler
  9. 中国区域分流域NASADEM
  10. Windows 命令行终端可以使用滑轮上下滚动