Messenger 扩展 Javascript SDK 错误 2071011

Messenger Extensions Javascript SDK Error 2071011

我正在尝试使用 Messenger Extensions Javascript SDK 创建 Messenger Web 视图 (https://developers.facebook.com/docs/messenger-platform/messenger-extension)。

WebView打开的页面有如下JS代码

<script>
(function(d, s, id){
  var js, fjs = d.getElementsByTagName(s)[0];
  if (d.getElementById(id)) {return;}
  js = d.createElement(s); js.id = id;
  js.src = "//connect.facebook.com/en_US/messenger.Extensions.js";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'Messenger'));

window.extAsyncInit = function () {
    // the Messenger Extensions JS SDK is done loading
    MessengerExtensions.getUserID(function success(uids) {
        var psid = uids.psid;
        alert(psid);
    }, function error(err) {
        alert("Messenger Extension Error: " + err);
    });
};
</script>  

结果是带有以下消息的警报 "Messenger Extension Error: 2071011"。所以方法 "getUserID" 出错了。 “2071011”错误代码是什么意思?以及如何解决?我已经搜索了很多,但没有找到任何相关信息。

非常感谢任何帮助!!

PS:指南说要将 URL 的站点列入白名单,我也这样做了。

您尝试如何打开网络视图?我遇到了同样的问题,但根据 documentation,Messenger 扩展仅适用于 iOS 和 Android。 此代码适用于 iOS,但在桌面 Messenger 应用程序上会引发相同的错误。希望对您有所帮助。

我在 messenger.Extensions.js 缩小源中找到“2071011”错误解释:

if (!p) {
    x(2071011, 'JavaScript bridge does not exist - Please make sure you are in latest ' + 'version of Facebook or Messenger App.');
    return;
}

p 值等于 q():

function q() {
    switch (o) {
        case h.ANDROID:
            return window._FBExtensions;
        case h.IOS:
            return window.webkit && window.webkit.messageHandlers;
    }
    return null;

}

可能的错误原因:

  1. 请确保您拥有最新的 Messenger 应用程序版本(在我的情况下不解决问题)。
  2. Messenger Android 应用程序很可能没有将变量 window._FBExtensions 正确地包含到 WebView 上下文中 - 我有这个变量未定义并且 messenger.Extensions.js 假定 _FBExtensions 变量已经存在。我找不到当前的解决方法,因为它是 Messenger 应用程序的一部分。
MessengerExtensions.getUserID(function success(uids) {
            // triggering on devices
            self.defer.resolve(uids.psid);
        }, function error(err) {
            MessengerExtensions.getContext(config.fbApp.id, function success(result) {
                // triggering on desktop
                self.defer.resolve(result.psid);
            }, function error(result) {
                self.defer.reject(result);
                console.log('Context Error ', result);
            });
        });