Facebook Messenger 检测关闭 web 视图(移动)
Posted
技术标签:
【中文标题】Facebook Messenger 检测关闭 web 视图(移动)【英文标题】:Facebook messenger detect closing webview (mobile) 【发布时间】:2017-03-09 10:01:10 【问题描述】:我有一个聊天机器人,它为用户提供网页链接。有没有办法检测用户何时关闭 web 视图并因此返回机器人对话?
此问题仅适用于手机上的 Messenger 应用,台式机可以。
不支持window.onbeforeunload
,window.pagehide
仅适用于重新加载,但不适用于关闭 web 视图以及 window.unload
。
【问题讨论】:
您是否在为您的 webview 使用 Messenger Extensions JS SDK? @SLee 是的,但在文档中没有找到任何有用的东西 您的问题解决了吗? @Marco Dufal 不,问题仍然存在 @MohamedELAYADI 很遗憾你没有更新。我还没有找到办法(一段时间后我就放弃了)。至于桌面,它在一年前的表现有所不同,这不是问题。现在有了他们的 iframe,我不确定这将如何工作。 【参考方案1】:你可以试试这个。
MessengerExtensions.requestCloseBrowser(function success()
// webview closed
, function error(err)
// an error occurred
);
它与您正在寻找的不同。但是,如果您也在实施 webview 网站,您也可以通过这种方式驱动用户。
欲了解更多信息:Messenger Extension Webview
【讨论】:
【参考方案2】:这实际上取决于您想要在流程中实现什么。
如果用户使用 close-x(右上角)关闭 webview,您应该将其视为常规关闭事件,并且根本不处理任何事情。相反,您应该在 web 视图中使用专用的保存/确认和/或关闭按钮。
然后关闭按钮触发 Messenger Extension SDK 的 requestCloseBrowser 函数,保存/确认按钮处理实际的保存/确认/处理操作。
如果您确实需要使用右上角的 close-x 检测用户关闭 webview,这只能通过长轮询(从您的 webview 轮询用户会话)来实现。
【讨论】:
【参考方案3】:很简单,我们需要使用 Facebook 的 Messenger 扩展 SDK,去年我实现了这个。你可以在这里找到相关的代码,
https://github.com/vickymicky/botkit-messenger-express-demo/commit/4aa91d12167daa322bdaddb158289b74ee9610c7
我们需要使用window.extAsyncInit
来检测事件,然后我们可以将信息传递给服务器。
如果需要,请使用此 MessengerExtensions.getUserID
获取用户 ID。
参考https://github.com/vickymicky/botkit-messenger-express-demo/blob/master/views/webview.ejs
注意:以上示例是在 Node.js 上完成的。
【讨论】:
这不是问题的答案。您正在强制关闭 webview,但我想检测用户自行关闭 webview 的情况。 没错,这里的官方文档中也有描述:developers.facebook.com/docs/messenger-platform/webview/close @Elwhis ***.com/questions/45923927/… ***.com/questions/43279778/…以上是关于Facebook Messenger 检测关闭 web 视图(移动)的主要内容,如果未能解决你的问题,请参考以下文章
iOS Facebook Messenger,打开并完成任务后自动关闭链接
如何在桌面网络浏览器上的 facebook messenger 中打开 webview
如何从 WebView 将数据返回给 Facebook Messenger Bot?