android - Messenger InstantGames - Web 请求在 Messenger 网页上运行良好,但在通过 Messenger 移动应用程序播放时失败
问题描述
我有一个用 TypeScript 编写的游戏上传到 Facebook Instant Games。timestamp
我有一个超级简单的调用来从我自己的服务器获取真实的。
在将构建上传到 InstantGames 并遇到 CORS 问题后,我设法让它工作。我得到了正确的回应status 200
。
但是,相同的请求存在问题,但来自通过 Messenger 应用程序播放的 InstantGame,无论是在 iOS 还是在 Android 上。我试图尽可能多地放置匹配日志,但没有合理的答案。
我正在创建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 应用程序播放时会失败以及如何正确修复它?
解决方案
几个月前我终于解决了这个问题,所以我与你分享一个答案。
线索是,我在Opera
浏览器(桌面)上测试它,当我最终Chrome
在.Messenger
Chromium
问题是,我自己的服务器没有为这个确切的域提供适当的证书。Chrome
强制使用,https
然后由于托管拥有的证书而失败,指向主机服务器域而不是我自己的域。
使用我自己的证书解决了这个问题。
推荐阅读
- c++ - 如何将结构成员映射到字符串?
- kubernetes - 如何在 Kubernetes Flink 集群中实现 JobManager 高可用?
- mysql - MySQL - 在集合查询中在 WHERE 之前有 AND 是什么意思?
- android - 如何计算 X、Y 坐标来模拟屏幕触摸?
- html - 按钮应在右键单击时选择
- hashicorp-vault - 将保管库作为服务运行应遵循的步骤(保管库在服务器启动时启动)还需要永久令牌吗?
- python - scipy.stats 中的三参数帕累托分布
- angular - 在构建 Angular 6 应用程序时应用客户特定的标签和徽标
- r - 如何将相同的函数应用于多个数据帧以使用assign(deparse(substitute(df)))覆盖输入变量?[R]
- android - 将 ImageView 完全向左对齐