Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检查facebook应用程序的权限_Javascript_Facebook_Typescript - Fatal编程技术网

Javascript 检查facebook应用程序的权限

Javascript 检查facebook应用程序的权限,javascript,facebook,typescript,Javascript,Facebook,Typescript,我正在尝试使用facebook API来获得发布到用户墙的权限 我请求他们允许,如果他们单击“现在不”,我希望它返回到我的页面 如果他们说ok,就会出现一个自定义弹出窗口(facebookPopup) 下面是如果他们点击“共享”按钮会发生什么 public CheckPermissions() { var permsNeeded = ['publish_stream']; // Function that checks needed user permiss

我正在尝试使用facebook API来获得发布到用户墙的权限

  • 我请求他们允许,如果他们单击“现在不”,我希望它返回到我的页面
  • 如果他们说ok,就会出现一个自定义弹出窗口(facebookPopup)
下面是如果他们点击“共享”按钮会发生什么

public CheckPermissions() {
        var permsNeeded = ['publish_stream'];

        // Function that checks needed user permissions
        FB.api('/me/permissions', function (response) {
            var permsArray = response.data[0];
            var permsToPrompt = [];
            for (var i in permsNeeded) {
                if (permsArray[permsNeeded[i]] == null) {
                    permsToPrompt.push(permsNeeded[i]);
                }
            }              
                if (permsToPrompt.length > 0) {
                    promptForPerms(permsToPrompt);
                }
                else {
                   facebookPopup(response);
                }
            } );
        // Re-prompt user for missing permissions
        var promptForPerms = function (perms) {
                FB.login(function (response) {
                CheckPermissions();
                }, { scope: perms.join(',') });
        }
    }

我遇到的问题是,如果他们单击“Not Now”,它会不断重新编程,因为我正在调用CheckPermissions(),它会点击(permsToPrompt)。我只希望他们在再次单击“共享”按钮时重新安装

以下是您可以使用的:

module facebook {
    var grantedPermissions: { [permission: string]: number };

    function checkPermissions(callback?: Function): void {
        FB.api("/me/permissions", function (response): void {
            grantedPermissions = response.data[0];

            if (callback) { 
                callback();
            }
        });
    }

    export function init(): void {
        FB.getLoginStatus(function(response): void {
            if (response.status === "conntected") {
                checkPermissions();
            }
        });
    }

    export function hasPermission(permission: string): boolean {
        return grantedPermissions[permission] == 1;
    }

    export function getPermission(permission: string, callback?: Function): void {
        if (hasPermission(permission)) {
            if (callback) {
                callback();
            }

            return;
        }

        FB.login(function(response): void {
            checkPermissions(function() {
                if (callback && hasPermission(permission)) {
                    callback();
                }
            });
        }, { scope: permission });
    }
}
启动页面调用时:

facebook.init();
然后您可以这样使用它:

button.addEventListener("click", function(event: Event): void {
    getPermission("publish_stream", fucntion() { 
        // do what ever you want here with the publish_stream permission granted
    });
});
请记住,这段代码没有经过测试,我只是编写了它,它没有实现整个登录流程


希望这能有所帮助。

为什么要用TypeScript标记它?对不起,我的错误是,应该是Javascript看起来facebook已经删除了发布流权限,并将其与发布操作合并。这意味着您需要在应用程序中添加权限,并立即获得facebook审查批准。顺便说一句,天知道facebook将如何处理这件事。即使要让用户共享带有文本的图像,那么多复杂的编码和facebook SDK也是必须的。不过,使用Google+非常简单:(