我有一个用TypeScript编写的游戏上传到Facebook Instant Games。我有一个超级简单的电话,可以从我自己的服务器上获取真实的timestamp
。
在将构建文件上传到InstantGames中并且遇到了CORS问题后,我设法使其正常运行。我收到status 200
的正确答复。
但是,相同的请求存在一个问题,但是在iOS和android上,通过Instant Messenger应用程序播放的InstantGame都有问题。我试图尽可能地放入匹配日志,没有合理的答案。
我正在创建XMLHttpRequest()
,当在桌面浏览器上启动游戏时,我终于得到了:
xhr.readyState == 4
和xhr.status == 200
。
我正在使用https
网址。
在移动Messenger上,我只有xhr.readyState == 4
和 xhr.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应用程序播放时会失败以及如何正确修复它?
答案 0 :(得分:0)
不知道这是否是您所要的内容,但Messenger应用不喜欢HTTP / 2。弄清楚这一点,我失去了几个小时。
答案 1 :(得分:0)
几个月前我终于解决了这个问题,所以我正在与您分享答案。
线索是,我在Opera
浏览器(在台式机上)上对此进行了测试,当我最终在Chrome
上对其进行测试时,我遇到了与移动Messenger
上相同的错误,使用Chromium
。
问题是,我自己的服务器没有针对该确切域的适当证书。 Chrome
强制使用https
,然后失败,因为托管拥有的证书指向了主机服务器域而不是我自己的域。
使用我自己的证书解决了这个问题。