首页 > 解决方案 > Messenger InstantGames - Web 请求在 Messenger 网页上运行良好,但在通过 Messenger 移动应用程序播放时失败

问题描述

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

在将构建上传到 InstantGames 并遇到 CORS 问题后,我设法让它工作。我得到了正确的回应status 200

但是,相同的请求存在问题,但来自通过 Messenger 应用程序播放的 InstantGame,无论是在 iOS 还是在 Android 上。我试图尽可能多地放置匹配日志,但没有合理的答案。

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

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

我正在使用https网址。

在移动 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 应用程序播放时会失败以及如何正确修复它?

标签: androidiosfacebook-messengerfacebook-instant-games

解决方案


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

线索是,我在Opera浏览器(桌面)上测试它,当我最终Chrome在.MessengerChromium

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

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


推荐阅读