Facebook 登录 JavaScript sdk 不适用于publish_actions范围

Facebook login javascript sdk not working with publish_actions scope

本文关键字:publish actions 范围 适用于 不适用 登录 JavaScript sdk Facebook      更新时间:2023-09-26

我正在使用本地主机中的按钮图形 api 开发 Web 应用程序,但它无法正常工作。当用户单击喜欢按钮时,如果fb登录状态为"已连接",则它调用图形api创建喜欢的对象以使喜欢用户喜欢url。问题:用户状态为"已连接",但图形 api 在调用创建对象时始终响应"需要扩展权限:publish_actions"(如 url)。

这是我的代码:

window.fbAsyncInit = function() {
    FB.init({
        appId: MY_APP_ID,
        status: true,
        cookie: true,
        xfbml: true
    });
};
(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/vi_VN/all.js";
  fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
/////////////////////////
// Login
////////////////////////
function fbLogin() {
    FB.login(function(response) {
        if (response.authResponse) {
            FB.api('/me', function(response) {
                //something
            });
        }
    },{scope: 'publish_actions,publish_stream'});
}
/////////////////////////
// btnLike heart click
////////////////////////
jQuery('.hit').click(function() {
    var current = jQuery(this);
    var postId = current.attr('id');
    var url = current.parent().attr('data-href');
    var class_string = current.attr('class');
    var class_array = class_string.split(' ');
    if (class_array.indexOf("liked") != -1) {  // found : liked
    } else { // not found : not liked
        FB.getLoginStatus(function(response) {
            if (response.status === 'connected') {
                FB.api('me/og.likes', 'post', {
                    /*test*/
                    object : getTestPermalink(url),
                }, function(res) {
                    if (res.id) { //hit like successful
                        jQuery.post(
                            MyAjax.ajaxurl, 
                            { action: 'set_post_likes', postId: postId }, 
                            function(result) {
                                current.addClass('liked');
                                current.parent().children('.count').html(result.split('-')[0]);
                            }
                        );
                    }
                });
            } else {
                fbLogin();
            }
        });
    }
});

有人可以帮助我吗?对不起,我的英语不好..

  • publish_stream被弃用(多年来?),你只需要publish_actions。
  • 您正在异步回调函数中调用FB.login。您必须在用户交互(鼠标单击)上直接调用它,而不是在 FB.getLoginStatus 的回调中调用它。

话虽如此,如果您不尝试使用应用程序的管理员、开发人员或测试人员的用户,通常会弹出权限错误。 publish_actions需求确实在任何其他用户授权之前得到Facebook的批准。查看登录评论:https://developers.facebook.com/docs/apps/review/login