Android AccountManager'ı ne için kullanmalıyım?


154

Android SDK'da AccountManager'ı gördüm ve hesap bilgilerini depolamak için kullanıldığını gördüm. Böylece, ne için tasarlandığı konusunda genel bir tartışma bulamıyorum. Herkes AccountManager'ın arkasındaki niyetin ne olduğunu ve size ne aldığını yararlı bir şekilde tartışıyor mu? Bunun ne tür Hesaplar için uygun olduğuna dair herhangi bir görüşünüz var mı? Burası, genel bir web hizmeti için kullanıcı hesap bilgilerinizi koyacağınız yer mi?


Not 2.1 ve üzerini hedefliyorum, bu yüzden makul bir seçimse AccountManager'ı kullanabilirim
Phil

7
Bu yazıda bu soru hakkında bir bölüm var: udinic.wordpress.com/2013/04/24/…
Udinic

@Udinic - Teşekkürler. Çok yardım!
Chad Bingham

Bu konu bu sitede ele alınmıştır: www.digigene.com/android/accounts-in-android/
Ali Nem

Ayrıca burada android hesap yönetimi için bir kütüphane var .
Ali Nem

Yanıtlar:


94

Bu soru biraz eski, ama bence hala ilgi çekicidir.

AccountManager, SyncAdapterVe ContentProviderbirlikte gidin.

Ama sen yapabilirsin:

İle AccountManager/ SyncAdapter/ ContentProvider:

  • AccountManager kullanıcılara kimlik bilgilerini tanımlamaları için merkezi bir nokta (Ayarlar> Hesaplar) verir
  • Android, senkronizasyonun ne zaman yapılacağına karar verir SyncAdapter. Bu, pili optimize etmek için iyi olabilir (örneğin, ağ kapalıyken senkronizasyon yapılmaz)
  • ContentProviderVerileri uygulamalar arasında paylaşmanın kolay bir yoludur Not: Android'de süreçler arası iletişim için başka yöntemler de vardır .
  • ContentProviderzamanlamaları bir arka planda veritabanı erişimi iplikAsyncQueryHanlder sorgulamak için yardımcı olur ContentProvideraçıkça parçacığı işlemek için ihtiyaç duymaz uygulaması değil Duyarlı (ANR) hataları engelleyen bir arka plan iş parçacığı.
  • ContentProviderContentResolvergözlemcisine bağlanır : bu, içerik değiştirildiğinde görüntülemeleri bildirmenin kolay olduğu anlamına gelir

Alt satır : çerçeve , bir web kaynağından veri senkronize etmek istiyorsanız AccountManager/ SyncAdapter/ ContentProvideryardımcı olur. API 7'de sahte / aptal uygulamalar gereklidir.

  • Yalnızca veri depolamak istiyorsanız, veri depolama için daha basit bir mekanizma düşünmelisiniz
  • Yalnızca tek bir kaynak getirmeniz gerekiyorsa, AsyncTaskLoader
  • Görüntüleri eşzamansız olarak yüklemek istiyorsanız, Square Picasso gibi özel kütüphaneleri kullanabilirsiniz
  • Belirli bir zamanda yalnızca bazı kodları yürütmek istiyorsanız, bir Servis / Alarmı düşünebilirsiniz.
  • yalnızca API> = 7'den elde edilebilir (bu artık önemli değil)

Son olarak, daha güncellemeler ve optimize edilmiş pil kullanımı için Firebase Cloud Messaging'i (daha önce Google Cloud Messaging) aka "push bildirimleri" olarak SyncAdapterdüşünün .


1
SDK örneğinde, AccountAuthentificatorActivity isteğe bağlı tek parçadır.
rds

Ben henüz bu sınıflar aşina değilim ama bu sınıflar kullanıcı etkileşimi olmadan işlev çağrıları ile bir hesap eklemek mümkün mü? Örneğin bir microsoft exchange hesabı, google hesabı, POP3 / IMAP hesabı eklemek gibi. Teşekkürler.
dackyD


@rds teşekkürler ama açıklamanıza göre örnek kod yeterli görünmüyor. Hedeflerime ulaşmak için de bir SyncAdapter ve ContentProvider uygulamam gerekiyor gibi görünüyor. Düzelt beni yanılıyorsam :)
dackyD

Kesinlikle doğru. İlk paragrafımın anlamı buydu, birlikte gidiyorlar ve birini diğeri olmadan kullanmak imkansız.
rds

23

AccountManager sınıfı, telefon hesaplarınızla entegredir. Dolayısıyla, tüm kılavuzları takip ederseniz ve doğru şekilde çalışırsanız, hesaplarınızı "Ayarlar-> hesaplar ve senkronizasyon" menüsü altında görürsünüz. Oradan özelleştirebilir veya hatta silebilirsiniz. Ayrıca accountManager'da hesaplarınız için kimlik doğrulama biletleri önbelleği bulunur. Bu, hesabınızı senkronize etmeyi planlamıyorsanız da (bildiğim kadarıyla) kullanılabilir.

Hesaplarınızın bu menü altında görünmesini istemiyorsanız, AccountManager'ı kullanmamalı ve hesap verilerini başka bir yerde (belki paylaşılan tercihlerde) depolamamalısınız http://developer.android.com/guide/topics/data/data -storage.html


14

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

Bulmacanın ilk parçasına, kullanıcının hesabının "Hesaplar ve Senkronizasyon" ayarlarında nasıl görüneceğini tanımlayan Hesap Doğrulayıcı denir. Bir Hesap Kimlik Doğrulayıcısının uygulanması 3 parça gerektirir: onBind yönteminden AbstractAccountAuthenticator alt sınıfını döndüren bir hizmet, kullanıcıdan kimlik bilgilerini girmesini isteyen bir etkinlik ve hesabınızın kullanıcıya görüntülendiğinde nasıl görünmesi gerektiğini açıklayan bir xml dosyası. AndroidManifest.xml dosyasına android.permission.AUTHENTICATE_ACCOUNTS iznini de eklemeniz gerekir.


3
Bu iyi bir makale, ancak AccountManager'ın yalnızca kişileri ve e-postayı senkronize eden hesaplar için olduğunu mu düşünüyorsunuz yoksa kullanıcı kimlikleri ve şifreleri olan herhangi bir şey için kullanabilir miyiz / kullanmalıyız?
Phil

@Phil: Hiç AccountManager kullanmadım, bu yüzden size söyleyemem. Bunun 2.0 ile geldiğini unutmayın, bu nedenle daha düşük SDK'ya sahip cihazlarda çalışmaya hazırsanız, giriş yapmanın başka bir yolunu bulmanız gerekecektir.
Macarse

6
Herhangi bir hesap için hesap yöneticisini kullanabilirsiniz, böylece sakladığınız her türlü veriyi herhangi bir şekilde senkronize edebilirsiniz. Check out github.com/maxpower47/PinDroid sqlite veritabanına senkronizasyon imleri için kullanarak bir örnek için.
maxpower47

7

AccountManagerAşağıdaki nedenlerden dolayı iyidir:

  • Birincisi, uygulamanın özelliklerine farklı erişim düzeylerine sahip birden fazla hesap adını tek bir hesap türü altında depolamaktır. Örneğin, bir video akışı uygulamasında birinin iki hesap adı olabilir: biri sınırlı sayıda videoya demo erişimi ve diğeri tüm videolara tam ay erişimi olan. AccountsBununla birlikte, bu kullanımın ana nedeni değildir , çünkü bu süslü görünüme gerek kalmadan uygulamanızda kolayca yönetebilirsiniz Accounts….
  • Kullanmanın bir diğer avantajı Accounts, kullanıcı tarafından yetkilendirilmiş bir özellik her istendiğinde, geleneksel yetkilendirmeden kullanıcı adı ve parola ile kurtulmaktır, çünkü kimlik doğrulama arka planda gerçekleşir ve kullanıcıdan parolalarını yalnızca belirli koşullarda sorulur; Daha sonra anlatacağım.
  • AccountsAndroid'deki özelliği kullanmak, kişinin kendi hesap türünü tanımlama ihtiyacını da ortadan kaldırır. Muhtemelen, yetkilendirme için Google hesaplarını kullanan uygulamalarla karşılaştınız; bu, yeni bir hesap oluşturma ve kullanıcı için kimlik bilgilerini hatırlama zahmetinden kurtarır.
  • Accounts Ayarlar → Hesaplar aracılığıyla bağımsız olarak eklenebilir
  • Platformlar arası kullanıcı yetkilendirmesi kullanılarak kolayca yönetilebilir Accounts. Örneğin, istemci, tekrar tekrar oturum açmaya gerek kalmadan korumalı malzemeye android cihazlarında ve PC'lerine aynı anda erişebilir.
  • Güvenlik açısından, sunucuya yapılan her istekte aynı parolayı kullanmak, güvenli olmayan bağlantılarda gizli dinlemeyi mümkün kılar. Şifre şifreleme burada şifre hırsızlığını önlemek için yeterli değildir.
  • Son olarak, bu Accountsözelliği android'de kullanmanın önemli bir nedeni Accounts, istemcinin (kullanıcının) kimlik bilgilerinden ödün vermeden, kimlik doğrulayıcı ve kaynak sahibi adı verilen herhangi bir işletmeye bağlı iki tarafı birbirinden ayırmaktır . Terimler oldukça belirsiz görünebilir, ancak aşağıdaki paragrafı okuyana kadar pes etmeyin… 😉

İkincisini bir video akışı uygulaması örneği ile ayrıntılı olarak açıklayayım. A Şirketi, belirli üyelerine premium akış hizmetleri sunmak için B Şirketi ile sözleşmeli bir video akışı işletmesinin sahibidir. B Şirketi, kullanıcısını tanımak için bir kullanıcı adı ve şifre yöntemi kullanmaktadır. A şirketinin B'nin premium üyelerini tanıması için bir yol, onların listesini B'den almak ve benzer kullanıcı adı / şifre eşleştirme mekanizmasını kullanmak olacaktır. Bu şekilde, doğrulayıcı ve kaynak sahibi aynıdır (A Şirketi). Kullanıcıların ikinci bir parolayı hatırlama yükümlülüğünün yanı sıra, Şirket B'nin A hizmetlerini kullanmak için kullandıkları profil ile aynı parolayı ayarlamaları çok olasıdır. Bu kesinlikle uygun değildir.

Yukarıdaki eksiklikleri gidermek için OAuth tanıtıldı. Yetkilendirme için açık bir standart olarak OAuth, yetkilendirmenin uygun kullanıcılar (üçüncü taraf) için Erişim Jetonu adı verilen bir token vererek ve daha sonra belirteci. Dolayısıyla hiçbir belirteç uygunluk anlamına gelmez.

Bu konuda daha fazla ve AccountManagerweb sitemde daha fazla ayrıntı verdim .

Bu AccountManager kullanarak basit bir uygulama

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.