如何从Android上保存的帐户中检索Facebook-AuthToken

我正在尝试使用以下代码检索用于Facebook的AuthToken(由Facebook for Android保存)。

AccountManager am = AccountManager.get(this); Account[] accounts = am.getAccountsByType("com.facebook.auth.login"); if (accounts.length > 0) { for(int j = 0; j < accounts.length; j++) { Account account = accounts[j]; if(account.type != null && account.type.equals("com.facebook.auth.login")) { Log.e(RuntimeVars.MY_NAME, "FACEBOOK-TYPE FOUND"); am.getAuthToken(account, "com.facebook.auth.login", null, ConversationList.this, new AccountManagerCallback() { public void run(AccountManagerFuture arg0) { try { Bundle b = arg0.getResult(); Log.e(RuntimeVars.MY_NAME, "THIS AUTHTOKEN: " + b.getString(AccountManager.KEY_AUTHTOKEN)); } catch (Exception e) { Log.e(RuntimeVars.MY_NAME, "EXCEPTION@AUTHTOKEN"); } } }, null); } } } 

find登录凭据并将FACEBOOK-TYPE FOUND写入LogCat,但不会记录THIS AUTHTOKEN:[…]EXCEPTION @ AUTHTOKEN 。 所以我想am.getAuthToken永远不会被调用。

我错过了什么?

一般来说,如果有更好的(并且至少是工作)方法从Android帐户检索Facebook authtoken请告诉我。

非常感谢你的帮助!

最好的祝福
S.

为什么不使用Facebook SDK?

其中的Facebook类有一个成员来获取OAuth 2.0访问令牌(如果这是你需要的), getAccessToken()

要解释这两个日志语句都没有到达的事实,请考虑:

线~8:

  am.getAuthToken(account, "com.facebook.auth.login", null, ConversationList.this, 

…如果它立即可用,则可以返回令牌。 也许这就是你要找的答案? 引用AccountManager文档:

如果为此帐户缓存了先前生成的身份validation令牌并键入,则会返回该令牌。 否则,如果保存的密码可用,则会将其发送到服务器以生成新的身份validation令牌。 否则,提示用户输入密码。

请尝试调用AccountManager.blockingGetAuthToken 。 如果这样可行,那么这里有一些更有趣的错误……

此外,请确保您的清单正确设置了USE_CREDENTIALS权限。

在am.getAuthToken之前添加try {并在此方法声明结束时捕获exception。这将为您提供发生exception的原因和位置