Facebook Messenger 检测关闭 web 视图(移动)

Posted

技术标签:

【中文标题】Facebook Messenger 检测关闭 web 视图(移动)【英文标题】:Facebook messenger detect closing webview (mobile) 【发布时间】:2017-03-09 10:01:10 【问题描述】:

我有一个聊天机器人,它为用户提供网页链接。有没有办法检测用户何时关闭 web 视图并因此返回机器人对话?

此问题仅适用于手机上的 Messenger 应用,台式机可以。

不支持window.onbeforeunloadwindow.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?

当请求视频和音频通话时,我如何接收全屏通知,例如颤振中的 Facebook Messenger

深度链接到 Facebook Messenger

Facebook Messenger 平台 ngrok