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 а затем произошел сбой из-за сертификата, принадлежащего хостингу, указывающего на домен хост-сервера, а не на мой собственный.

Использование моего собственного сертификата решило проблему.

Другие вопросы по тегам