Android SDKでAccountManagerを見て、アカウント情報を保存するために使用されていることを確認しました。したがって、それが何を目的としているのかについての一般的な議論を見つけることができません。 AccountManagerの背後にある意図が何であり、何を購入するのか、これがどのタイプのアカウントに適しているのか、一般的なWebサービスのユーザーのアカウント情報を置く場所はどこでしょうか。
この質問は少し古いですが、私はそれがまだ非常に興味深いと思います。
AccountManager
、SyncAdapter
およびContentProvider
goを一緒に使用します。
でも君ならできる:
ContentProvider
を他のものなしで使用します。AccountManager
を使用します(ただし、 AccountManager
なしでSyncAdapter
は使用できません before Android 2.2/Froyo API 8)AccountManager
/SyncAdapter
/ContentProvider
の場合:
AccountManager
は、ユーザーに資格情報を定義するための中心点([設定]> [アカウント])を提供しますSyncAdapter
を介して同期をいつ実行できるかを決定します。これは、バッテリーを最適化するのに適しています(たとえば、ネットワークがダウンしているときは同期されません)。ContentProvider
は、アプリケーション間でデータを共有する便利な方法です注: Android上のプロセス間通信の他の方法 があります。ContentProvider
は、バックグラウンドスレッドでデータベースアクセスをスケジュールしますAsyncQueryHanlder
は、バックグラウンドスレッドでContentProvider
を照会するのに役立ち、明示的にスレッド化を処理する必要がなく、Application Not Responsive(ANR)エラーを防ぎます。ContentProvider
はContentResolver
のオブザーバーに結び付けられます。これは、コンテンツが変更されたときにビューに簡単に通知できることを意味します。一番下の行:フレームワークAccountManager
/SyncAdapter
/ContentProvider
は、データを同期する場合に役立ちますWebリソースから。 Fake/ ダム実装 はAPI 7で必要です。また、
AsyncTaskLoader
を使用できます最後に、SyncAdapter
を使用する場合、 Firebase Cloud Messaging (以前のGoogle Cloud Messaging)別名「プッシュ通知」を真剣に検討して、最新の更新と最適化されたバッテリー使用量を取得してください。
AccountManagerクラスは、電話アカウントと統合されています。したがって、すべてのガイドに従って正しく動作させると、「設定」->「アカウントと同期」メニューにアカウントが表示されます。そこからカスタマイズしたり、削除することもできます。さらに、accountManagerにはアカウントの認証チケットのキャッシュがあります。これは、アカウントを同期する予定がない場合にも使用できます(私の知る限り)。
アカウントをそのメニューの下に表示したくない場合は、AccountManagerを使用してアカウントデータを他の場所に保存しないでください(共有設定にある可能性があります) http://developer.Android.com/guide/topics /data/data-storage.html
から http://www.c99.org/2010/01/23/writing-an-Android-sync-provider-part-1/ :
パズルの最初のピースはアカウント認証システムと呼ばれ、「アカウントと同期」設定でユーザーのアカウントがどのように表示されるかを定義します。アカウント認証システムを実装するには、3つの部分が必要です。onBindメソッドからAbstractAccountAuthenticatorのサブクラスを返すサービス、ユーザーに資格情報の入力を求めるアクティビティ、およびユーザーに表示されるときのアカウントの外観を記述するxmlファイルです。また、Android.permission.AUTHENTICATE_ACCOUNTS権限をAndroidManifest.xmlに追加する必要があります。
AccountManager
は、次の理由で適切です。
Accounts
を使用する主な理由ではありません。これは、この派手なAccounts
モノを必要とせずにアプリで簡単に管理できるためです。Accounts
を使用するもう1つの利点は、認証がバックグラウンドで行われ、ユーザーにパスワードが要求されるため、ユーザーが認証機能を要求するたびにユーザー名とパスワードを使用して従来の認証を削除することです特定の条件でのみ、これについては後で説明します。Accounts
機能を使用すると、自分のアカウントタイプを定義する必要もなくなります。おそらく、承認のためにGoogleアカウントを使用するアプリに出くわすことになります。新しいアカウントを作成し、ユーザーの資格情報を記憶します。Accounts
は、[設定]→[アカウント]から個別に追加できますAccounts
を使用して簡単に管理できます。たとえば、クライアントは、AndroidデバイスとPCで、保護されたマテリアルに同時にアクセスできます。繰り返しログインする必要はありません。Accounts
機能を使用する重要な理由は、Accounts
に依存するビジネスに関係する2つのパーティを分離することです。クライアント(ユーザー)の資格情報を損なうことなく、所有者。用語はかなり曖昧に見えるかもしれませんが、次の段落を読むまであきらめないでください…ビデオストリーミングアプリの例を使用して、後者について詳しく説明します。 A社は、特定のメンバーにプレミアムストリーミングサービスを提供するためにB社と契約しているビデオストリーミングビジネスの保有者です。会社Bは、ユーザーを認識するためにユーザー名とパスワードを使用します。会社AがBのプレミアムメンバーを認識するための1つの方法は、Bからメンバーのリストを取得し、同様のユーザー名/パスワードマッチングメカニズムを利用することです。このように、認証者とリソース所有者は同じです(会社A)。 2番目のパスワードを記憶するというユーザーの義務とは別に、Aからのサービスを使用するためにB社のプロファイルと同じパスワードを設定する可能性が非常に高くなります。これは明らかに好ましくありません。
上記の欠点を緩和するために、OAuthが導入されました。上記の例では、承認のオープンスタンダードとして、OAuthはB社による承認を要求しています。 (認証者)資格のあるユーザー(サードパーティ)にアクセストークンと呼ばれるトークンを発行し、次にトークンを会社A(リソース所有者)に提供します。
これについてさらに詳しく説明し、ウェブサイトのAccountManager
について詳しく説明しました here。