我想通过客户经理类检索 token 。这是适用于 twitter 但不适用于 facebook 的示例代码请帮助我。
public class AccountManagerActivity extends Activity {
AccountManager mAccountManager;
AccountManagerFuture<Bundle> c;
String token;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mAccountManager = AccountManager.get(this);
Account[] acc = mAccountManager.getAccounts();
for (int i = 1; i < acc.length; i++) {
System.out.println("Account name==" + acc[i].name);
System.out.println("Account Type==" + acc[i].type);
}
AuthenticatorDescription[] ad = mAccountManager.getAuthenticatorTypes();
for (int i = 1; i < ad.length; i++) {
System.out.println("AuthenticatorDescription==" + ad[i].type);
}
tokenForTwitter();
tokenForFacebook();
}
private void tokenForFacebook() {
Account[] accts = mAccountManager
.getAccountsByType("com.facebook.auth.login");
int i = 0;
if (accts.length > 0) {
System.out.println("here");
Account acct = accts[0];
c = mAccountManager.getAuthToken(acct,
"com.facebook.auth.token" , null,
this, new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> arg0) {
try {
Bundle b = arg0.getResult();
System.out.println("Facebook THIS AUHTOKEN: "
+ b.getString(AccountManager.KEY_AUTHTOKEN));
Intent launch = (Intent) b
.get(AccountManager.KEY_INTENT);
if (launch != null) {
startActivityForResult(launch, 0);
return;
}
} catch (Exception e) {
System.out.println("EXCEPTION@AUTHTOKEN");
}
}
}, null);
c = mAccountManager.getAuthToken(acct,
"com.facebook.auth.token.secret" /*
* what goes here
*/, null, this,
new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> arg0) {
try {
Bundle b = arg0.getResult();
System.out.println("Facebook THIS AUHTOKEN: "
+ b.getString(AccountManager.KEY_AUTHTOKEN));
Intent launch = (Intent) b
.get(AccountManager.KEY_INTENT);
if (launch != null) {
startActivityForResult(launch, 0);
return;
}
} catch (Exception e) {
System.out.println("EXCEPTION@AUTHTOKEN");
}
}
}, null);
// mHandler.sendMessageDelayed(mHandler.obtainMessage(CALL), 0);
i++;
}
}
public void tokenForTwitter() {
Account[] accts = mAccountManager
.getAccountsByType("com.twitter.android.auth.login");
int i = 0;
if (accts.length > 0) {
System.out.println("here");
Account acct = accts[0];
c = mAccountManager.getAuthToken(acct,
"com.twitter.android.oauth.token" /* what goes here */, null,
this, new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> arg0) {
try {
Bundle b = arg0.getResult();
System.out.println("twitter THIS AUHTOKEN: "
+ b.getString(AccountManager.KEY_AUTHTOKEN));
Intent launch = (Intent) b
.get(AccountManager.KEY_INTENT);
if (launch != null) {
startActivityForResult(launch, 0);
return;
}
} catch (Exception e) {
System.out.println("EXCEPTION@AUTHTOKEN");
}
}
}, null);
c = mAccountManager.getAuthToken(acct,
"com.twitter.android.oauth.token.secret" /*
* what goes here
*/, null, this,
new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> arg0) {
try {
Bundle b = arg0.getResult();
System.out.println("twitter THIS AUHTOKEN: "
+ b.getString(AccountManager.KEY_AUTHTOKEN));
Intent launch = (Intent) b
.get(AccountManager.KEY_INTENT);
if (launch != null) {
startActivityForResult(launch, 0);
return;
}
} catch (Exception e) {
System.out.println("EXCEPTION@AUTHTOKEN");
}
}
}, null);
// mHandler.sendMessageDelayed(mHandler.obtainMessage(CALL), 0);
i++;
}
}
}
最佳答案
调用AccountManager.getAccountsByType(null)
获取所有账户,并检查返回的账户数据是否包含您需要的信息。它可能根本不会暴露。
尝试调用 AccountManager.blockingGetAuthToken
。此外,请确保您的 list 具有正确设置的 USE_CREDENTIALS
权限。
可以看到这个讨论How to retrieve an Facebook-AuthToken from the accounts saved on Android
但我还建议 Facebook SDK
具有离线访问权限(此权限使 OAuth 端点返回的访问 token 长期存在,否则授权 token 仅在 1 小时内有效。)
关于java - 如何通过 Android 的帐户管理器类检索 Twitter 和 facebook 身份验证和 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9668485/