0

私は2つのテストを行いました

  1. ログインすると、initHandler内の有効なオブジェクトとして成功します
  2. Facebookにログインしていない場合、initHandler内でnullとして成功と失敗の両方が発生するため、elseの場合は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

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);
    }
}

このメソッドは、ユーザーがアプリのアクセス許可を与えていない場合にもnullセッションを表示するため、ログインしていないかどうかを具体的に通知しません。それにもかかわらず、私はそれがかなりうまくいくと思います。この時点で、Facebookが初期化されており、Facebook.loginへの呼び出しが機能するはずであることに注意してください。

于 2012-05-17T00:09:11.670 に答える
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

loginHandlerが呼び出されなかった質問のポイント2を参照すると、ログイン呼び出しを遅らせるという別の投稿が見つかりました。実行するコードの完全なシーケンスは次のとおりです。

    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 に答える