解决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的调用

相关推荐
Scarlett11 天前
初识cocos,实现《FlappyBird》h5游戏
前端·cocos creator
VaJoy13 天前
Cocos Creator Shader 入门 ⒆ —— UV 扰动动画
cocos creator
VaJoy14 天前
Cocos Creator Shader 入门 ⒅ —— 流光动画
cocos creator
成长ing1213818 天前
cocos creator塔防路线 运动路线的编辑和录制
前端·cocos creator
VaJoy18 天前
Cocos Creator Shader 入门 ⒃ —— 有向距离场 SDF
cocos creator
VaJoy25 天前
Cocos Creator Shader 入门 ⒂ —— 自定义后处理管线
前端·cocos creator
Thomas游戏开发1 个月前
Cocos Creator 面试技巧分享
面试·微信小程序·cocos creator
IkeShyZz1 个月前
cocos creator android项目接入deeplink问题总结
cocos creator
VaJoy1 个月前
Cocos Creator Shader 入门 ⒀ —— UBO 内存布局策略
cocos creator
成长ing121381 个月前
cocos creator 3.x shader 流光
前端·cocos creator