Facebook Javascript SDK重新请求权限不';不提示
自从上一次尝试以来,我一直无法解决这个问题,但在此之后我重新构建了代码 我无法触发接受所有权限的重新请求(忽略警报文本内容,因为这将更改为告诉用户为什么需要权限) 这是登录代码Facebook Javascript SDK重新请求权限不';不提示,javascript,facebook,permissions,facebook-javascript-sdk,Javascript,Facebook,Permissions,Facebook Javascript Sdk,自从上一次尝试以来,我一直无法解决这个问题,但在此之后我重新构建了代码 我无法触发接受所有权限的重新请求(忽略警报文本内容,因为这将更改为告诉用户为什么需要权限) 这是登录代码 jQuery(function() { $('body').prepend('<div id="fb-root"></div>'); return $.ajax({ url: "" + window.location.protocol + "//connect.facebook.
jQuery(function() {
$('body').prepend('<div id="fb-root"></div>');
return $.ajax({
url: "" + window.location.protocol + "//connect.facebook.net/en_US/all.js",
dataType: 'script',
cache: true
});
});
window.fbAsyncInit = function() {
return FB.init({
appId: '<%= ENV["FACEBOOK_KEY"] %>',
cookie: true
});
};
var permsNeeded = ["email", "user_birthday", "user_friends"];
var checkPermissions = function() {
var promptForPerms;
FB.api("/me/permissions", function(response) {
var i, permsArray, permsToPrompt;
permsArray = response.data[0];
permsToPrompt = [];
for (i in permsNeeded) {
if (permsArray[permsNeeded[i]] == null) {
permsToPrompt.push(permsNeeded[i]);
}
}
if (permsToPrompt.length > 0) {
alert("Need to re-prompt user for permissions: " + permsToPrompt.join(","));
promptForPerms(permsToPrompt);
} else {
alert("No need to prompt for any permissions");
}
});
promptForPerms = function(perms) {};
FB.login((function(response) {
console.log(response);
}), {
scope: perms.join(","),
auth_type: "rerequest"
});
$("#sign_in").click(function(e) {
e.preventDefault();
return FB.login((function(response) {
if (response.authResponse) {
checkPermissions();
}
}), {
scope: permsNeeded.join(',')
});
});
};
jQuery(函数(){
$('body')。前缀(“”);
返回$.ajax({
url:“+window.location.protocol+”//connect.facebook.net/en_US/all.js”,
数据类型:“脚本”,
缓存:真
});
});
window.fbAsyninit=函数(){
返回FB.init({
appId:“”,
曲奇:是的
});
};
var permsNeeded=[“电子邮件”、“用户生日”、“用户朋友”];
var checkPermissions=函数(){
var-promptForPerms;
FB.api(“/me/permissions”),函数(响应){
变量i,permsArray,permstormpt;
permsArray=response.data[0];
permsToPrompt=[];
对于(我在Permsneed){
if(permsArray[permsNeeded[i]]==null){
permsToPrompt.push(permsneed[i]);
}
}
如果(permsToPrompt.length>0){
警报(“需要重新提示用户权限:“+permsToPrompt.join”(,”);
promptForPerms(permsToPrompt);
}否则{
警报(“无需提示任何权限”);
}
});
promptForPerms=函数(perms){};
FB.登录((功能(响应){
控制台日志(响应);
}), {
范围:perms.join(“,”),
验证类型:“重新请求”
});
$(“#登录”)。单击(功能(e){
e、 预防默认值();
返回FB.login((函数(响应){
if(response.authResponse){
检查权限();
}
}), {
作用域:permsNeeded.join(“,”)
});
});
};
对修改或更改的内容有何建议?我完全不知道该怎么办。现在,无论你否认或允许什么,都不会有任何警告 您的代码中似乎有一些bug。我强烈建议您正确设置代码的格式和样式 我已经修复了错误,您可以参考下面修改的代码 请注意,这是使用facebook jssdk v2.2
window.fbAsyncInit = function() {
FB.init({
appId : '960839450617376',
xfbml : true,
version : 'v2.2'
});
init();
};
(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'));
function init() {
var permsNeeded = ["email", "user_birthday", "user_friends"];
var checkPermissions = function() {
var promptForPerms;
FB.api("/me/permissions", function(response) {
var permsArray, permsToPrompt;
permsArray = response.data;
permsToPrompt = [];
console.log(JSON.stringify(permsArray));
for (var i = 0, ilen = permsArray.length; i < ilen; i++) {
console.log(permsArray[i].permission, permsArray[i].status);
if (permsNeeded.indexOf(permsArray[i].permission) != -1 && permsArray[i].status != 'granted') {
permsToPrompt.push(permsArray[i].permission);
}
}
console.log(permsToPrompt);
if (permsToPrompt.length > 0) {
alert("Need to re-prompt user for permissions: " + permsToPrompt.join(", ") + '.\nPlease try again and allow the permission mentioned.');
} else {
alert("No need to prompt for any permissions");
}
});
};
$("#sign_in").click(function(e) {
console.log('sign in');
e.preventDefault();
return FB.login(
function(response) {
if (response.authResponse) {
checkPermissions();
}
}, {
scope: permsNeeded.join(','),
return_scopes: true,
auth_type: 'rerequest'
}
);
});
}
我还编辑了循环以检查哪些权限被拒绝
我们要求用户再次单击“登录”按钮,以允许登录弹出窗口(通过单击事件),而不是通过代码重新登录
我还将auth_type:'rerequest'设置为登录请求的默认值,因为如果授予了所有权限,我看不到任何权限提示。@Jeff Caspian
这是获取用户电子邮件地址的正确方法,非常感谢,我几乎被击中了两天。
事实上,他们中的很多人都在向Facebook团队报告他们无法获得电子邮件地址,事实上我也是
FB.api("/me/permissions", function(response) {
}
这通电话救了我一命,再次感谢你
FB.api("/me/permissions", function(response) {
}