android – 由于使用Titanium的Facebook模块无效访问令牌错误,无法登录Facebook

前端之家收集整理的这篇文章主要介绍了android – 由于使用Titanium的Facebook模块无效访问令牌错误,无法登录Facebook前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用Titanium Studio 3.2.0和Titanium SDK 3.2.0.GA,并使用或不使用Facebook应用程序部署到 Android设备.要登录Facebook我正在使用 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模块没有伸出新的访问令牌,即使我的应用已经允许,它试图使用无效的,因此抛出这个无效的访问令牌,虽然这只是我的部分猜测,我不知道这是否是原因.

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

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

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

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

解决方法

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

猜你在找的Android相关文章