facebook - 如何判断 FB.init() 何时完成?应用启动时如何判断用户是否未连接?

标签 facebook cordova facebook-javascript-sdk phonegap-plugins

我正在使用带有 Phonegap/Cordova 的 facebook 插件进行开发。我可能在 stackoverflow 和任何地方都读过关于这个插件的每一篇文章或例子,但我仍然有这个 Unresolved 问题。

  1. 当应用程序启动时,我需要如果用户已经登录 --> 继续登录到主页。如果用户未登录 --> 显示带有“按下连接按钮登录”的屏幕

现在,当我的应用程序启动时 - 我调用“FB.init”方法。问题是,我没有任何回调可供使用,所以我知道它何时完成,然后检查登录状态。

如果我在 FB.init 之前订阅 auth.statusChange 事件,那么我只会在用户已经登录时引发此事件。这还不够,因为我还需要知道他何时未登录。

如果我在 FB.init 之后调用“FB.getLoginStatus”,它不会工作,因为这一切都是异步的,它会尝试在“fb.init()”完成之前获取登录状态。

换句话说,当应用程序启动时,我无法判断用户何时未登录。

谢谢你,丽然。

最佳答案

好的,所以我现在用超时 + 小东西解决了这个问题。 我真的不喜欢超时,但这是我目前为“未知” session 状态找到的唯一解决方案。这是我的代码:

// This event will rise when FB.init() completed, ONLY if the user is connected
        var statusChangeRaised = false;
        var statusChangeHandler = function(session) {
            statusChangeRaised = true;
            console.log('auth.statusChange event callback. session: ' + session.status);

            // We only want this handler one time
            FB.Event.unsubscribe('auth.statusChange', statusChangeHandler); 

            handleLoginStatus(d, session, true);
        };
        FB.Event.subscribe('auth.statusChange', statusChangeHandler); 

        // Phonegap native plugin
        FB.init({ appId : _FB_APP_ID,
              nativeInterface : CDV.FB,
              status: true,
              useCachedDialogs : false });

        // The callback can be trusted only if it say the user is NOT connected!
        //  * The scenario that the user is connected is covered by the auth.statusChange event
        FB.getLoginStatus(function(session) {
            console.log("getLoginStatus (just after init) callback. session: " + session.status);

            if (session.status === "notConnected") {
                statusChangeRaised = true;
                handleLoginStatus(d, session, false);
            }
        });

        // The timeout will handle scenario that the user is "unknown", so the auth.StatusChange didn't rise
        //      and also the getLoginStatus cannot be truested,
        setTimeout(function () { 
            if (!statusChangeRaised) {
                FB.Event.unsubscribe('auth.statusChange', statusChangeHandler);

                FB.getLoginStatus(function(session) {
                    console.log('FB.getLoginStatus (inside timeout after FB.init) callback. session: ' + session.status);
                    handleLoginStatus(d, session, true);
                });
            }
        }, 6 * 1000); 

关于facebook - 如何判断 FB.init() 何时完成?应用启动时如何判断用户是否未连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18193909/

相关文章:

php - 注册和登录最佳实践

javascript - 在 ionic cordova 中使用 javascript 修改 PDF 以添加按钮

iOS 使用套接字与其他应用程序通信

android - Livereload 不工作 Ionic cordova 部署到真实设备

Facebook JS SDK 渐进式网络应用程序问题

ios - 如何使用 SOCIAL KIT 框架从我的 iOS 应用程序将视频上​​传到 Facebook?

Python 打开多个 URL 连接 - urllib2

html - 如何将文本链接到 Facebook 评论中的超链接?评论插件

ios - Parse.com 是否可以使用 facebook 登录,同时检查 facebook 用户的电子邮件是否存在于解析中的用户中,以及是否链接两者?

facebook - 某些用户的电子邮件未从 Facebook API 调用返回