0

我做了两个测试

  1. 当我登录时,我作为 initHandler 中的有效对象获得了成功
  2. 当我没有登录 Facebook 时,我会在 initHandler 中作为 null 获得成功和失败,所以在我的其他情况下我有 Facebook.login。然后提示用户登录,但是在填写用户名和密码后,我的 loginHandler 没有被调用,我的应用程序怎么知道他已经登录,所以我可以继续玩游戏,它是如何工作的?请指教。

        private function connect(id:String):void { 
        Security.loadPolicyFile("https://fbcdn-profile-a.akamaihd.net/crossdomain.xml");
        Facebook.init(id, initHandler);
    }
    
    private function initHandler(success:Object, fail:Object):void { //success, fail are null
        if(success){
    
        } else {
            Facebook.login(loginHandler,{scope:"email, user_location"});
        }
    }
    
    private function loginHandler(success:Object, fail:Object):void {
        if(success) {
    
        } else {
            //permissions not given
    
        }
    }
    
4

3 回答 3

0

你确定你没有得到回应?

也许这是语法问题 - loginHandler( result: Object, fail:Object)...?

如果您确实得到了响应,并且返回的对象是问题,那么可以使用 Facebook.getAuthResponse()

protected function loginHandler(result:Object, fail:Object):void 
{
    if (result) {
        // --> LOGIN SUCCESS

        var resp:String = Facebook.getAuthResponse().toString();
        var fbid:String = resp.substr(1, resp.length-2).split(":")[1];

        if(id == "null"){

            //  un-authorized. probably you're in sandbox mode and the user is not a registered tester

        }else{

            //  continue using 'fbid' 

        }

    } else {
        // --> LOGIN FAILED
    } 
}
于 2012-05-16T09:35:38.533 回答
0

参考我的问题中的第 2 点,我的 loginHandler 没有被调用,我发现另一个帖子说延迟登录调用,这是要运行的代码的完整序列。

    public function authorize():void {
        var response:FacebookAuthResponse = Facebook.getAuthResponse();
        if(response && response.uid) {
            this.success(response);
        } else {
            this.init();
        }
    }

    protected function init():void { 
        Security.loadPolicyFile("https://fbcdn-profile-a.akamaihd.net/crossdomain.xml");
        Facebook.init(this.appID, this.initHandler);
    }

    protected function initHandler(response:FacebookAuthResponse, fail:Object):void {
        if(response && response.uid){ 
            this.success(response);
        } else { 
            setTimeout(this.login, 200);
        }
    }

    protected function login():void {
        Facebook.login(loginHandler, this.permissions);
    }

    protected function loginHandler(response:FacebookAuthResponse, fail:Object):void {
        if(response && response.uid) {
            this.success(response);
        } else {
            //not authorized
        }
    }

    protected function success(response:FacebookAuthResponse):void {
        //authorized
    }
于 2012-05-17T09:19:56.673 回答
0

init 回调永远不会为我触发。它曾经在几个月前使用,但现在对成功和失败对象都返回 null。如 adifmac 所述,您可以使用 getAuthResponse 测试用户 ID。我这样做:

// in the constructor or wherever, init Facebook without passing an onInitComplete callback
// then call function to check for session.

Facebook.init( APP_ID );
checkForActiveSession();

private function checkForActiveSession():void
{
    try
    {
        // looking for a user ID string from an active session
        var hasSession = Facebook.getAuthResponse().uid;

        if ( hasSession == null )
        {
            trace('null session, NOT logged in or has not given permissions');

            _userIsLoggedIn = false;
        }
        else
        {
            trace('active session, user logged in');

            _userIsLoggedIn = true;

            // now you can get user data
            getUserData();
        }
    }
    catch(e:Error)
    {
        trace('must be uploaded to server to test : ' + e.message);
    }
}

此方法不会特别告诉您他们是否未登录,因为如果用户未授予应用程序权限,此方法也会显示空会话。尽管如此,我发现它工作得很好。请注意,此时 Facebook 已初始化,对 Facebook.login 的调用应该可以工作。

于 2012-05-17T00:09:11.670 回答