添加 Messenger 功能插件 SDK

通过 Messenger 功能插件 SDK,您可以在使用 Messenger 网页视图打开的任何网站或网页应用中集成重要的 Messenger 特定功能。借助该 SDK,您可以检索打开网页视图的用户的信息、将内容分享到 Messenger 对话,以及深度集成 Messenger 用户界面。

可用功能

添加 Messenger 功能插件 SDK 后,即可在 Messenger 网页视图中使用以下功能。请注意,功能的实际可用情况因 Messenger 和设备的版本而异。

功能描述

getContext()

检索对话背景信息,例如打开网页视图的用户的 PSID。

requestCloseBrowser()

关闭网页视图并返回 Messenger 对话。

askPermission()

请求执行相关操作(例如检索用户的个人主页信息)的权限。

getGrantedPermissions()

检查当前授予的权限。

getSupportedFeatures

检查当前设备在网页视图中支持的功能,例如分享。

如需获取有关使用这些功能的完整信息,请参阅 Messenger 功能插件 SDK 参考文档

安装 SDK

1.将网域加入白名单

如要在智能助手中使用 Messenger 功能插件,您必须首先将提供网页的网域列入白名单;出于安全考虑,必须将您网页上的所有网域添加到网域白名单中。详情请参阅白名单参考文档

您可以使用下列 API,通过编程的方式轻松将网域添加到白名单中:

 
curl -X POST -H "Content-Type: application/json" -d '{
  "whitelisted_domains":[
    "https://petersfancyapparel.com"
  ]
}' "https://graph.facebook.com/v19.0/me/messenger_profile?access_token=PAGE_ACCESS_TOKEN"

成功后,Messenger 配置文件 API 的响应如下:

{"result":"success"}

2.添加 Messenger 功能插件 JS SDK

使用下方代码向网页视图中加载的页面添加 Messenger 功能插件 JavaScript SDK。您应直接在要加载 SDK 的每个页面的起始 body 标签之后插入此代码:

(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.net/en_US/messenger.Extensions.js";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'Messenger'));

3.等待 SDK 加载事件

系统会在 Messenger 功能插件 JS SDK 加载完成后调用 window.extAsyncInit()。您可以将其用作调用 SDK 中其他可用函数的触发器。

window.extAsyncInit = function() {
  // the Messenger Extensions JS SDK is done loading 
};

在 Messenger 网页客户端使用 SDK

Messenger 功能插件 SDK 可同时用于 Messenger 的移动版和桌面版客户端。但是,为使功能插件正常运行,您还需要注意以下事项。

您还可以使用 window.name 属性从客户端代码中检查 iframe 的位置。

在 Messenger 网页上触发 iframe 后,我们将 window.name 设置为 “messenger_ref”。而在 Facebook 聊天室选项卡上加载时,需将 window.name 设为 “facebook_ref”

不支持的功能

Messenger 网页客户端不支持以下设置或功能,但它们仍可在 Messenger 移动客户端上正常运行。

疑难解答

如果您无法在网页中调用 Messenger 功能插件 SDK,请注意以下事项:

  • 如果是通过固定菜单按钮打开网页视图,请确保将 messenger_extensions 参数设置为 true。如果用户通过分享的消息打开网页视图,则他们无需提前与您的智能助手进行对话,Messenger 功能插件也可以运行。
  • 检查并确保您已将托管相关页面的网域加入白名单

  • 检查并确保在使用功能插件的每个页面上添加 JS SDK。

  • 确保您不会在 SDK 加载完成之前尝试调用任何函数。加载完成后, 使用此处所述的 window.extAsyncInit 了解加载完成的时间。

  • 确保相关页面使用 https 运行,且不包含任何非标准端口。