Facebook 不了解何时需要用户\u令牌而不是访问\u令牌

Facebook 不了解何时需要用户\u令牌而不是访问\u令牌,facebook,facebook-graph-api,facebook-access-token,facebook-group,Facebook,Facebook Graph Api,Facebook Access Token,Facebook Group,我很难理解FB如何确定是否需要用户令牌或访问令牌。 无论如何,我并没有使用Facebook进行身份验证,我真的不想这样做 我正试图将我们Facebook群组的信息显示到我们的论坛上 根据Graph API,/group id/feed需要: 需要具有用户组权限的组成员的用户访问令牌 应用访问令牌可以读取它在属于它的应用和游戏组中发布的帖子 /组id/事件仅需要: 具有用户组权限的组成员的用户访问令牌 文本有点离题,但在我看来,它传达了关于“用户访问令牌”的相同想法 根据FB,代替用户访问

我很难理解FB如何确定是否需要用户令牌或访问令牌。 无论如何,我并没有使用Facebook进行身份验证,我真的不想这样做

我正试图将我们Facebook群组的信息显示到我们的论坛上

根据Graph API,/group id/feed需要:

  • 需要具有用户组权限的组成员的用户访问令牌
  • 应用访问令牌可以读取它在属于它的应用和游戏组中发布的帖子
/组id/事件仅需要:

  • 具有用户组权限的组成员的用户访问令牌
文本有点离题,但在我看来,它传达了关于“用户访问令牌”的相同想法

根据FB,代替用户访问令牌,可以将应用程序的应用程序id和应用程序机密结合起来模拟访问令牌

在为我的团队feed执行此操作时,效果非常好。 对事件执行此操作时,我得到一个错误,该错误表示:

  • 代码:102
  • 消息:“请求此资源需要用户访问令牌。”
  • 类型:OAutheException
为什么应用id |应用秘密访问|令牌不起作用?我真的不想担心任何FB认证;我只是想在我们的网站上列出我们的活动。我是做错了什么,还是错过了正确的处理方法

$(function () {
    var location = document.URL;
    var ShowGroup = false;
    var group_id = null;

    if (location.indexOf("chattanooga-lodge") != -1) {
        group_id = "";
        ShowGroup = true;
    }

    if (ShowGroup) {
        $("#FBfeedContainer").show();
        // Initialize Facebook JavaScript API
        window.fbAsyncInit = function () {
            FB.init({
                appId: 'app-id',
                xfbml: true,
                version: 'v2.0'
            });

            //FB News Posts
            FB.api(
                "/" + group_id + "/feed",
                { access_token: "app-id|app-secret" },
                function (response) {
                    debugger;
                    if (response && !response.error) {
                        $.each(response.data, function (index, data) {
                            if (index < 3) {
                                $("#FBfeed").append(data.id);
                            }
                        });
                    }
                }
            );

            //FB Events
            FB.api(
                "/" + group_id + "/events",
                { access_token: "app-id|app-secret" },
                function (response) {
                    debugger;
                    if (response && !response.error) {
                        $.each(response.data, function (index, data) {
                            if (index < 3) {
                                $("#FBfeed").append(data.id);
                            }
                        });
                    }
                }
            );
        };

        (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";
            fjs.parentNode.insertBefore(js, fjs);
        }(document, 'script', 'facebook-jssdk'));
    }
});
$(函数(){
var location=document.URL;
var ShowGroup=false;
var group_id=null;
如果(地点indexOf(“查塔努加小屋”)!=-1){
组_id=“”;
ShowGroup=true;
}
if(显示组){
$(“#FBfeedContainer”).show();
//初始化Facebook JavaScript API
window.fbAsyninit=函数(){
FB.init({
appId:“应用程序id”,
xfbml:是的,
版本:“v2.0”
});
//FB新闻发布
FB.api(
“/”+组id+“/feed”,
{access_令牌:“app id | app secret”},
功能(响应){
调试器;
if(response&&!response.error){
$.each(response.data,函数(索引,数据){
如果(指数<3){
$(“#FBfeed”).append(data.id);
}
});
}
}
);
//餐饮活动
FB.api(
“/”+组id+“/事件”,
{access_令牌:“app id | app secret”},
功能(响应){
调试器;
if(response&&!response.error){
$.each(response.data,函数(索引,数据){
如果(指数<3){
$(“#FBfeed”).append(data.id);
}
});
}
}
);
};
(功能(d、s、id){
var js,fjs=d.getElementsByTagName[0];
if(d.getElementById(id)){return;}
js=d.createElement;js.id=id;
js.src=“//connect.facebook.net/en_US/sdk.js”;
fjs.parentNode.insertBefore(js,fjs);
}(文档“脚本”、“facebook jssdk”);
}
});

如果不使用任何用户身份验证,您将无法获取组的事件。正如您已经指出的,关于组id/feed(需要用户访问令牌或应用程序访问令牌)和组id/events(需要用户访问令牌)端点的权限。由于您通过组合应用id和应用机密创建了应用访问令牌,因此您能够获取提要数据

Facebok API中的每个数据点都受到权限的严格保护。其中一些是公开的,另一些是通过不同类型的访问令牌访问的,这取决于Facebook发现哪些人可以访问。你可以在这里了解更多


为了在网页上显示小组活动,您可能需要做一些变通。您必须创建自己的访问令牌并对其进行硬编码。显然,您不应该在Javascript中这样做,但是用户PHP API我认为不需要用户登录Facebook的最简单方法是

  • 创建一个
  • 使用以下代码检索的事件
  • 修改AJAX以引用新的代码文件(例如facebookEvents.php)
  • 在您的服务器上运行以下代码

    <?php
        # facebookEvents.php
    
        $FacebookID = '';
        $APP_ID='';
        $APP_SECRET='';
    
        header('Content-Type: application/json');
        print_r(file_get_contents("https://graph.facebook.com/$FacebookID/events?access_token=$APP_ID|$APP_SECRET"));
    ?>
    
    
    
    应用程序仪表板上提供的应用程序ID和应用程序机密

    组合应用程序的应用程序id和应用程序机密将创建应用程序访问令牌。不是用户访问令牌。这就是为什么文档中说用户访问令牌和应用程序访问令牌。如果您注意到我从API文档中粘贴的内容,那么提要和事件都说它们需要用户令牌。正如我还说过的,API文档说您可以使用应用程序访问令牌代替用户访问令牌。另外,正如我所说的,在一种情况下,应用程序令牌有效,而在另一种情况下则无效。唉,你看到我贴的东西了吗?我想知道为什么会有不一致的地方,或者我遗漏了什么。哪里说你可以使用应用程序访问令牌而不是用户访问令牌?这是不对的。对于
    /{group id}/events
    您复制的文档说它必须是用户访问令牌。对于
    /{groupid}/feed
    ,您复制的文档说appaccesstoken只能访问app和游戏组。要访问其他组,您必须使用属于该组的用户访问令牌,并已授予您用户组权限。您收到的错误消息说您必须使用用户访问令牌App才能访问它所属的游戏组。但是我创建了这个应用程序,我的朋友创建了这个群,他们之间没有任何联系。(除非是倒计时