Messenger InstantGames - веб-запрос отлично работает на веб-странице Messenger, но не работает при воспроизведении через мобильное приложение Messenger
У меня есть игра, написанная на TypeScript, загруженная в Facebook Instant Games. У меня супер простой звонок, чтобы получить реальный timestamp
с моего собственного сервера.
Мне удалось заставить его работать после загрузки сборки в InstantGames и после столкновения с проблемами с CORS. Я получаю правильный ответ с status 200
,
Однако есть проблема с тем же запросом, но из InstantGame, который воспроизводится через приложение Messenger, как на iOS, так и на Android. Я пытался поставить как можно больше журналов матчей, без разумного ответа.
Я создаю XMLHttpRequest()
Когда игра запускается в настольном браузере, я наконец получаю:
xhr.readyState == 4
а также xhr.status == 200
,
я использую https
URL-адрес.
На мобильный мессенджер я получаю только 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 ответов
Не уверен, что это то, что вы нажали, но приложения для обмена сообщениями не любят HTTP/2. Потерял несколько часов моей жизни, чтобы понять это.
Я наконец решил эту проблему несколько месяцев назад, поэтому поделюсь с вами ответом.
Подсказка заключалась в том, что я тестировал это на Opera
браузер (на рабочем столе), когда я наконец протестировал его на Chrome
, то у меня были такие же ошибки, как и на мобильном телефоне Messenger
который использует Chromium
.
Проблема заключалась в том, что на моем собственном сервере не было собственного сертификата для этого домена. Chrome
вынуждает использовать https
а затем произошел сбой из-за сертификата, принадлежащего хостингу, указывающего на домен хост-сервера, а не на мой собственный.
Использование моего собственного сертификата решило проблему.