Метод API мгновенных игр Facebook canSubscribeBotAsync() всегда возвращает false при тестировании

Я тестирую приложение для мгновенных игр и в конечном итоге хочу, чтобы мой бот собирал messaging_game_plays событий для регистрации пользовательских данных в конце игрового сеанса. Чтобы разрешить отправку messaging_game_plays, я был направлен этим ответом на canSubscribeBotAsync() и subscribeBotAsync() из Facebook Instant Games API v6.2. Следуя справочнику по API в качестве руководства, я встроил эти методы canSubscribeBotAsync и subscribeBotAsync в последовательность запуска игры. У меня также есть мой fbapp-config.json с правильным

{
    "instant_games": {
        "bot": {
            "subscription_type": "OPT_IN_DEV"
        },
        ...
    }
}

Проблема, с которой я столкнулся, заключается в том, что canSubscribeBotAsync() всегда возвращает false, когда я тестирую приложение, и поэтому я не могу проверить поведение, когда оно возвращает true. canSubscribeBotAsync(), похоже, не возвращает никакой другой информации, когда возвращает false, поэтому я не совсем уверен, что заставляет его возвращаться таким образом.

В настоящее время я тестирую эту проблему, создавая и загружая свою игру в приложение facebook, а затем перемещая ее на этап тестирования. Тогда я играл в эту игру со своего аккаунта в фейсбуке.

Мой вопрос: есть ли способ узнать, почему canSubscribtBotAsync() возвращает false, когда это происходит? или существует ли настройка в моем приложении facebook или личном профиле facebook, которая может привести к тому, что canSubscribeBotAsync() всегда будет возвращать false?

В документации к этому методу я отметил, что любой данный игрок будет получать запрос только один раз. Я никогда не видел подсказку о подписке, но есть ли шанс, что флаг «вы-видели-это-уже-уже» сработал, и из-за этого он возвращает false?

У меня был кто-то, кто пытался использовать свою учетную запись с таким же поведением. Я только сейчас тестирую еще несколько возможностей, но я решил опубликовать это сейчас, если что-то сразу покажется кому-то неуместным. Я не ожидаю найти что-то революционное, но я буду обновлять этот вопрос, если найду что-нибудь еще.

[править] Попробовал еще одну новую учетную запись facebook и смог увидеть логи игры при первом запуске. Он дал пользователю сообщение о том, что приложение хотело бы получить доступ к общедоступным данным профиля, и canSubscribeBotAsync() вернуло false, прежде чем пользователь нажал «Принять» в подсказке данных. После нажатия «ОК» приложение возобновило работу в обычном режиме.

Последовательность загрузки: вот код, который я запускаю с // rest of game setup logic для логики установки для игры Phaser 3.

window.onload = () => {

    console.log('FB Instant Games SDK Version: ' + FBInstant.getSDKVersion());

    FBInstant.initializeAsync().then((value: boolean) => {

        FBInstant.player.canSubscribeBotAsync().then((can_subscribe: boolean) => {
            console.log((can_subscribe ? 'can' : 'cannot') + ' subscribe player to bot');
            if (can_subscribe) {
                FBInstant.player.subscribeBotAsync().then(function () {
                    console.log('subscribed player to bot');
                }).catch(function (e: any) {
                    console.log('didn\'t subscribe player to bot. error: ' + e.message);
                })
            }
        }).catch(function (e: any) {
            console.log('couln\'t check if player can be subscribed. error: ' + e.message);
        });


        // rest of game setup logic

    });
};

Я всегда получаю следующий вывод среди остальной части вывода приложения:

FB Instant Games SDK Version: 6.2
cannot subscribe player to bot     <--(canSubscribeBotAsync returning false)

Я испробовал несколько различных вариантов стартовой последовательности, но, может быть, я неправильно настроил?

У этого вопроса очень похожая проблема, но цепочка заканчивается без решения.

Если у кого-то есть какие-либо идеи или какие-либо фрагменты документации, которые укажут мне правильное направление, я буду очень признателен! Я сам довольно много просматривал, но, вероятно, что-то пропустил по пути.


person M Stefan Walker    schedule 19.12.2018    source источник
comment
Возможно, ваш пользователь уже подписан на бота? Если это так, то это вернет false. Вы можете отключить это, сняв галочку в верхней части разговора с ботом с данным пользователем. Также убедитесь, что canSubscribeBotAsync вызывается после startGameAsync. Здесь вы вызываете его только после initializeAsync, что не сработает.   -  person Chris Hawkins    schedule 21.12.2018
comment
Спасибо, заказ, похоже, был проблемой в моем случае. startGameAsync вызывался дальше в логике запуска игры, поэтому я вызывал canSubscribeBotAsync до startGameAsync. После переезда вроде все работает отлично! На самом деле я обнаружил это, вызвав subscribeBotAsync перед canSubsribeBotAsync (который просто возвращал true/false). Затем subscribeBotAsync вернул ошибку, что startGameAsync еще не вызывалась! Эта ошибка привела меня в правильном направлении.   -  person M Stefan Walker    schedule 09.01.2019


Ответы (1)


Это уже было выше в комментарии, но я помещу это здесь, так как это было решением моей проблемы!

Оказалось, что я звонил canSubscribeBotAsync до startGameAsync. Вот порядок звонков, которые в итоге сработали для меня. Это успешно побудило пользователя согласиться на обмен сообщениями с ботом:

window.onload = () => {

    FBInstant.initializeAsync().then((value: boolean) => {

        FBInstant.startGameAsync().then(function () {

            FBInstant.player.canSubscribeBotAsync().then((can_subscribe: boolean) => {
                if (can_subscribe) {
                    FBInstant.player.subscribeBotAsync().then(function () {

                        // start game here

                    }).catch(function (e: any) {

                        // and here regardless

                    })
                }
            }).catch(function (e: any) {

                // start game here too, launch the game!

            });

            // or start game here if the game should load underneath the popup
            // this ended up not having good flow so we started the game above

        });

    });
};
person M Stefan Walker    schedule 16.01.2019