如何通过Android的客户经理类检索Twitter和Facebook的身份验证和令牌 [英] How to retrieve Twitter and facebook Authentication and Token through Android's Account Manager classes
问题描述
我想通过检索客户经理班令牌。下面是示例code,它适用于微博,但没有为Facebook plz帮助我。
公共类AccountManagerActivity延伸活动{
的AccountManager mAccountManager;
AccountManagerFuture<包> C;
字符串标记;
/ **第一次创建活动时调用。 * /
@覆盖
公共无效的onCreate(包savedInstanceState){
super.onCreate(savedInstanceState);
的setContentView(R.layout.main);
mAccountManager = AccountManager.get(本);
帐户[] ACC = mAccountManager.getAccounts();
的for(int i = 1; I< acc.length;我++){
的System.out.println(帐号名称==+ ACC [我]。名称);
的System.out.println(帐户类型==+ ACC [I] .TYPE);
}
AuthenticatorDescription []广告= mAccountManager.getAuthenticatorTypes();
的for(int i = 1; I< ad.length;我++){
的System.out.println(AuthenticatorDescription ==+广告[I] .TYPE);
}
tokenForTwitter();
tokenForFacebook();
}
私人无效tokenForFacebook(){
帐户[] accts = mAccountManager
.getAccountsByType(com.facebook.auth.login);
INT I = 0;
如果(accts.length大于0){
的System.out.println(在这里);
帐户的acct = accts [0];
C = mAccountManager.getAuthToken(会计,
com.facebook.auth.token,空,
对此,新AccountManagerCallback<包>(){
@覆盖
公共无效的run(AccountManagerFuture<包>为arg0){
尝试 {
叠B = arg0.getResult();
的System.out.println(Facebook本AUHTOKEN:
+ b.getString(AccountManager.KEY_AUTHTOKEN));
意向推出=(意向)乙
获得(AccountManager.KEY_INTENT);
如果(推出!= NULL){
startActivityForResult(发射,0);
返回;
}
}赶上(例外五){
的System.out.println(异常@的authToken);
}
}
}, 空值);
C = mAccountManager.getAuthToken(会计,
com.facebook.auth.token.secret/ *
*发生的事情在这里
* /,空,这一点,
新AccountManagerCallback<包>(){
@覆盖
公共无效的run(AccountManagerFuture<包>为arg0){
尝试 {
叠B = arg0.getResult();
的System.out.println(Facebook本AUHTOKEN:
+ b.getString(AccountManager.KEY_AUTHTOKEN));
意向推出=(意向)乙
获得(AccountManager.KEY_INTENT);
如果(推出!= NULL){
startActivityForResult(发射,0);
返回;
}
}赶上(例外五){
的System.out.println(异常@的authToken);
}
}
}, 空值);
// mHandler.sendMessageDelayed(mHandler.obtainMessage(CALL),0);
我++;
}
}
公共无效tokenForTwitter(){
帐户[] accts = mAccountManager
.getAccountsByType(com.twitter.android.auth.login);
INT I = 0;
如果(accts.length大于0){
的System.out.println(在这里);
帐户的acct = accts [0];
C = mAccountManager.getAuthToken(会计,
com.twitter.android.oauth.token/ *发生的事情在这里* /,空,
对此,新AccountManagerCallback<包>(){
@覆盖
公共无效的run(AccountManagerFuture<包>为arg0){
尝试 {
叠B = arg0.getResult();
的System.out.println(推特本AUHTOKEN:
+ b.getString(AccountManager.KEY_AUTHTOKEN));
意向推出=(意向)乙
获得(AccountManager.KEY_INTENT);
如果(推出!= NULL){
startActivityForResult(发射,0);
返回;
}
}赶上(例外五){
的System.out.println(异常@的authToken);
}
}
}, 空值);
C = mAccountManager.getAuthToken(会计,
com.twitter.android.oauth.token.secret/ *
*发生的事情在这里
* /,空,这一点,
新AccountManagerCallback<包>(){
@覆盖
公共无效的run(AccountManagerFuture<包>为arg0){
尝试 {
叠B = arg0.getResult();
的System.out.println(推特本AUHTOKEN:
+ b.getString(AccountManager.KEY_AUTHTOKEN));
意向推出=(意向)乙
获得(AccountManager.KEY_INTENT);
如果(推出!= NULL){
startActivityForResult(发射,0);
返回;
}
}赶上(例外五){
的System.out.println(异常@的authToken);
}
}
}, 空值);
// mHandler.sendMessageDelayed(mHandler.obtainMessage(CALL),0);
我++;
}
}
}
呼叫 AccountManager.getAccountsByType(空)
来检索所有帐户,并检查返回的帐户数据包括信息需要。它可能根本就没有被暴露出来。
尝试调用 AccountManager.blockingGetAuthToken
代替。此外,请确保您的清单中有 USE_CREDENTIALS
权限设置正确。
您可以看到这个讨论<一个href="http://stackoverflow.com/questions/4593061/how-to-retrieve-an-facebook-authtoken-from-the-accounts-saved-on-android">How从保存在Android上的帐户检索的Facebook-的authToken
不过,我也建议的Facebook SDK
离线访问权限(此权限使得通过OAuth的端点长寿返回的访问令牌,否则身份验证令牌仅对1小时。)
I want to retrieve token via Account Manager classes. Here is sample code that works for twitter but not for facebook plz help me.
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++;
}
}
}
Call AccountManager.getAccountsByType(null)
to retrieve all accounts, and check the returned account data includes the information you need. It may simply not be exposed.
Try calling AccountManager.blockingGetAuthToken
instead. Also, make sure your manifest has the USE_CREDENTIALS
permission set correctly.
You can see this discussion How to retrieve an Facebook-AuthToken from the accounts saved on Android
But I would also suggest Facebook SDK
with offline access permission(This permission makes the access token returned by the OAuth endpoint long-lived, otherwise auth token is valid only for 1 hour.)
这篇关于如何通过Android的客户经理类检索Twitter和Facebook的身份验证和令牌的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!