授权后如何正确重定向到facebook页面选项卡URL

授权后如何正确重定向到facebook页面选项卡URL,facebook,facebook-graph-api,facebook-page,Facebook,Facebook Graph Api,Facebook Page,我已经改变了我的facebook页面标签应用程序请求权限的方式 我在FB对话框中使用javascript方法,现在我使用重定向方法(在这种方法中,用户被重定向到FB页面,在该页面上请求权限,然后重定向回facebook页面选项卡) 这一变化的原因是,我相信这种方法将出现 比使用javascript对话框更少的bug和问题 当使用重定向方法时,我需要指定用户在提供权限后将被重定向的URL。我希望此url是安装了应用程序的facebook页面选项卡的url 在构建重定向的url时,我知道当前的页面i

我已经改变了我的facebook页面标签应用程序请求权限的方式

我在FB对话框中使用javascript方法,现在我使用重定向方法(在这种方法中,用户被重定向到FB页面,在该页面上请求权限,然后重定向回facebook页面选项卡)

这一变化的原因是,我相信这种方法将出现 比使用javascript对话框更少的bug和问题

当使用重定向方法时,我需要指定用户在提供权限后将被重定向的URL。我希望此url是安装了应用程序的facebook页面选项卡的url

在构建重定向的url时,我知道当前的页面id和我的应用程序id。有了这些信息,我需要构建facebook页面选项卡url,它应该如下所示:

{#APP#u ID}?sk=APP#{#APP#u ID}

问题是,我不知道什么是页塞。我使用上面的url运行的测试(使用PAGE-SLUG)最终重定向到正确的url。然而,知道Facebook是一个非常不稳定的平台,我想知道有没有更好的方法来构建这个重定向url


编辑:上述方法存在问题。当facebook用户默认不使用SSL时,重定向会丢失SSL协议并使用HTTP链接。

实际上非常简单,您可以使用PHP调用Graph API,如下所示:

$facebook->api("/{PAGE_ID}"); 
// change {PAGE_ID} to the page id you are redirecting back to
返回值是一个json数组,其中包含“link”->这是您要查找的URL:-)

返回示例:

{
  "id": "XXXXXXXXX", 
  "name": "My Demo Page", 
  "picture": "", 
  "link": "https://www.facebook.com/pages/My-Demo-Page/XXXXXXXXX", 
  "likes": 123456, 
  "category": "Product/service", 
  "can_post": true, 
  "type": "page"
}
如果您知道页面名称,也可以按页面名称进行查询,例如:

使用以下命令查询图形API:

$facebook->api("/coca-cola"); 
将导致:

{
  "id": "40796308305", 
  "name": "Coca-Cola", 
  "picture": "https://fbcdn-profile-a.akamaihd.net/hprofile-ak-snc4/174560_40796308305_2093137831_s.jpg", 
  "link": "https://www.facebook.com/coca-cola", 
  "likes": 40680159, 
  "cover": {
    "cover_id": "10150682306963306", 
    "source": "https://fbcdn-sphotos-a.akamaihd.net/hphotos-ak-snc7/s720x720/416803_10150682306963306_40796308305_9337341_812683101_n.jpg", 
    "offset_y": 0
  }, 
  "category": "Food/beverages", 
  "is_published": true, 
  "website": "http://www.coca-cola.com", 
  "username": "coca-cola", 
  "founded": "1886", 
  "description": "Created in 1886 in Atlanta, Georgia, by Dr. John S. Pemberton, Coca-Cola was first offered as a fountain beverage at Jacob's Pharmacy by mixing Coca-Cola syrup with carbonated water. \n\nCoca-Cola was patented in 1887, registered as a trademark in 1893 and by 1895 it was being sold in every state and territory in the United States. In 1899, The Coca-Cola Company began franchised bottling operations in the United States. \n\nCoca-Cola might owe its origins to the United States, but its popularity has made it truly universal. Today, you can find Coca-Cola in virtually every part of the world.", 
  "about": "The Coca-Cola Facebook Page is a collection of your stories showing how people from around the world have helped make Coke into what it is today.", 
  "location": {
    "latitude": -33.816989983333, 
    "longitude": 150.84844081667
  }, 
  "can_post": true, 
  "checkins": 80, 
  "talking_about_count": 297576, 
  "type": "page"
}
编辑:

更清楚的解释是:

  • 使用当前页面id调用图形API
  • 如果结果不为false,则重定向uri将是链接 从电话中返回。 否则,重定向uri应该是yourdomain.com/middle page.php?page\u id=XXX
  • 如果用户随后接受应用程序,且重定向uri位于中间页面, 然后再次调用Graph API,但这次使用接收到的访问令牌 来自Facebook。现在您应该有了真正的页面url,并且可以添加任何其他内容 您需要的详细信息(如?sk_app=app_ID)

  • 根据Facebook own的说法,如果用户决定不接受该应用程序,会发生什么情况尚不清楚。我认为用户将重定向回重定向uri,然后您可以检查签名的请求中是否有“user\u id”,但我不是100%确定创建一个简单的应用程序演示并检查:-)

    您从哪里获得包含PAGE-SLUG的url格式?我是从一个没有用户名的页面获得的。示例:(这里的slug是PCS-POLI)谢谢你的解决方案,我的朋友。但是这种方法让我有些头疼,因为Facebook页面是受限制的(对于管理员,对于国家,对于成人等等),你需要传递一个有效的访问令牌,这样graph api请求才能工作。例如:(对于成人页面)我已经更新了我的答案,以包括私人页面问题的解决方案是的。用户转到页面应用程序,您可以查看他是否安装了该应用程序,如果不安装,您可以使用重定向uri重定向到登录url,该url将转到yourdomain.com/middle page.php?page_id=XXX,然后使用您刚收到的用户访问令牌查询带有真实页面url的图形api。然后,您只需使用?sk=app_YYY(YYY是您的应用程序id)重定向到该页面的url,是否更清楚?我认为此评论比您编辑的答案要好得多。你能把它包括在回答中吗?