Untuk apa saya menggunakan Manajer Akun Android?

154

Saya telah melihat AccountManager di Android SDK dan digunakan untuk menyimpan informasi akun. Dengan demikian, saya tidak dapat menemukan diskusi umum tentang apa yang dimaksudkan untuk itu. Adakah yang tahu tentang diskusi yang bermanfaat tentang apa maksud di balik AccountManager dan apa yang Anda beli? Adakah pendapat tentang jenis Akun apa yang cocok untuk ini? Apakah ini tempat Anda meletakkan informasi akun pengguna Anda untuk layanan web umum?

Phil
sumber
Catatan Saya menargetkan 2.1 dan di atas, jadi saya bisa menggunakan AccountManager jika itu adalah pilihan yang masuk akal
Phil
7
Ada bagian tentang pertanyaan ini dalam posting ini: udinic.wordpress.com/2013/04/24/...
Udinic
@ Unicinic - Terima kasih. Banyak bantuan!
Chad Bingham
Topik ini dibahas di situs ini: www.digigene.com/android/accounts-in-android/
Ali Nem
Ada juga perpustakaan untuk pengelolaan akun di android di sini .
Ali Nem

Jawaban:

94

Pertanyaan ini agak lama, tapi saya pikir ini masih menarik.

AccountManager, SyncAdapterdan ContentProviderpergi bersama.

Tapi kamu bisa:

Dengan AccountManager/ SyncAdapter/ ContentProvider:

  • AccountManager memberi pengguna titik pusat (Pengaturan> Akun) untuk menentukan kredensial mereka
  • Android memutuskan kapan sinkronisasi dapat dilakukan melalui SyncAdapter. Ini bisa baik untuk mengoptimalkan baterai (misalnya, sinkronisasi tidak dilakukan ketika jaringan sedang down)
  • ContentProvideradalah cara yang mudah untuk berbagi data di seluruh aplikasi Catatan: ada metode komunikasi inter-proses lainnya di Android .
  • ContentProvidermenjadwalkan akses basis data di utas latar belakang Bantuan AsyncQueryHanlderuntuk kueri ContentProviderdalam utas latar belakang, mencegah kesalahan Aplikasi Tidak Responsif (ANR) sementara tidak mengharuskan Anda untuk secara eksplisit menangani threading.
  • ContentProviderterkait ContentResolverdengan pengamat: ini berarti mudah untuk memberi tahu pandangan ketika konten diubah

Intinya : kerangka kerja AccountManager/ SyncAdapter/ ContentProvidermembantu jika Anda ingin menyinkronkan data dari sumber daya web. Implementasi palsu / bodoh diperlukan di API 7. Juga

  • Jika Anda hanya ingin menyimpan data, Anda harus mempertimbangkan mekanisme penyimpanan data yang lebih sederhana
  • Jika Anda hanya perlu mengambil satu-satunya sumber daya, Anda dapat menggunakan AsyncTaskLoader
  • Jika Anda ingin memuat gambar secara tidak sinkron, Anda dapat menggunakan perpustakaan khusus seperti Square Picasso
  • Jika Anda hanya ingin mengeksekusi beberapa kode pada waktu tertentu, Anda dapat mempertimbangkan Layanan / Alarm
  • hanya tersedia dari API> = 7 (ini tidak masalah lagi)

Terakhir, jika Anda menggunakan a SyncAdapter, pertimbangkan dengan serius Firebase Cloud Messaging (sebelumnya Google Cloud Messaging) alias "push notification" untuk mendapatkan pembaruan yang lebih segar dan penggunaan baterai yang dioptimalkan.

rds
sumber
1
Dalam sampel SDK, AccountAuthentificatorActivity adalah satu-satunya bagian opsional.
rds
Saya belum terbiasa dengan kelas-kelas ini, tetapi apakah mungkin bagi kelas-kelas ini untuk menambahkan akun dengan panggilan fungsi tanpa interaksi pengguna? Seperti misalnya menambahkan akun pertukaran microsoft, akun google, akun POP3 / IMAP. Terima kasih.
dackyD
@dackyD ya, Anda dapat menambahkan akun secara terprogram
rds
terima kasih @ rds tetapi berdasarkan penjelasan Anda sepertinya kode sampel tidak cukup. Tampaknya saya perlu menerapkan SyncAdapter dan ContentProvider juga untuk mencapai tujuan saya. Koreksi saya Jika saya salah :)
dackyD
Tepat sekali. Itu adalah arti dari paragraf pertama saya, mereka pergi bersama dan tidak mungkin untuk menggunakan satu tanpa yang lain.
rds
23

Kelas AccountManager terintegrasi dengan akun ponsel Anda. Jadi, jika Anda mengikuti semua panduan dan membuatnya berfungsi dengan benar, Anda akan melihat akun Anda di bawah menu "Pengaturan-> akun dan sinkronisasi". Dari sana Anda dapat menyesuaikan atau bahkan menghapusnya. Selain itu, manajer akun memiliki cache tiket otentikasi untuk akun Anda. Ini dapat digunakan juga jika Anda tidak berencana untuk menyinkronkan akun Anda (sejauh yang saya tahu).

Jika Anda tidak ingin akun Anda muncul di bawah menu itu Anda tidak boleh menggunakan AccountManager dan menyimpan data akun di tempat lain (mungkin dalam preferensi bersama) http://developer.android.com/guide/topics/data/data -storage.html

Mengobrol
sumber
14

Dari http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-1/ :

Bagian pertama dari teka-teki ini disebut Otentikator Akun, yang menentukan bagaimana akun pengguna akan muncul dalam pengaturan "Akun & Sinkronisasi". Menerapkan Otentikator Akun memerlukan 3 buah: layanan yang mengembalikan subkelas AbstractAccountAuthenticator dari metode onBind, kegiatan untuk meminta pengguna memasukkan kredensial mereka, dan file xml yang menggambarkan bagaimana tampilan akun Anda saat ditampilkan kepada pengguna. Anda juga harus menambahkan izin android.permission.AUTHENTICATE_ACCOUNTS ke AndroidManifest.xml Anda.

Makarse
sumber
3
Itu artikel yang bagus, tetapi apakah menurut Anda AccountManager hanya untuk akun yang menyinkronkan kontak dan email, atau dapatkah kita menggunakannya untuk apa pun yang memiliki ID pengguna dan kata sandi?
Phil
@ Phil: Saya tidak pernah menggunakan AccountManager jadi saya tidak bisa memberi tahu Anda. Ingatlah bahwa ini hadir dengan 2.0 jadi jika Anda ingin berjalan di perangkat dengan SDK yang lebih rendah, Anda harus menemukan cara lain untuk menangani login.
Macarse
6
Anda dapat menggunakan manajer akun untuk segala jenis akun, menyinkronkan segala jenis data yang Anda simpan dengan cara apa pun. Lihat github.com/maxpower47/PinDroid untuk contoh menggunakannya untuk menyinkronkan bookmark ke database sqlite.
maxpower47
7

Ini AccountManagerbagus karena alasan berikut:

  • Pertama adalah menyimpan beberapa nama akun dengan berbagai tingkat akses ke fitur aplikasi di bawah satu jenis akun. Misalnya, dalam aplikasi streaming video, satu mungkin memiliki dua nama akun: satu dengan akses demo ke sejumlah video dan yang lainnya dengan akses sebulan penuh ke semua video. Ini bukan alasan utama untuk menggunakan Accounts, karena Anda dapat dengan mudah mengelola itu di aplikasi Anda tanpa perlu hal yang tampak mewah ini Accounts....
  • Keuntungan lain dari penggunaan Accountsadalah untuk menghilangkan otorisasi tradisional dengan nama pengguna dan kata sandi setiap kali fitur resmi diminta oleh pengguna, karena otentikasi terjadi di latar belakang dan pengguna diminta kata sandi mereka hanya dalam kondisi tertentu, yang Saya akan membahasnya nanti.
  • Menggunakan Accountsfitur di android juga menghilangkan kebutuhan untuk mendefinisikan jenis akun sendiri. Anda mungkin menemukan aplikasi menggunakan akun Google untuk otorisasi, yang menghemat kerumitan membuat akun baru dan mengingat kredensial untuk pengguna.
  • Accounts dapat ditambahkan secara mandiri melalui Pengaturan → Akun
  • Otorisasi pengguna lintas platform dapat dengan mudah dikelola menggunakan Accounts. Sebagai contoh, klien dapat mengakses materi yang dilindungi pada saat yang sama di perangkat android dan PC mereka tanpa perlu login berulang.
  • Dari sudut pandang keamanan, menggunakan kata sandi yang sama di setiap permintaan ke server memungkinkan untuk kemungkinan menguping koneksi yang tidak aman. Enkripsi kata sandi tidak memadai di sini untuk mencegah pencurian kata sandi.
  • Akhirnya, alasan penting untuk menggunakan Accountsfitur di android adalah untuk memisahkan dua pihak yang terlibat dalam bisnis yang bergantung pada Accounts, yang disebut autentikator dan pemilik sumber daya, tanpa mengorbankan kredensial klien (pengguna). Istilahnya mungkin tampak agak kabur, tetapi jangan menyerah sampai Anda membaca paragraf berikut ... 😉

Izinkan saya menguraikan yang terakhir dengan contoh aplikasi streaming video. Perusahaan A adalah pemegang bisnis streaming video yang dikontrak oleh Perusahaan B untuk menyediakan layanan streaming premium bagi para anggotanya. Perusahaan B menggunakan metode nama pengguna dan kata sandi untuk mengenali penggunanya. Agar Perusahaan A mengenali anggota premium B, salah satu caranya adalah dengan mendapatkan daftar mereka dari B dan menggunakan mekanisme pencocokan nama pengguna / kata sandi yang serupa. Dengan cara ini, autentikator dan pemilik sumber daya adalah sama (Perusahaan A). Terlepas dari kewajiban pengguna untuk mengingat kata sandi kedua, sangat mungkin bahwa mereka menetapkan kata sandi yang sama dengan profil Perusahaan B mereka untuk menggunakan layanan dari A. Ini jelas tidak menguntungkan.

Untuk menghilangkan kekurangan di atas, OAuth diperkenalkan. Sebagai standar terbuka untuk otorisasi, dalam contoh di atas, OAuth menuntut agar otorisasi dilakukan oleh Perusahaan B (autentikator) dengan menerbitkan beberapa token yang disebut Token Akses untuk pengguna yang memenuhi syarat (pihak ketiga) dan kemudian menyediakan Perusahaan A (pemilik sumber daya) dengan token. Jadi tidak ada token berarti tidak ada kelayakan.

Saya telah menguraikan lebih lanjut tentang ini dan lebih banyak lagi di AccountManagersitus web saya di sini.

Ini adalah aplikasi sederhana menggunakan AccountManager

Ali Nem
sumber