我在制作一个对话框时遇到问题,要求用户登录我的Facebook标签进入比赛。
我们正在尝试使用带有以下代码的FB.ui oauth对话框。
FB.ui({
client_id: '12345',
method: 'oauth',
scope: 'email,user_birthday',
response_type: 'token',
redirect_uri: "https://mydomain.com/test.php" // Change this to proper address
});
当我们包含redirect_uri时,我们会收到以下消息
API Error Code: 100 API Error Description: Invalid parameter Error Message: The "redirect_uri" parameter cannot be used in conjunction with the "next" parameter, which is deprecated.
我们没有在任何地方使用下一个参数,所以不确定为什么会这么说。
当我们带走redirect_uri
时,我们会收到以下消息。
API Error Code: 191 API Error Description: The specified URL is not owned by the application Error Message: redirect_uri is not owned by the application.
答案 0 :(得分:2)
我会使用FB.login方法而不是这个,因为你在标签应用程序中运行。
在你的FB.init中:
window.fbAsyncInit = function(){
FB.init({
appId: 'your_app_id',
status: true,
cookie: true,
xfbml: true,
oauth: true
});
FB.Canvas.setAutoGrow(true);
};
FB.getLoginStatus(function(response){
if(response.status == 'connected'){
callyourfunctiontoentercompetition();
}else{
FB.login(function(response){
if(response.status == 'connected'){
callyourfunctiontoentercompetition();
}else{
handlethecancelpermissions();
}
});
}
});
答案 1 :(得分:1)
原来有一些问题,在我的应用设置中,我必须选择“网站”并放入我网站的网址,这样我就可以添加“应用域”并保存。这清除了191错误。未检查App Domain的网站将无法保存。之后它很简单。
这是我使用的代码。
<script>
window.fbAsyncInit = function() {
FB.init({
appId : 'YOUR_ID',
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true, // parse XFBML
channelURL : 'http://www.your_domain.ca/channel.html', // channel.html file
oauth : true // enable OAuth 2.0
});
// This should be fired on a user initiated action
FB.ui({ method: 'oauth', perms: 'email' }, function() { callback() });
};
(function(d){
var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
d.getElementsByTagName('head')[0].appendChild(js);
}(document));
function callback() {
FB.getLoginStatus(function(response) {
if (response.authResponse) {
FB.api('/me', function(response) {
//Get user information from here
});
}
});
}
</script>
答案 2 :(得分:0)
确保您所做的请求来自与您在facebook api中注册的域名相同的域名
答案 3 :(得分:0)
在标签中,您不需要传递方法和烫发以外的任何参数(或Facebook更改时的范围)
FB.getLoginStatus(function(response){
if(response.status == 'connected'){
alert("User connected");
}else{
FB.ui({
method: 'oauth',
perms: 'email,user_birthday' //change perms to scope when Facebook supports it
}, function(response){
if(response.session){
alert("User connected");
}else if(response.installed != '1'){
alert("User canceled");
}
});
}
}
)