2

我已经制作了一个 Facebook 注册表单,它可以与我期望的自定义​​字段和功能一起使用,除非用户在第一次访问该表单时没有登录到 Facebook。

在这种情况下,表单不会在屏幕上呈现,并且会出现以下错误:

无法加载此 ID 的注册表单。您之前可能在 Facebook 上屏蔽了此应用。转到您的 Facebook 隐私设置以取消阻止此应用。(错误:'client_id' 无效。)

现在我已经知道这已经在网站上讨论过了,但是其他地方提供的解决方案对我不起作用,我真的希望它能够基于 facebook 支持的 XFBML 解决方案工作(这里有一个演示http://developers.facebook .com/docs/plugins/registration/

如果您注销 facebook,您可以访问我的代码测试,直接取自 facebook 示例,在这里几乎没有修改:https ://www.askanutritionist.com/fb.html

顺便说一句,是的,在 facebook 应用程序设置中禁用了沙箱,因为这是 SO 上其他人建议的常见修复。

谢谢你的时间。笔记; 我会评论这个主题的其他现有问题,但 stackoverflow 不会让我(还)。

4

2 回答 2

1

检查您正在使用其 ID 的应用程序是否不受人口统计限制(例如,按年龄或国家/地区),并且它是否仍处于沙盒模式。

如果它受到限制或处于沙盒模式,则未登录且符合应用限制的用户(或对于沙盒模式,是应用程序的管理员)在登录之前无法看到应用程序的存在或其详细信息.

于 2013-02-25T23:13:23.897 回答
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));
于 2013-08-09T09:43:06.627 回答