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

Uri*_*izu 8 android facebook appcelerator-mobile titanium-mobile

我正在使用Titanium Studio 3.2.0和Titanium SDK 3.2.0.GA,并使用或不使用Facebook应用程序部署到Android设备.要登录Facebook我正在使用Titanium提供的那个.

我遇到了此链接中描述的相同问题.当我第一次授权时,来自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.
Run Code Online (Sandbox Code Playgroud)

我甚至试图用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);
        }
});
Run Code Online (Sandbox Code Playgroud)

经过一番挖掘后,我意识到了一些事情,第一次尝试授权我被重定向到Facebook应用程序,并且在接受权限后,登录事件就像它应该被解雇一样(作为证据,我获得了一个访问令牌),当我注销时用于会话的访问令牌无效(我在注销事件中检查了它),然后如果我再次尝试授权,似乎Facebook模块没有伸出新的访问令牌,即使我的应用程序已经允许,它试图使用无效的,因此抛出这个无效的访问令牌,虽然这只是我的部分猜测,我不知道这是否是原因.

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

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

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

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

Ada*_*dam 0

当用户注销时,我用它来清除任何残留的 Facebook 用户数据,不确定 Titanium 如何使用 Facebook SDK,但这就是我使用库存 FB SDK 的方法。

    Session.getActiveSession().closeAndClearTokenInformation();
Run Code Online (Sandbox Code Playgroud)