我在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,但没有一个被写。
任何人都可以帮助我吗?如果我收到错误或者令牌没有获得,至少我会有一些工作,但我只是不知道发生了什么。
答案 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