我遇到了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:无效的访问令牌.是什么导致我得到的错误消息?
任何帮助将不胜感激,提前谢谢.