为通过Facebook登录进行操作的用户呈现Facebook关注按钮?

时间:2016-02-29 21:34:20

标签: facebook facebook-graph-api facebook-login facebook-social-plugins

我有一个使用Facebook登录的网络应用程序。我们希望在我们产品的个人资料页面上为这些用户呈现Facebook“关注”按钮。

然而,当用户在我们的应用程序身份验证时,使用我们从图表API获取的个人资料网址初始化时,“关注”按钮不会呈现。

我只能在按钮中使用的URL是他们的主Facebook帐户URL时才能使用它,我可以手动定位,但不能以编程方式定位。我们似乎无法通过图API或Javascript SDK访问此网址。

我期望使用用户图节点上“链接”边缘中给出的配置文件URL的示例标记(注意这使用了应用程序作用域用户ID):

<div class="fb-follow" data-href="https://www.facebook.com/app_scoped_user_id/812839870448/" data-layout="button" data-show-faces="false"></div>

使用非应用程序范围的用户名实际工作的示例标记:

<div class="fb-follow" data-href="https://www.facebook.com/yetanotherjosh" data-layout="button" data-show-faces="false"></div>

为已经对您的应用进行身份验证的用户呈现关注按钮似乎是一项简单的任务,我错过了什么?谢谢!

P.S。 - 如果您想知道JS SDK是否未正确加载,我们将通过此代码as suggested by the Facebook developer site在body标签内加载它(并且按钮可以使用某些URL,因此我不会认为SDK设置是问题):

<script>(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/sdk.js#xfbml=1&version=v2.5&appId=REDACTED";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));</script>

1 个答案:

答案 0 :(得分:1)

我想做同样的事情,我对php api也有同样的问题。

理论上你可以做以下事情:

  1. 有一个php脚本跟随https://www.facebook.com/1234网址关注它的终点:https://www.facebook.com/username
  2. 第1步非常慢,所以你应该只做一次,也许使用cron作业,而不是在用户登录时即时。然后将该网址存储在你的数据库中。
  3. 使用存储的网址生成“关注”按钮。
  4. 对于第1步,您可以使用How to get final URL after following HTTP redirections in pure PHP?

    但请务必添加用户代理:

    bool List::SortSwap()
    {
        bool doswap = true;
        ListElement *i =this-> head;
        ListElement *prev =this-> head;
        ListElement *b = i->next;
    
        while (doswap= true) {
            for (i; i != NULL; i = i->next) {
                if (i != this-> head) {
                    prev->next = i;
                }
                if (i->value < b->value) {
                    swap(prev, i, b);
                    doswap = true;
                }
            }
    
            doswap= false;
        }
    
        return doswap;
    } 
    
    
    void List::swap(ListElement * prev, ListElement * a, ListElement * b)
    {
        prev->next = b;
        b->next = a;
    }
    

    或者您将被重定向到/ unknownbrowser

    我会自己尝试并发布结果(如果有的话)。

    后来编辑:我试过了,facebook需要你登录才能获得最终的网址,这样理论上你可以再次启动登录流程来获取网址,但这可能会有点过头了。