Messenger 即时游戏 - Web 请求在 Messenger 网页上运行良好,但在通过 Messenger 移动应用程序播放时失败

Messenger InstantGames - web request works fine on Messenger webpage, but fails when played through Messenger mobile app

我将一个用 TypeScript 编写的游戏上传到 Facebook Instant Games。我有一个超级简单的调用来从我自己的服务器获取真实的 timestamp

在将构建上传到 InstantGames 并遇到 CORS 问题后,我设法让它工作。我用 status 200.

得到了正确的回应

但是,在 iOS 和 android 上,通过 Messenger 应用程序播放 InstantGame 的相同请求存在问题。我试着把尽可能匹配的日志放在一起,没有合理的答案。

我正在创建 XMLHttpRequest(),当游戏在桌面浏览器上启动时,我终于得到:

xhr.readyState == 4xhr.status == 200

我正在使用 https url.

在移动版 Messenger 上,我只有 xhr.readyState == 4xhr.status == 0.

我也尝试从 XMLHttpRequest() 移动到 fetch(),同样的行为 - 在桌面浏览器上它工作正常,在移动设备上我得到:

I/chromium(22226): [INFO:CONSOLE(0)] "Uncaught (in promise) TypeError: Failed to fetch"

服务器代码:

<?php
header('Access-Control-Allow-Origin: https://my-app-id.apps.fbsbx.com');
$date = new DateTime();
echo $date->getTimestamp();
?>

移动 Messenger 应用播放时为什么会失败以及如何正确修复它有什么想法吗?

不确定这是否是您所点击的内容,但 Messenger 应用程序不喜欢 HTTP/2。弄清楚这一点让我失去了几个小时的生命。

几个月前我终于解决了这个问题,所以我和你分享一个答案。

线索是,我在 Opera 浏览器(桌面上)上测试它,当我最终在 Chrome 上测试它时,我遇到了与在移动设备上相同的错误 Messenger 使用 Chromium.

问题是,我自己的服务器没有针对这个确切域的适当的自有证书。 Chrome 强制使用 https 然后由于托管拥有的证书指向主机服务器域而不是我自己的域而失败。

使用我自己的证书解决了这个问题。