解决Facebook Instant Games小游戏gamepad报错

最近公司有几款游戏在Facebook Instant Games平台上,都因报同一个错误而无法进入游戏,这些游戏中有Cocos Creator的项目,也有Unity的项目。

从错误中可以看出,是Navigator.getGamepads()的调用被Facebook的权限策略阻止了。

Navigator.getGamepads() 是一个 Web API 方法,用于返回一个包含当前连接的游戏手柄信息的数组。每个手柄可以通过索引访问,提供按钮和轴的状态信息。

原因

这个是Facebook Instant Games游戏页面的HTTP响应头的权限策略。

Permissions-Policy: gamepad=(self) 这个设置表示只有在相同的源(即和页面拥有相同协议、域名和端口的脚本)中才允许使用 Gamepad API。这是一种安全措施,用以限制可能来自不同源的脚本访问敏感或影响用户体验的功能。

简单来说,这意味着只有来自与当前网页相同源的脚本才能访问 Navigator.getGamepads() 方法。如果尝试从其他源的脚本访问此功能,将会受到限制。

临时解决方案

Cocos Creator项目:

Unity项目:

上面两张截图gamepad的调用都是在引擎初始化的时候,由引擎底层调用,因此为了能在Facebook Instant Games上正常运行,一个解决方案就是在引擎初始化之前将navigator.getGamepads设置为null,就可以避免navigator.getGamepads的调用,当然这个只是临时方案,想要完全解决这个问题,只能由引擎公司来修正,比如开放一个手柄的开关,或者在打包的时候,可以将游戏手柄模块从引擎中裁切掉。

引擎版本适用范围

Cocos Creator 3.6.1开始为了更好的支持XR, 增加了对游戏手柄的支持,因此3.6.1以上的游戏想上架到Facebook Instant Games平台上,需要禁用navigator.getGamepads的调用

至于Unity的项目,我不是很清楚具体是从哪个版本开始支持游戏手柄,从公司上架的项目来看,2020.3.46f1c1以上的版本,都需要禁用navigator.getGamepads的调用

相关推荐
烧仙草奶茶1 个月前
【cocos creator】2.x里,使用3D射线碰撞检测
3d·cocos creator·cocos-creator·2.x
仅此而已7292 个月前
Cocos Creator倒计时
游戏引擎·cocos creator
仅此而已7292 个月前
cocosUI多分辨率适配
游戏引擎·cocos creator·多分辩率适配
SilenceJude2 个月前
cocos creator 3学习记录01——如何替换图片
前端·cocos creator
GrimRaider3 个月前
[Cocos Creator] v3.8开发知识点记录(持续更新)
开发·cocos creator
S_clifftop4 个月前
cocos creator如何使用cryptojs加解密(及引入方法)
cocos creator·加密解密·cryptojs
平淡风云4 个月前
cocosCreator获取手机剪切板内容
java·智能手机·typescript·android studio·cocos creator
zhenmu4 个月前
【cocos creator 3.x】 修改builtin-unlit 加了一个类似流光显示的mask参数
cocos creator·shader·effect
Thomas_YXQ4 个月前
Cocos Creator 编辑器的数据绑定详解
编辑器·游戏引擎·cocos creator·cocos2d·cocos·微信小游戏
Thomas_YXQ5 个月前
Cocos Creator 3D物理引擎的碰撞检测与触发器详解
游戏·3d·cocos creator·cocos2d·cocos