1

我正在测试一个即时游戏应用程序,我最终希望我的机器人messaging_game_plays在游戏会话结束时收集事件以记录用户数据。为了允许messaging_game_plays发送,我已被此答案引导至canSubscribeBotAsync(),并subscribeBotAsync()来自Facebook Instant Games API v6.2。按照 API 参考作为指导,我已将这些canSubscribeBotAsyncsubscribeBotAsync方法构建到游戏的启动序列中。我也有fbapp-config.json正确的设置

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

我面临的问题是,canSubscribeBotAsync()当我测试应用程序时总是返回 false,所以当它返回 true 时我无法测试行为。canSubscribeBotAsync()当它返回 false 时似乎没有返回任何其他信息,所以我不确定是什么导致它以这种方式返回。

我目前正在通过构建我的游戏并将其上传到 facebook 应用程序来测试这个问题,然后将其移至测试阶段。然后我一直在我的 Facebook 帐户上玩这个游戏。

我的问题是:有什么方法可以知道为什么canSubscribtBotAsync()返回 false 吗?或者我的 Facebook 应用程序或个人 Facebook 个人资料上是否存在可能导致canSubscribeBotAsync()始终返回错误的设置?

我确实在此方法的文档中指出,任何给定的玩家只会被提示一次。我从未见过选择加入的提示,但是否有可能已经触发了你已经看到它的标志并且因此返回错误?

我已经让其他人尝试使用他们自己的帐户进行相同的行为。我现在正在测试更多的可能性,但我想我现在会发布这个,以防万一任何人看起来都不合适。我不希望找到任何革命性的东西,但如果我发现任何其他东西,我会保持这个问题的更新。

[编辑] 尝试使用另一个新的 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)

我已经尝试了许多不同的启动顺序安排,但我可能没有正确设置?

这个问题看起来有一个非常相似的问题,但是线程没有解决方案就结束了。

如果有人有任何想法或任何文件可以为我指明正确的方向,我们将不胜感激!我自己浏览了相当多的内容,但我可能在此过程中错过了一些东西。

4

1 回答 1

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

        });

    });
};
于 2019-01-16T22:17:54.270 回答