首页 文章

可以't login to Facebook due to invalid access token error using Titanium'的Facebook模块

提问于
浏览
8

我'm working with Titanium Studio 3.2.0 and Titanium SDK 3.2.0.GA, and deploying to Android devices with or without the Facebook app. To login to Facebook I' m使用the one provided by Titanium .

我遇到了this link中描述的相同问题 . 当我第一次授权时,来自Facebook的登录事件完全没有问题 . 但是,如果我退出然后再次尝试授权(此时我的应用程序的权限已被接受,所以理论上它应该触发登录事件)我在logcat上收到以下错误:

E/FacebookModule( 1584): (main) [11631,11631] LoginDialogListener onFacebookError: Invalid access token.
E/FacebookModule( 1584): com.facebook.android.FacebookError: Invalid access token.
E/FacebookModule( 1584):    at com.facebook.android.Facebook.onSessionCallback(Facebook.java:433)
E/FacebookModule( 1584):    at com.facebook.android.Facebook.access$000(Facebook.java:97)
E/FacebookModule( 1584):    at com.facebook.android.Facebook$2.call(Facebook.java:379)
E/FacebookModule( 1584):    at com.facebook.Session$3$1.run(Session.java:1239)
E/FacebookModule( 1584):    at android.os.Handler.handleCallback(Handler.java:605)
E/FacebookModule( 1584):    at android.os.Handler.dispatchMessage(Handler.java:92)
E/FacebookModule( 1584):    at android.os.Looper.loop(Looper.java:154)
E/FacebookModule( 1584):    at android.app.ActivityThread.main(ActivityThread.java:4624)
E/FacebookModule( 1584):    at java.lang.reflect.Method.invokeNative(Native Method)
E/FacebookModule( 1584):    at java.lang.reflect.Method.invoke(Method.java:511)
E/FacebookModule( 1584):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:809)
E/FacebookModule( 1584):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:576)
E/FacebookModule( 1584):    at dalvik.system.NativeStart.main(Native Method)
E/FacebookModule( 1584): (main) [6,11637] onAuthFail: Invalid access token.

我甚至试图用try / catch来捕获这个错误来处理它,但即使我将authorize调用放在一个内部,catch中的代码也没有被执行 . 据我所知,如何进行授权并没有什么不寻常之处:

$.LoginButtonHolder.addEventListener('singletap', function(e) {
        $.activityIndicator.show();
        $.LoginButtonLabel.setOpacity(0);
        try
        {
            fb.authorize();
        }
        catch(err)
        {
            // if the authorize call fails, show the error on the console and show the controls to try again
            // but these four lines of code never get executed, an unhandled exception is still thrown
            Ti.API.info('error in Facebook login');
            Ti.API.info(err);
            $.activityIndicator.hide();
            $.LoginButtonLabel.setOpacity(1);
        }
});

经过一番挖掘后,我意识到了一些事情,第一次尝试授权我被重定向到Facebook应用程序,并且在接受权限后,登录事件就像它应该被解雇一样(作为证据,我获得了一个访问令牌),当我注销时用于会话的访问令牌无效(我在注销事件中检查了它),然后如果我再次尝试授权,似乎Facebook模块没有尝试使用无效的那个,因此抛出这个无效的访问令牌, although this is only a guess from my part and I have no idea if this is the cause .

我怎么解决这个问题?我目前使用的解决方案是通过Graph api调用从我的Facebook用户帐户中删除权限,这不是正确的方法,但这是我再次触发Facebook登录事件的唯一方法 .

此外,我检查了我的哈希键,它们似乎是有序的,因为我没有得到无效的哈希密钥消息,这里的问题是访问令牌,授权调用应该返回一个具有不同过期的访问令牌,据我所知,或者我的想法错了吗?

根据这个Facebook developers link,访问令牌到期有四种情况,但是对于注销场景我得到了不同的错误消息,其中显示的错误消息是验证访问令牌的错误:会话无效,因为用户已注销,而我得到的是LoginDialogListener onFacebookError:无效的访问令牌 . 是什么导致我得到的错误消息?

任何帮助将不胜感激,提前感谢 .

1 回答

  • 0

    当用户退出时,我用它来清除任何残留的Facebook用户数据,不确定Titanium如何使用Facebook SDK,但这就是我使用股票FB SDK的方式 .

    Session.getActiveSession().closeAndClearTokenInformation();
    

相关问题