最终编辑 这是一个错误。在提交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 2
或case 3
激活网页视图,可以运行并向我提供用户ID。
案例5:分享给之前与应用程序进行过互动的朋友。
当该朋友激活webview时,从桌面失败,从android工作。
案例6:与不与机器人交互的朋友分享。
桌面上的无法正常工作(通过按钮或通过beginShareFlow()
分享),它可以正常工作!
因此,在完成所有这些之后,模式是:
只是澄清一下。我使用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"
}]
}]
}
}
}
答案 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>