如何避免在Android Facebook SDK中已经授权

hun*_*erp 31 android facebook

当我使用Facebook的Android SDK单点登录时,我得到一个完全无用的页面.

"你已经授权了happyapp.按"好的"继续.

此页面会破坏用户体验.我怎么能摆脱它.很多人都看到了这个,但没有发布任何解决方案.

甚至Facebook承认这是一个问题,请参阅:http://forum.developers.facebook.net/viewtopic.php?id = 84548

有谁知道任何解决方法吗?

P. *_*etz 11

我做的方式(没有额外的OAuth解决方案)就是在Kieveli建议的情况下在偏好中存储访问令牌.当主要活动开始时,从首选项中查找令牌,如果没有,则启动授权过程并将结果令牌存储在首选项中.

更难的部分是处理您的应用程序的令牌过期或取消授权(即令牌在首选项中,但不再有效).

对于这种情况,对于每个FB API /图调用,请检查指示身份验证失败的异常.如果失败,请再次启动授权/令牌存储过程.


max*_*ver 5

使用这里的建议,这是适合我的代码,希望它可以帮助某人

在登录之前这样做

SharedPreferences prefs= PreferenceManager.getDefaultSharedPreferences(FacebookLogin.this); 
                        String access_token = prefs.getString("access_token", null); 
                        Long expires = prefs.getLong("access_expires", -1);


                        if (access_token != null && expires != -1)
                        {
                            facebook.setAccessToken(access_token);
                            facebook.setAccessExpires(expires);
                        }


                        if (!facebook.isSessionValid())
                        {
                            facebook.authorize(FacebookLogin.this, new DialogListener() {
...
Run Code Online (Sandbox Code Playgroud)

成功登录后执行此操作

String token = facebook.getAccessToken();
long token_expires = facebook.getAccessExpires();

SharedPreferences prefs= PreferenceManager.getDefaultSharedPreferences(FacebookLogin.this);

prefs.edit().putLong("access_expires", token_expires).commit();

prefs.edit().putString("access_token", token).commit();
Run Code Online (Sandbox Code Playgroud)

  • 我想你已经错过了问题的重点.您发布的代码工作正常,而发布的FB访问令牌仍然有效(约48小时),但重点是之后发生的事情.就目前而言,在访问令牌到期后,您必须重新运行Facebook授权流程以获取另一个令牌,这会强制用户再次处理"您已经授权X"对话框.与纯Web方案一起使用,其中发布新的访问令牌而无需用户批准.我们需要的是一个类似的原生应用程序. (3认同)