共享

时间:2017-08-23 23:36:55

标签: android ios facebook webview facebook-javascript-sdk

最终编辑 这是一个错误。在提交report之后,它已得到解决。

修改

我正在尝试在我的facebook messenger机器人的webview中获取用户ID。它在移动设备上运行良好,但在桌面(Web)上失败。情况并非如此。

Messenger 2.1 release statement给出以下引用:

  

扩展SDK的桌面支持:此新功能将在移动设备和网络上扩展功能,在各种设备上创建一致的体验。现在,桌面上也可以使用用户ID 等功能以及以前只能在移动设备上访问的共享功能。在实现webview和聊天扩展时,这还为开发人员提供了一种更简单的测试和调试方法。

通过信使附加信息获取用户ID有两种方法:getUserId()getContext()。文档声明getUserId()在桌面上不可用,但未提及getContext()

但是,有一个bug report表示桌面上尚未提供getContext()来电。

文档中没有提到获取用户ID的其他方法。人们应该如何做到这一点?

作为一个踢球者,如果您阅读原始问题,您会看到getContext()实际上可以在桌面(网络)上运行,但前提是通过机器人直接发送的链接打开webview。

ORIGINAL

我正在使用webview开发一个Facebook(messenger)机器人。 现在,所有任务中最基本的是获取userId。

这是我遇到大问题的地方。在彻底调查之后,我将在下面介绍案例和结果。

  • 案例1:我的应用程序向我发送了一个带有web_url按钮(打开webview)和共享按钮的通用模板。

    一切都很好。我得到了用户ID。

  • 案例2:我点击了case 1中的邮件中的分享,并与我和我的应用分享。

    来自任何一个消息主题(我自己,或我到应用程序)getContext()调用返回错误2018166 Permission not valid to call the SDK API.askPermission()返回2018154 Messenger Extensions unexpected error.

  • 案例3:我使用beginShareFlow()从webview内部点击分享,并与我和机器人分享。

    case 2

  • 相同
  • 案例4:这里是踢球者。

    从Android case 2case 3激活网页视图,可以运行并向我提供用户ID。

  • 案例5:分享给之前与应用程序进行过互动的朋友。

    当该朋友激活webview时,从桌面失败,从android工作。

  • 案例6:与与机器人交互的朋友分享。

    桌面上的

    无法正常工作(通过按钮或通过beginShareFlow()分享),它可以正常工作!

因此,在完成所有这些之后,模式是:

  • 在android上,webview共享按预期工作:我可以获取用户ID,无论他们是否与bot befor进行了交互。
  • 在桌面上,webview提供用户ID的唯一时间是机器人发送带有webview链接的消息。一旦用户共享,webview仍会打开,但不提供上下文。

只是澄清一下。我使用getContext而不是getUserId来获取用户ID,而文档明确指出这些内容不适用于桌面。

我能做些什么吗?我希望我的机器人网页浏览器能够在桌面和移动设备上运行。

我可以想到一个解决方法,但它远非理想

编辑2

根据要求,webview中共享的有效负载为:

{
  "attachment":{
    "type":"template",
    "payload":{
      "template_type":"generic",
      "elements": [{
        "title":"Testing webview",
        "default_action":{
          "type":"web_url",
          "webview_height_ratio": "full",
          "messenger_extensions": true,
          "url":"https://plenty.life/webview"
        },
        "buttons":[{
          "type":"web_url",
          "webview_height_ratio": "full",
          "messenger_extensions": true,
          "url":"https://plenty.life/webview",
          "title":"Test"
        }]
      }]
    }
  }
}

1 个答案:

答案 0 :(得分:0)

试试这个......

<script>
window.extAsyncInit = function() {
    // the Messenger Extensions JS SDK is done loading 
    console.log("using getUserId in",window.name)

    MessengerExtensions.getUserID(function success(uids) {
    // User ID was successfully obtained. 
        var psid = uids.psid;
        console.log(psid);
        document.getElementById("userId").innerText="your User Id Is "+psid;
    }, function error(err, errorMessage) {      
    // Error handling code
    console.log("some Error",err,errorMessage)
    }); 
    MessengerExtensions.getContext('<appID>', 
        function success(result){
            console.log("success",result)
        },
        function error(result){
            console.log("error",result)
        }
    );
};
</script>