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

时间:2011-01-04 11:24:57

标签: android facebook accountmanager auth-token

我正在尝试使用以下代码检索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<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 < / em>已记录。所以我认为永远不会调用am.getAuthToken

我错过了什么?

一般情况下,如果有更好的(并且至少可以正常工作)方法从Android帐户中检索Facebook authtoken,请告诉我。

非常感谢你的帮助!

最好的问候 S上。

4 个答案:

答案 0 :(得分:6)

为什么不使用Facebook SDK?

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

答案 1 :(得分:2)

为了解释您的日志记录都没有达到这一事实,请考虑:

第8行:

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

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

  

如果是先前生成的身份验证令牌   缓存此帐户并输入,   然后它被退回。否则,如果一个   保存的密码可用,它是   发送到服务器以生成新的   身份验证令牌。否则,用户是   提示输入密码。

答案 2 :(得分:1)

请尝试拨打AccountManager.blockingGetAuthToken。如果这样可行,那么这里有一些更有趣的事情......

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

答案 3 :(得分:0)

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