我已经制作了一个Facebook注册表单,可以按照我的预期使用自定义字段和功能,除非用户在第一次访问表单时未记录进入Facebook。
在这种情况下,表单不会在屏幕上呈现,并显示以下错误:
无法加载此ID的注册表单。你可能有 之前在Facebook上阻止了此应用。转到您的Facebook隐私 用于取消阻止此应用的设置。 (错误:'client_id'无效。)
现在我已经知道这已经在网站上讨论了,但其他地方提供的解决方案对我不起作用,我真的希望这个工作基于facebook支持的XFBML解决方案(演示在这里{{3} })
如果你退出facebook,你可以访问我的代码测试,直接从facebook示例中获取并且几乎没有修改过:http://developers.facebook.com/docs/plugins/registration/
顺便说一句,是的沙盒在Facebook应用程序设置中被禁用,因为这是一个常见的修复其他人在S.O.建议。
感谢您的时间。 注意;我会对这个主题的其他现有问题发表评论,但stackoverflow不会让我(还)。
答案 0 :(得分:1)
检查您使用的ID的应用是否不受人口统计限制(例如按年龄或国家/地区),并且不在沙箱模式下。
如果受限制或处于沙箱模式,未登录且符合应用限制的用户(或沙盒模式的应用程序的管理员)将无法看到应用程序或其详细信息的存在,直到他们登录。
答案 1 :(得分:1)
只是为了确认;我从来没有真正解决这个问题。相反,我做了一个工作,并能够通过Facebook sdk进行javascript检查,以查看用户是否在第一次登录具有facebook注册表单的页面时已登录。
如果他们没有登录(或未经授权),我会进行http重定向,如果他们稍后在页面中登录,我会调用初始化facebook表单。
window.fbAsyncInit = function() {
FB.init({
appId : xxxx, // App ID
channelUrl : 'http:///xxxxx/fbchannel.php',
status : true, // check login status
cookie : true, // enable cookies to allow the server to access the session
xfbml : true // parse XFBML
});
// Additional initialization code here
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
// all ok!
//var uid = response.authResponse.userID;
//var accessToken = response.authResponse.accessToken;
} else if (response.status === 'not_authorized') {
window.location.href="create_account_with_facebook?authorizefirst";
} else {
window.location.href="create_account_with_facebook?loginfirst";
}
});
};
// Load the SDK Asynchronously
(function(d){
var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
if (d.getElementById(id)) {return;}
js = d.createElement('script'); js.id = id; js.async = true;
js.src = "//connect.facebook.net/en_US/all.js";
ref.parentNode.insertBefore(js, ref);
}(document));