Android SDKでAccountManagerを確認しましたが、アカウント情報の保存に使用されています。したがって、私はそれが何を意図しているのかについての一般的な議論を見つけることができません。AccountManagerの背後にある意図と、それがあなたに何をもたらすかについての有益な議論を知っている人はいますか?これがどのタイプのアカウントに適しているかについての意見はありますか?これは、一般的なWebサービスのユーザーのアカウント情報を配置する場所ですか?
4 に答える
この質問は少し古いですが、それでも興味深いと思います。
AccountManager
、一緒SyncAdapter
にContentProvider
行きます。
でも君ならできる:
- 他なしで を使用し
ContentProvider
ます。 - 他なしで を使用し
AccountManager
ます (ただし、Android 2.2 / Froyo API 8 より前ではなしで を使用できません)。AccountManager
SyncAdapter
AccountManager
/ SyncAdapter
/付きContentProvider
:
AccountManager
ユーザーが資格情報を定義するための中心点 ([設定] > [アカウント]) を提供します- を介していつ同期を実行できるかは、Android によって決定され
SyncAdapter
ます。これは、バッテリーを最適化するのに適しています (たとえば、ネットワークがダウンしている場合、同期は行われません)。 ContentProvider
は、アプリケーション間でデータを共有する便利な方法です。注: Android のプロセス間通信には他の方法があります。でクエリを実行するのにContentProvider
バックグラウンド スレッドでデータベース アクセスをスケジュールする は、バックグラウンド スレッドAsyncQueryHanlder
役立ちContentProvider
、アプリケーションが応答しない (ANR) エラーを防ぎながら、スレッド化を明示的に処理する必要はありません。ContentProvider
のオブザーバーに結び付けられContentResolver
ます。これは、コンテンツが変更されたときにビューに簡単に通知できることを意味します
結論: フレームワークはAccountManager
// Web リソースからのデータを同期したい場合に役立ちますSyncAdapter
。ContentProvider
API 7 ではFake/ Dumb の実装が必要です。
- データのみを保存する場合は、データ保存のためのより単純なメカニズムを検討する必要があります
- リソースのみを取得する必要がある場合は、
AsyncTaskLoader
- 画像を非同期で読み込みたい場合は、Square Picassoなどの専用ライブラリを使用できます
- 特定の時間にいくつかのコードのみを実行したい場合は、サービス/アラームを検討できます
- API >= 7 からのみ利用可能 (これはもはや問題ではありません)
最後に、 を使用している場合は、 Firebase Cloud MessagingSyncAdapter
(以前の 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/から:
パズルの最初のピースは Account Authenticator と呼ばれ、ユーザーのアカウントが [Accounts & Sync] 設定でどのように表示されるかを定義します。アカウント認証システムの実装には、onBind メソッドから AbstractAccountAuthenticator のサブクラスを返すサービス、ユーザーに認証情報を入力するよう求めるアクティビティ、ユーザーに表示されるアカウントの外観を記述した xml ファイルの 3 つの部分が必要です。また、android.permission.AUTHENTICATE_ACCOUNTS パーミッションを AndroidManifest.xml に追加する必要があります。
はAccountManager
次の理由で優れています。
- 1 つ目は、アプリの機能へのアクセス レベルが異なる複数のアカウント名を 1 つのアカウント タイプに保存することです。たとえば、ビデオ ストリーミング アプリでは、2 つのアカウント名を持つことができます。1 つは限られた数のビデオへのデモ アクセス権があり、もう 1 つはすべてのビデオへの 1 か月間アクセス権があります。ただし、これは を使用する主な理由ではありません。
Accounts
なぜなら、この手の込んだものを必要とせずにアプリで簡単に管理できるからですAccounts
… . - を使用するもう 1 つの利点は
Accounts
、認証がバックグラウンドで行われ、ユーザーは特定の条件でのみパスワードを求められるため、認証機能がユーザーによって要求されるたびに、ユーザー名とパスワードによる従来の認証を取り除くことです。後で説明します。 - Android でこの機能を使用する
Accounts
と、独自のアカウント タイプを定義する必要もなくなります。おそらく、認証に Google アカウントを使用するアプリに出くわしたことがあるでしょう。これにより、新しいアカウントを作成し、ユーザーの資格情報を覚えておく手間が省けます。 Accounts
設定→アカウントから個別に追加できます- クロスプラットフォームのユーザー認証は、 を使用して簡単に管理できます
Accounts
。たとえば、クライアントは、何度もログインしなくても、Android デバイスと PC で同時に保護された素材にアクセスできます。 - セキュリティの観点から、サーバーへのすべてのリクエストで同じパスワードを使用すると、安全でない接続での盗聴が可能になります。ここでは、パスワードの盗難を防ぐには、パスワードの暗号化だけでは不十分です。
- 最後に、android でこの機能を使用する重要な理由は、クライアント (ユーザー) の資格情報を危険にさらすことなく、に
Accounts
依存するビジネスに関与する 2 つの当事者Accounts
、いわゆるオーセンティケーターとリソース所有者を分離することです。用語はかなり曖昧に見えるかもしれませんが、次の段落を読むまであきらめないでください…
ビデオ ストリーミング アプリの例を使用して、後者について詳しく説明します。A 社は、特定のメンバーにプレミアム ストリーミング サービスを提供するために、B 社と契約を結んでいるビデオ ストリーミング ビジネスの所有者です。B 社は、ユーザーを認識するためにユーザー名とパスワードの方法を採用しています。会社 A が B のプレミアム メンバーを認識する 1 つの方法は、B からメンバーのリストを取得し、同様のユーザー名/パスワード マッチング メカニズムを利用することです。このように、オーセンティケーターとリソース所有者は同じです (会社 A)。2 番目のパスワードを覚えておくというユーザーの義務とは別に、A 社のサービスを使用するために B 社のプロファイルと同じパスワードを設定する可能性が非常に高くなります。これは明らかに好ましくありません。
上記の欠点を緩和するために、OAuth が導入されました。認可のオープン スタンダードとして、上記の例では、OAuth は、資格のあるユーザー (サード パーティ) に対して Access Token と呼ばれる何らかのトークンを発行し、企業 A (リソース オーナー) に提供することによって、企業 B (認証者) によって認可が行われることを要求します。トークン。したがって、トークンがないということは、資格がないことを意味します。
AccountManager
これについては、こちらのウェブサイトで詳しく説明しています。