Tôi nên sử dụng Android AccountManager để làm gì?


154

Tôi đã thấy AccountManager trong SDK Android và nó được sử dụng để lưu trữ thông tin tài khoản. Vì vậy, tôi không thể tìm thấy bất kỳ cuộc thảo luận chung nào về mục đích của nó. Có ai biết bất kỳ cuộc thảo luận hữu ích nào về ý định đằng sau AccountManager là gì và nó mua gì cho bạn không? Bất kỳ ý kiến ​​về loại tài khoản này là phù hợp cho? Đây có phải là nơi bạn đặt thông tin tài khoản người dùng của mình cho một dịch vụ web chung không?


Lưu ý Tôi đang nhắm mục tiêu 2.1 trở lên, vì vậy tôi có thể sử dụng AccountManager nếu đó là một lựa chọn hợp lý
Phil

7
Có một phần về câu hỏi này trong bài đăng này: udinic.wordpress.com/2013/04/24/ trên
Udinic

@Udinic - Cảm ơn. Rất nhiều sự giúp đỡ!
Chad Bingham

Chủ đề này được giải quyết trong trang web này: www.digigene.com/android/accounts-in-android/
Ali Nem

Ngoài ra còn có một thư viện để quản lý tài khoản trong Android ở đây .
Ali Nem

Câu trả lời:


94

Câu hỏi này hơi cũ, nhưng tôi nghĩ nó vẫn được quan tâm.

AccountManager, SyncAdapterContentProviderđi cùng nhau.

Nhưng bạn có thể:

Với AccountManager/ SyncAdapter/ ContentProvider:

  • AccountManager cung cấp cho người dùng một điểm trung tâm (Cài đặt> Tài khoản) để xác định thông tin đăng nhập của họ
  • Android quyết định khi đồng bộ hóa có thể được thực hiện thông qua SyncAdapter. Điều này có thể tốt để tối ưu hóa pin (chẳng hạn như không đồng bộ hóa khi mạng ngừng hoạt động)
  • ContentProviderlà một cách thuận tiện để chia sẻ dữ liệu trên các ứng dụng Lưu ý: có các phương thức giao tiếp giữa các quá trình khác trên Android .
  • ContentProviderlịch trình truy cập cơ sở dữ liệu trong một nền sợi Sự AsyncQueryHanldergiúp để truy vấn ContentProvidertrong một thread nền, ngăn chặn ứng dụng Không Responsive (ANR) trong khi không đòi hỏi bạn phải xử lý một cách rõ ràng luồng.
  • ContentProviderquan hệ ContentResolvervới người quan sát: điều này có nghĩa là dễ dàng thông báo quan điểm khi nội dung được thay đổi

Dòng dưới cùng : khung AccountManager/ SyncAdapter/ ContentProvidertrợ giúp nếu bạn muốn đồng bộ hóa dữ liệu từ tài nguyên web. Việc triển khai Fake / Dumb được yêu cầu trên API 7. Ngoài ra

  • Nếu bạn chỉ muốn lưu trữ dữ liệu, bạn nên xem xét một cơ chế đơn giản hơn để lưu trữ dữ liệu
  • Nếu bạn chỉ cần tìm nạp một tài nguyên duy nhất, bạn có thể sử dụng một AsyncTaskLoader
  • Nếu bạn muốn tải hình ảnh không đồng bộ, bạn có thể sử dụng các thư viện chuyên dụng như Square Picasso
  • Nếu bạn chỉ muốn thực thi một số mã tại một thời điểm nhất định, bạn có thể xem xét Dịch vụ / Báo động
  • chỉ khả dụng từ API> = 7 (điều này không còn quan trọng nữa)

Cuối cùng, nếu bạn sử dụng SyncAdapter, hãy xem xét nghiêm túc Firebase Cloud Messaging (trước đây là Google Cloud Messaging) hay còn gọi là "thông báo đẩy" để có các bản cập nhật mới hơn và sử dụng pin được tối ưu hóa.


1
Trong mẫu SDK, AccountAuthentificatorActivity là phần tùy chọn duy nhất.
rds

Tôi chưa quen với các lớp này nhưng liệu các lớp này có thể thêm tài khoản với các lệnh gọi mà không có sự tương tác của người dùng không? Ví dụ như thêm tài khoản trao đổi microsoft, tài khoản google, tài khoản POP3 / IMAP. Cảm ơn.
dackyD

@dackyD có, bạn có thể thêm một tài khoản theo chương trình
rds

cảm ơn @rds nhưng dựa trên lời giải thích của bạn, có vẻ như mã mẫu là không đủ. Có vẻ như tôi cần triển khai SyncAd CHƯƠNG và ContentProvider để đạt được mục tiêu của mình. Sửa lỗi cho tôi nếu tôi sai :)
dackyD

Chuẩn xác. Đó là ý nghĩa của đoạn đầu tiên của tôi, chúng đi cùng nhau và không thể sử dụng cái này mà không có cái khác.
rds

23

Lớp AccountManager được tích hợp với tài khoản điện thoại của bạn. Vì vậy, nếu bạn làm theo tất cả các hướng dẫn và làm cho nó hoạt động chính xác, bạn sẽ thấy các tài khoản của mình trong menu "Cài đặt-> tài khoản và đồng bộ hóa". Từ đó bạn có thể tùy chỉnh chúng hoặc thậm chí xóa chúng. Hơn nữa, Trình quản lý tài khoản có bộ đệm của các vé xác thực cho tài khoản của bạn. Điều này cũng có thể được sử dụng nếu bạn không có kế hoạch đồng bộ hóa tài khoản của mình (theo như tôi biết).

Nếu bạn không muốn tài khoản của mình xuất hiện trong menu đó, bạn không nên sử dụng Trình quản lý tài khoản và lưu trữ dữ liệu tài khoản ở nơi khác (có thể trong các tùy chọn được chia sẻ) http://developer.android.com/guide/topics/data/data -st Storage.html


14

Từ http://www.c99.org/2010/01/23/writer-an-android-sync-provider-part-1/ :

Phần đầu tiên của câu đố được gọi là Trình xác thực tài khoản, định nghĩa cách tài khoản của người dùng sẽ xuất hiện trong cài đặt Tài khoản & Đồng bộ hóa. Việc triển khai Trình xác thực tài khoản yêu cầu 3 phần: một dịch vụ trả về một lớp con của AbstractAccountAuthenticator từ phương thức onBind, một hoạt động để nhắc người dùng nhập thông tin đăng nhập của họ và tệp xml mô tả cách tài khoản của bạn sẽ hiển thị khi hiển thị cho người dùng. Bạn cũng cần phải thêm quyền của ERIC.AUTHENTICATE_ACCOUNTS vào AndroidManifest.xml của bạn.


3
Đó là một bài viết hay, nhưng bạn có nghĩ rằng Trình quản lý tài khoản chỉ dành cho các tài khoản đồng bộ hóa danh bạ và email, hoặc chúng ta có thể / nên sử dụng nó cho bất cứ điều gì có ID người dùng và mật khẩu không?
Phil

@Phil: Tôi chưa bao giờ sử dụng AccountManager vì vậy tôi không thể nói với bạn. Hãy nhớ rằng điều này đi kèm với 2.0 vì vậy nếu bạn sẵn sàng chạy trên các thiết bị có SDK thấp hơn, bạn sẽ phải tìm một cách khác để xử lý đăng nhập.
Macude

6
Bạn có thể sử dụng trình quản lý tài khoản cho bất kỳ loại tài khoản nào, đồng bộ hóa bất kỳ loại dữ liệu nào bạn lưu trữ theo bất kỳ cách nào. Hãy xem github.com/maxpower47/PinDroid để biết ví dụ về việc sử dụng nó để đồng bộ hóa dấu trang với cơ sở dữ liệu sqlite.
maxpower47

7

Điều AccountManagernày là tốt cho các lý do sau đây:

  • Đầu tiên là lưu trữ nhiều tên tài khoản với các cấp truy cập khác nhau vào các tính năng của ứng dụng theo một loại tài khoản. Ví dụ: trong một ứng dụng phát video, một người có thể có hai tên tài khoản: một tên có quyền truy cập demo vào một số lượng video giới hạn và cái còn lại có quyền truy cập cả tháng vào tất cả các video. Đây không phải là lý do chính để sử dụng Accounts, tuy nhiên, vì bạn có thể dễ dàng quản lý điều đó trong ứng dụng của mình mà không cần đến Accountsthứ trông lạ mắt này .
  • Ưu điểm khác của việc sử dụng Accountslà loại bỏ ủy quyền truyền thống với tên người dùng và mật khẩu mỗi khi người dùng yêu cầu một tính năng được ủy quyền, vì xác thực diễn ra trong nền và người dùng chỉ được yêu cầu nhập mật khẩu trong một số điều kiện nhất định. Tôi sẽ nhận được nó sau.
  • Sử dụng Accountstính năng này trong Android cũng giúp loại bỏ nhu cầu xác định loại tài khoản của chính mình. Bạn có thể đã bắt gặp các ứng dụng sử dụng tài khoản Google để ủy quyền, điều này giúp tiết kiệm rắc rối khi tạo tài khoản mới và ghi nhớ thông tin đăng nhập cho người dùng.
  • Accounts có thể được thêm độc lập thông qua Cài đặt → Tài khoản
  • Ủy quyền người dùng đa nền tảng có thể được quản lý dễ dàng bằng cách sử dụng Accounts. Ví dụ, khách hàng có thể truy cập tài liệu được bảo vệ cùng một lúc trong thiết bị Android và PC của họ mà không cần đăng nhập thường xuyên.
  • Từ quan điểm bảo mật, sử dụng cùng một mật khẩu trong mọi yêu cầu đến máy chủ cho phép nghe lén có thể trong các kết nối không an toàn. Mã hóa mật khẩu không đủ ở đây để ngăn chặn việc đánh cắp mật khẩu.
  • Cuối cùng, một lý do quan trọng để sử dụng Accountstính năng này trong Android là để tách hai bên liên quan đến bất kỳ doanh nghiệp nào phụ thuộc vào Accounts, được gọi là chủ sở hữu tài nguyên và chủ sở hữu tài nguyên, mà không ảnh hưởng đến thông tin của khách hàng (người dùng). Các thuật ngữ có vẻ khá mơ hồ, nhưng đừng bỏ cuộc cho đến khi bạn đọc đoạn văn sau đây

Hãy để tôi giải thích ở phần sau với một ví dụ về ứng dụng phát video. Công ty A là chủ sở hữu của một doanh nghiệp phát trực tuyến video trong hợp đồng với Công ty B để cung cấp cho các thành viên nhất định của mình các dịch vụ phát trực tuyến cao cấp. Công ty B sử dụng một tên người dùng và phương thức mật khẩu để nhận ra người dùng của mình. Để Công ty A nhận ra các thành viên cao cấp của B, một cách sẽ là lấy danh sách của họ từ B và sử dụng cơ chế khớp tên người dùng / mật khẩu tương tự. Theo cách này, người xác thực và chủ sở hữu tài nguyên là như nhau (Công ty A). Ngoài nghĩa vụ người dùng phải nhớ mật khẩu thứ hai, rất có khả năng họ đặt mật khẩu giống như hồ sơ của Công ty B để sử dụng các dịch vụ từ A. Điều này rõ ràng là không thuận lợi.

Để khắc phục những thiếu sót trên, OAuth đã được giới thiệu. Là một tiêu chuẩn mở để ủy quyền, trong ví dụ trên, OAuth yêu cầu ủy quyền phải được Công ty B (người xác thực) thực hiện bằng cách phát hành một số mã thông báo gọi là Mã thông báo truy cập cho người dùng đủ điều kiện (bên thứ ba) và sau đó cung cấp cho Công ty A (chủ sở hữu tài nguyên) mã thông báo. Vì vậy, không có mã thông báo có nghĩa là không đủ điều kiện.

Tôi đã xây dựng nhiều hơn về điều này và nhiều hơn nữa trên AccountManagertrang web của tôi ở đây.

Đây là một ứng dụng đơn giản sử dụng AccountManager

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.