可以在webview中使用JS在FB messenger扩展中获取用户的照片吗?

时间:2017-07-26 00:26:04

标签: javascript facebook facebook-graph-api webview

我有一个Facebook聊天扩展,可通过持久菜单按钮访问Webivew。

在Webview上,我加载了messenger Extensions.js代码,我可以查询用户的页面范围ID,允许的权限等。

我希望能够让用户分享他们的照片,有没有什么方法可以在我的Webview上的JS中访问它?甚至在服务器上。类似的东西:

curl -X GET "https://graph.facebook.com/v2.6/<PAGE_SCOPED_USER_ID>?fields=photos,first_name,last_name,profile_pic,locale,timezone,gender&access_token=PAGE_ACCESS_TOKEN"

除了photos字段当然不起作用:

{u'error': {u'code': 100,
  u'fbtrace_id': u'xxxx/xxxxx',
  u'message': u'(#100) Tried accessing nonexisting field (photos) on node type (MessengerPageScopedID)',
  u'type': u'OAuthException'}}

我目前拥有user_profileuser_messaging权限。

到目前为止,我只能使标准字段(listed here)正常工作,这些字段只是第一个,最后一个,性别等。

我很好,用户需要允许更多权限(并点击添加内容),但我想避免像大多数FB应用程序一样的非信使身份验证流程。我认为信使的意思是以这种方式减少摩擦。

我很好奇我是否遗漏了某些内容,或者是否实际上没有办法从Messenger聊天扩展中获取其他FB用户数据。

谢谢!

1 个答案:

答案 0 :(得分:2)

我看到这样做的唯一方法是使用Login Javascript SDKMessenger Extensions SDK在网络上创建自己的Facebook登录页面。基本上你需要做的就是在Javascript中添加这两个SDK并创建一个html按钮供用户按下以触发登录。不要忘记将所需的权限添加到Login SDK。

您可以通过网址在网址按钮中发送指向此登录页面的链接。确保在该按钮上启用Messenger Extensions。当用户点击该按钮时,将使用您创建的Facebook登录页面打开webview。

如果用户已登录Facebook,他们应该只看到一个页面,要求他们接受新的权限。一旦他们接受了权限,页面就应该返回app-scoped-id(和访问令牌)以及page-scoped-id(Messenger id)。您现在已经链接了app-scoped-id和page-scoped-id,您可以使用此app-scoped-id和访问令牌来查询Graph API以获取您要求的权限。

让人们走出僵尸网络流程并进入网络浏览器是令人讨厌的,但这不是一个糟糕的用户体验。