getAuthToken y Android没有调用任何回调

时间:2012-11-21 08:55:55

标签: android accountmanager

我在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,但没有一个被写。

任何人都可以帮助我吗?如果我收到错误或者令牌没有获得,至少我会有一些工作,但我只是不知道发生了什么。

2 个答案:

答案 0 :(得分:3)

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

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

我不知道这是否是您遇到的问题,但可能没有帮助。

答案 1 :(得分:1)

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

我建议您改用Facebook SDK for Android。有了它,很容易获得身份验证令牌。对于没有安装官方facebook的用户,或者手机中添加了非常整洁的Facebook帐户,SDK也有一个备用。

另请参阅:How to retrieve an Facebook-AuthToken from the accounts saved on Android