2

我在 Android 中有一个应用程序,我正在尝试使用 AccountManager 获取 AuthToken 并使用 Facebook 或 Twitter 执行操作。所以我有这个:

AccountManager am = AccountManager.get(this);
Account[] accounts = am.getAccountsByType("com.facebook.auth.login");
Bundle options = new Bundle();
Account myAccount=null;

    for (int i=0;i<accounts.length;i++) {
        if (accounts[i].type.equals("com.facebook.auth.login")) myAccount=accounts[i];
        //options.putString("facebookUser", accounts[i].name);
    }

    am.getAuthToken(
            myAccount,                     // Account retrieved using getAccountsByType()
            "Manage your tasks",            // Auth scope
            options,                        // Authenticator-specific options
            this,                           // Your activity
            new OnTokenAcquired(),          // Callback called when a token is successfully acquired
            new Handler(new OnError()));

我的两个回调是 onTokenAcquired:

public class OnTokenAcquired implements AccountManagerCallback<Bundle> {

@Override
public void run(AccountManagerFuture<Bundle> result) {
    try {
        Bundle bundle = result.getResult();
        Log.e("onTokenAcquired",bundle.getString(AccountManager.KEY_AUTHTOKEN));
    } catch (OperationCanceledException e) {
        Log.e("onTokenAcquired","operationcanceled");
    } catch (AuthenticatorException e) {
        Log.e("onTokenAcquired","authenticatorexception");
    } catch (IOException e) {
        Log.e("onTokenAcquired","IOException");
    }
}
}

和 OnError:

public class OnError implements Callback {

@Override
public boolean handleMessage(Message msg) {
    Log.e("onError","ERROR");
    return false;
}

}

我正在关注 Android 开发人员指南 (http://developer.android.com/intl/es/training/id-auth/authenticate.html)。所以,我有两个选项,错误或获取令牌,在每个选项中我都有一个 Log.e() 来读取 SOMETHING,但没有写入。

有谁能够帮我?如果我遇到错误或没有获得令牌,至少我会有一些工作要做,但我只是不知道发生了什么。

4

2 回答 2

3

从文档中看并不是很明显,但是如果需要用户干预,您调用的 getAuthToken 变体将永远不会调用回调。这里有一些解决方法:

https://code.google.com/p/android/issues/detail?id=25473

我不知道这是否是您遇到的具体问题,但这可能无济于事。

于 2014-10-09T00:10:05.680 回答
1

我认为 Facebook 身份验证器不支持 getAuthToken。此外,您使用的身份验证范围“管理您的任务”是“Google 任务”的范围,如果支持 getAuthToken,则很可能不是正确的范围。

我建议您改用适用于 Android 的 Facebook SDK。有了这个,很容易获得身份验证令牌。该 SDK 还为没有安装官方 facebook 或在手机中添加了 facebook 帐户的用户提供了一个备用方案,非常简洁。

另请参阅:如何从保存在 Android 上的帐户中检索 Facebook-AuthToken

于 2012-11-26T14:30:53.823 回答