2012-04-27 24 views
5

Tôi có một vài nghi ngờ về kiến ​​trúc Android khi xử lý xác thực.Tìm hiểu ý định trong xác thực Android

Giả sử tôi gọi AccountManager.getAuthToken cho tài khoản cụ thể mà tôi cần xác thực. Giả sử xác thực không thành công do mật khẩu không đúng. Hợp đồng AbstractAccountAuthenticator yêu cầu người xác thực trả lại Bundle bằng Activity xử lý thông tin nhập tên người dùng/mật khẩu qua KEY_INTENT.

Câu hỏi của tôi là: ai được cho là hiển thị giao diện người dùng? Android có tự động phát hiện rằng KEY_INTENT có mặt và chạy giao diện người dùng hay mã của tôi có phải là startActivity với ý định được thể hiện trong phản hồi của AccountManager không? Điều tương tự cũng áp dụng cho AccountManager.addAccount kết hợp kết quả thông qua giao diện Tương lai.

Tôi có thể tìm thấy một số hướng dẫn về các chủ đề này ở đâu?

Cảm ơn bạn

Trả lời

0

Hệ thống không tự động hiển thị hoạt động khi có KEY_INTENT. Bạn có thể bắt đầu hoạt động đó.

Dưới đây là một số mẫu mã:

private AccountManagerCallback<Bundle> mAccountManagerCallback = new AccountManagerCallback<Bundle>() { 

    public void run(AccountManagerFuture<Bundle> future) { 

     Bundle bundle; 
     try { 

      bundle = future.getResult(); 
      //if an intent was sent, start the required activity 
      if (bundle.containsKey(AccountManager.KEY_INTENT)) { 
       Intent intent = bundle.getParcelable(AccountManager.KEY_INTENT); 

       //clear the new task flag just in case, since a result is expected 
       int flags = intent.getFlags(); 
       flags &= ~Intent.FLAG_ACTIVITY_NEW_TASK; 
       intent.setFlags(flags); 

       startActivityForResult(intent, REQUEST_CODE_AUTH); 

     } else { 
      //otherwise, just get the credentials 
      if (bundle.containsKey(AccountManager.KEY_AUTHTOKEN)) { 
        String authToken = bundle.getString(AccountManager.KEY_AUTHTOKEN); 
        String userMail  = bundle.getString(AccountManager.KEY_ACCOUNT_NAME); 
        //use the credentials 
      } 
     } 
     } 
     catch(...) { 
     ... 
     //handle errors, maybe retry your getAuthToken() call 
     } 
    } 
} 

Tôi hy vọng điều này là những gì bạn đang tìm kiếm, nhưng trong trường hợp tôi không hiểu câu hỏi của bạn một cách chính xác, xin vui lòng làm rõ.

Chúc mừng!

+0

Nếu tôi không ** sử dụng gọi lại thì sao? Tôi hỏi câu hỏi bởi vì tôi muốn biết nếu và những gì giao diện người dùng phải làm trong trường hợp một Intent được trả về bởi người xác thực. Hệ thống có tự động hiển thị hay tôi phải triển khai mã trong trình gọi không? Tôi bắt đầu nghĩ rằng chỉ có hệ thống mới có thể chạy mục đích vì nó phải chạy với cùng một UID với tư cách là người tạo tài khoản. Tôi thực sự bối rối –

+0

[Thêm] Tôi đoán câu đầu tiên của bạn * là * câu trả lời: mọi người gọi phải thực hiện tất cả logic ... –

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