7

我正在尝试使用以下代码检索 Facebook 的 AuthToken(由Facebook 为 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<Bundle>() {
                    public void run(AccountManagerFuture<Bundle> 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);
            }
        }
    }

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

我错过了什么?

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

非常感谢你的帮助!

最好的问候
S。

4

4 回答 4

6

为什么不使用 Facebook SDK?

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

于 2011-01-10T16:14:35.127 回答
2

要解释您的任何日志语句都没有到达的事实,请考虑:

行~8:

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

...如果它立即可用,则可以返回一个令牌。也许这就是您正在寻找的答案?引用 AccountManager 文档:

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

于 2011-06-17T22:53:31.507 回答
1

试着打电话AccountManager.blockingGetAuthToken。如果这有效,那么这里有一些更有趣的错误......

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

于 2011-01-08T15:25:03.087 回答
0

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

于 2011-01-04T13:12:27.737 回答