2012-03-12 20 views
11

Tôi muốn truy xuất mã thông báo qua các lớp Trình quản lý tài khoản. Đây là mẫu mã mà làm việc cho twitter nhưng không cho facebook plz giúp tôi.Cách truy xuất Xác thực Twitter và Facebook và Mã thông báo qua các lớp Trình quản lý tài khoản của Android

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("[email protected]"); 
          } 
         } 
        }, 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("[email protected]"); 
          } 
         } 
        }, 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("[email protected]"); 
          } 
         } 
        }, 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("[email protected]"); 
          } 
         } 
        }, null); 

      // mHandler.sendMessageDelayed(mHandler.obtainMessage(CALL), 0); 

      i++; 
     } 

    } 

} 
+0

-1 Hai câu hỏi trong một ... Đối với Facebook, nó là bản sao của http://stackoverflow.com/questions/4593061/how-to-retrieve-an-facebook-authtoken-from-the-accounts- save-on-android – rds

Trả lời

8

Gọi AccountManager.getAccountsByType(null) để lấy tất cả tài khoản, và kiểm tra dữ liệu tài khoản trở lại bao gồm các thông tin bạn cần. Nó có thể chỉ đơn giản là không được tiếp xúc.

Thay vào đó, hãy thử gọi AccountManager.blockingGetAuthToken. Ngoài ra, hãy đảm bảo tệp kê khai của bạn có quyền USE_CREDENTIALS được đặt chính xác.

Bạn có thể xem thảo luận này How to retrieve an Facebook-AuthToken from the accounts saved on Android

Nhưng tôi cũng sẽ đề nghị Facebook SDK với ẩn phép truy cập (Sự cho phép này làm cho các thẻ truy cập được trả về bởi các thiết bị đầu cuối OAuth tồn tại lâu dài, nếu không thẻ auth chỉ có hiệu lực trong vòng 1 giờ.)

+0

Luôn trả về 0 kết quả ngay bây giờ trên Android M – Dpedrinha

2

bạn cũng có thể tạo ra ý định và có được token từ ứng dụng facebook

Intent intent = new Intent(); 
intent.setClassName("com.facebook.katana", "com.facebook.katana.ProxyAuth"); 
intent.putExtra("client_id", apiKey); 
intent.putExtra("scope", scope); 

try { 
    activity.startActivityForResult(intent, requestCode); 
} catch (ActivityNotFoundException e) { 
    return false; 
} 

Sau đó onActivityResult(int requestCode, int resultCode, Intent data) của bạn hoạt động bạn có thể lấy usin thẻ g

data.getStringExtra("access_token"); 
0

Chỉ để biết thông tin, phần ứng dụng facebook của getAuthToken không được triển khai. Khi bạn dịch ngược nó, bạn thấy rằng nó chỉ trả về null.

Bạn nên sử dụng SDK Facebook.

+0

@antonee marthin không đúng của nó –

Các vấn đề liên quan