标签: facebook-javascript-sdk

FB.getLoginStatus永远不会在Facebook的JavaScript SDK中触发回调函数

调用FB.init(之前</body>)的简单事情然后FB.getLoginStatus(callback)不会触发回调函数.

经过一些调试后,我认为SDK停留在"加载"(即FB.Auth._loadState == 'loading')阶段并且永远不会"加载",因此所有回调都会排队,直到SDK加载完毕.如果我在调试期间强制触发"已加载"事件 - FB.Event.fire('FB.loginStatus', 'loaded')如果您有兴趣 - 那么可以正确调用回调.

可能相关的额外细节:

  1. 我的应用程序是facebook iframe应用程序(通过apps.facebook.com/myapp加载)
  2. 我正在使用IE9.Chrome中也会出现相同的行为
  3. 该应用程序托管在http:// localhost中

这是怎么回事?为什么SDK永远不会被加载?

谢谢

更新:刚刚在Chrome上试过它并且它有效(不知道为什么它之前没有用).仍然无法在IE中工作

facebook-iframe facebook-javascript-sdk

10
推荐指数
1
解决办法
1万
查看次数

FB JS-SDK无法直接检测用户从FB注销

TL; DR Facebook javascript SDK无法确定直接从facebook.com下面注销的用户的准确登录状态.

我正在使用javascript SDK开发一个Facebook应用程序进行身份验证.我注意到,当用户直接退出Facebook(在facebook.com上)时,SDK无法理解用户在应用页面上的登录状态.我把它归结为以下简单的测试用例.

在一个选项卡中登录facebook.com.在另一个选项卡中,渲染下面的应用页面(根据需要替换MY_APP_ID).如果您以从未授予此应用程序权限的用户身份登录Facebook,请单击"登录"并授予他们.无论哪种方式,您都应该看到一些事件触发,表明您已登录.

现在,回到facebook.com标签上,退出facebook.转到应用程序选项卡,然后单击所有按钮("登录"除外)并查看浏览器控制台输出.

  • 什么时候FB.logout被召唤,什么都没发生 永远不会调用回调.在Chrome中,出现以下错误:"不安全的JavaScript尝试使用URL http://www.facebook.com/从框架http://my_app.com访问框架.域,协议和端口必须匹配."

  • FB.getLoginStatus被调用时,响应说"连接"和具有authResponse对象.但这没有用,因为它现在不正确.相反,如果为"force"参数传入true,则不会发生任何事情(永远不会调用回调).

  • FB.getAuthResponse被调用时,没有任何反应(回调永远不会调用).

  • 在任何此类事件中(在退出facebook之后)都没有触发任何相关事件.

那么问题是在这种情况下似乎没有可能从SDK合法地确定用户的登录状态.或者我做了一些愚蠢的事情,尽管我把它煮到了最低限度.

我的最终目标是,如果用户在退出facebook后点击我的注销按钮,我希望能够在这种情况下做一些事情.但SDK没有提供实现这一目标的可行方法.

任何想法或想法?有没有其他人经历过这个并找到了解决方法?谢谢!

简单的应用页面:

<html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml' xmlns:fb='http://www.facebook.com/2008/fbml'>
<head>
</head>
<body>
<script>
  window.fbAsyncInit = function() {
    function subFBEvent(name) {
      FB.Event.subscribe(name, function(r) {
        console.log(name);
        console.log(r);
      });
    }
    subFBEvent('auth.login');
    subFBEvent('auth.logout');
    subFBEvent('auth.authResponseChange');
    subFBEvent('auth.statusChange');
    FB.init({
      appId  : 'MY_APP_ID',
      status : true, // check login status
      cookie : true, // enable cookies to allow the server to access …
Run Code Online (Sandbox Code Playgroud)

javascript facebook facebook-javascript-sdk

10
推荐指数
1
解决办法
1469
查看次数

Facebook登录JS - FB.Event.subscribe('auth.login')触发器没有登录按钮点击

我正在尝试在我的网站上实现,真的需要你的登录与Facebook功能的帮助.

基本上,我正在努力实现以下目标:

  • 如果用户之前已确认该应用并点击我网站上的FB登录按钮,则会登录该网站(该网站的用户帐户与Facebook用户ID相关联)

  • 如果用户之前没有确认该应用程序,则在FB登录(和订阅应用程序)时,他们会被重定向到网站的注册页面.这里的表格预先填入了来自Facebook的用户数据,注册过程变得更加容易和快捷.

我正在使用下面的代码.

<body>

<div id="fb-root"></div>
<script>
    window.fbAsyncInit = function() {
        FB.init({
          appId: 'xxxxxxxx',
          status: true,
          cookie: true, 
          xfbml: true,
          oauth: true
        });

        FB.Event.subscribe('auth.login', function(response) {
              if (response.status === 'connected') {
                    var uid = response.authResponse.userID;
                    var accessToken = response.authResponse.accessToken;

                    if ((parseFloat(uid) == parseInt(uid)) && !isNaN(uid)) {
                        $.ajax({
                            url: '/user_actions/prep_facebook_registration',
                            cache: false,
                            type: 'POST',
                            data: { 'uid': uid, 'token': accessToken },
                            dataType: 'json',
                            success: function(data) {
                                if (data.success=='true') {
                                    if ((typeof(data.redirect) != 'undefined')) {
                                        window.location=data.redirect;
                                    }
                                }
                            }
                        }); …
Run Code Online (Sandbox Code Playgroud)

javascript facebook facebook-javascript-sdk

10
推荐指数
2
解决办法
1万
查看次数

Rails omniauth-facebook未解决的问题

目前的omniauth-facebook似乎有一些问题,我想知道是否有人对它们有答案.

第一个问题是无效的凭证问题.由于此问题,我无法使用客户端授权登录我的应用程序.但是,这可以通过将facebook-omniauth降级到1.4.0版本来解决.(参考)

但是,现在我遇到第二个问题,NoAuthorizationCodeError,错误消息:

OmniAuth Strategies Facebook NoAuthorizationCodeError 
(must pass either a `code` parameter or a signed request 
(via `signed_request` parameter):
Run Code Online (Sandbox Code Playgroud)

这是在这里被问到的,但是接受的答案建议再次实际升级到1.4.1版本,这将使先前的无效凭证问题再次发生.所以这对我来说不是一个选择.

NoAuthorizationCodeError当我尝试通过Internet Explorer登录Facebook iFrame(从应用程序中心搜索我的应用程序)内的应用程序时,会发生这种情况.在chrome或firefox上一切正常.还有一个github问题确切地指出了这个问题,但还没有人提出答案.我也尝试降级到omniauth-facebook 1.3.0版本,但它没有任何区别.我也尝试传递signed_request如下参数:

window.location = '/auth/facebook/callback', 
{ signed_request: response.authResponse.signedRequest }
Run Code Online (Sandbox Code Playgroud)

但是,它没有任何区别(在IE上,错误仍然存​​在),我不确定这是否是将代码作为参数传递的正确方法(我该如何检查?)

我假设我的设置没有问题.我真的很感激这方面的任何帮助.

更新:

我升级到1.4.1版本没有无效的凭据问题,但当我通过Internet Explorer访问Facebook内的应用程序时仍然会出现NoAuthorizationCodeError.检查我的Github 问题.

更新:

我降级到1.4.0版本,并添加了signedRequest params.

<script>
function login() {
  FB.login(function(response) {
    if (response.authResponse) {
      window.location = '/auth/facebook/callback?' + $.param({ signed_request: response.authResponse.signedRequest })
    } 
  }, {scope: 'email,publish_stream,publish_actions'}); …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails omniauth facebook-javascript-sdk

10
推荐指数
1
解决办法
1387
查看次数

Facebook JS SDK可以与Phonegap/Cordova一起使用吗?

我有Senscha 2.0移动应用程序,我想使用最新的phonegap(cordova)构建.

我想添加facebook登录功能.我找到了三个选择:

  1. 使用ChildBrowser方法
  2. 使用InAppBrowser.
  3. 使用cordova facebook插件

我决定和第二个一起去.

我在FB应用程序设置(移动站点URL)中遇到域存在问题.

我在那里键入了我的一个域名,但是当在xCode中使用Cordova构建应用程序时,facebook会出现错误,因为很明显,phonegap/cordova不会"使用"任何域名.

当我将我的应用程序(不使用phonegap)上传到我在Facebook设置中输入的域名时,一切都可以在我的iPhone上运行(在Safari中使用网站).


更确切地说.

当我将我的应用程序用作"移动Web应用程序"时,Facebook JS SDK正常工作.

当我使用Cordova/Phonegap构建我的项目(它自动使用InAppBrowser插件)时,它停止工作.

Facebook JS SDK能与Phonegap/Cordova一起使用吗?

facebook-javascript-sdk cordova

10
推荐指数
1
解决办法
8625
查看次数

如何在facebook api中获取用户位置和用户家乡?

我已经在使用这个脚本,但是当我使用API​​到家乡并且位置是undefined消息时我没有得到家乡和位置请出示示例代码以及如何在Facebook API中获取用户手机号码:

function login() {
FB.login(function(response) {
    if (response.authResponse) {
        // connected
    testAPI();
    } else {
        // cancelled
    }
}, { scope: 'email,user_birthday,user_location,user_hometown' });
}
function testAPI() {
console.log('Welcome!  Fetching your information.... ');
FB.api('/me', function(response) {
    console.log('Good to see you, ' + response.name + '.' + ' Email: ' +     response.email + ' Facebook ID: ' + response.id);
  //console.log('Good to see you, ' + response.name + '.');
  var userfirstName=response.first_name;
  var lastName=response.last_name;
  var useremail=response.email;
  var usersex=response.gender;
  var userbithday=response.birthday;
  var …
Run Code Online (Sandbox Code Playgroud)

javascript jsp facebook facebook-graph-api facebook-javascript-sdk

10
推荐指数
1
解决办法
3万
查看次数

Facebook API请求对话框不适用于Safari

我有以下代码记录用户并显示"选择要求的朋友"对话框("apprequests"):

    <!DOCTYPE html>
    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:fb="http://www.facebook.com/2008/fbml">
    <head>
    <title>Test</title>

    <script type="text/javascript">
    function facebook(){        
        FB.login(function(response) {
            if (response.authResponse) {
                var access_token = FB.getAuthResponse()['accessToken'];
                FB.ui({
                    method: 'apprequests',
                    message: 'Sample Title', 
                    max_recipients:1
                }, function(response){          
                    console.log('OK');
                });
            }
        }, {scope: 'publish_stream'});
    }
    </script>

    </head>

    <body>
    <p><a href="javascript:facebook();">Test</a></p>
    <div id="fb-root"></div>

    <script type="text/javascript">
    (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/es_LA/all.js#xfbml=0&appId=XXXXXXXXXXXXXX";
      fjs.parentNode.insertBefore(js, fjs);
    }(document, 'script', 'facebook-jssdk'));
    </script>

    </body>
    </html>
Run Code Online (Sandbox Code Playgroud)

该代码适用于所有主流浏览器(Firefox,Chrome,Opera,IE11,适用于IOS的Safari,Android浏览器).Safari(适用于Mac/PC)是例外:它打开"apprequests"对话框,但对话框显示为空.如果您更改下拉选项(再次"邀请朋友",然后再更改为"所有朋友"),最终会显示好友列表.

知道如何修复这个bug吗?

谢谢!

html javascript safari facebook-javascript-sdk

10
推荐指数
1
解决办法
1124
查看次数

Facebook apprequests对话框总是返回取消的Titanium Android?

我正在使用facebook 3.0.1钛模块.在Android中,Facebook apprequests对话框始终返回为已取消,即使实际的apprequest已发送,也可以在Facebook上看到.因此,我无法将请求存储在我的后端,这使得apprequest无用.

但在iOS中它工​​作正常.

这是我的代码

var fb = require('facebook');
fb.appid = 'my_app_id';
fb.permissions = ['publish_stream', 'read_stream', 'email']; // Permissions your app needs
fb.forceDialogAuth = true;

fb.addEventListener('login', function(evt) {
    if (evt.success) {
            fb.dialog("apprequests", {
              message:"LeaugeNation",
              // max_recipients : "2"
            }, function(response) {   
                alert(JSON.stringify(response));
                if(response.result) {
                        alert("send friend req");
                        // sendFacebookInvite(e.result);                                    
                    }    
            });

    } else if (evt.error) {
        alert("error");
    } else if (evt.cancelled) {
        alert("cancelled");

    } else {
            alert("default");
    }
});

fb.authorize();
Run Code Online (Sandbox Code Playgroud)

如果我运行代码我得到以下结果

{"cancelled":true,"code":-1,"success":false}

我做了以下更改,但没有得到结果.

  • 更改appid不会改变结果
  • 改变了Facebook App的Key Hash

提前致谢.

你能告诉我我想要在Android上获得正确结果的变化吗?

android titanium facebook-javascript-sdk titanium-modules titanium-mobile

10
推荐指数
1
解决办法
466
查看次数

Facebook init()的channelUrl参数是否已弃用?

我记得有一个channelUrl选项FB.init(),但根据这个页面它似乎不再存在

此功能是否已弃用?

javascript facebook facebook-javascript-sdk

10
推荐指数
1
解决办法
1126
查看次数

Facebook all.js和sdk.js之间的区别

我试图将应用程序升级到当前的Facebook API(v2.7),因为Facebook警告我们当前使用的API(v2.0)已被弃用.我查看了代码并找到sdk.js并更改了FB.init函数配置参数的version属性v2.7.

然后我找到了其他FB.init使用的电话all.js.似乎FB.init功能all.js不需要版本.

我查看了Facebook开发者页面all.js,但是我找不到任何相关信息.

那么,sdk.js和之间有什么区别all.js

javascript sdk facebook facebook-graph-api facebook-javascript-sdk

10
推荐指数
1
解决办法
2819
查看次数