Android AccountManagerの用途は何ですか?


154

私はAndroid SDKでAccountManagerを見てきましたが、それはアカウント情報を格納するために使用されます。したがって、私はそれが何を意図しているのかについての一般的な議論を見つけることができません。誰かがAccountManagerの背後にある意図とそれがあなたを買うものについての有益な議論を知っていますか?これがどのタイプのアカウントに適しているかについての意見はありますか?ここに、一般的なWebサービスのユーザーのアカウント情報を入れますか?


私は2.1以上を対象としているため、賢明な選択であればAccountManagerを使用できます
Phil

7
この記事では、この問題に関するセクションがあります:udinic.wordpress.com/2013/04/24/...
Udinic

@Udinic-ありがとう。たくさんの助け!
チャドビンガム

このトピックは、次のサイトで処理されます:www.digigene.com/android/accounts-in-android/
Ali Nem

こちらには、androidのアカウント管理用のライブラリもあります
Ali Nem 2016

回答:


94

この質問は少し古いですが、私はそれがまだ非常に興味深いと思います。

AccountManagerSyncAdapterそしてContentProvider一緒に行きます。

でも君ならできる:

AccountManager/ SyncAdapter/ ContentProvider

  • AccountManager 資格情報を定義するための中心点(設定>アカウント)をユーザーに提供します
  • Androidは、を介して同期を実行できるタイミングを決定しSyncAdapterます。これはバッテリーを最適化するのに適しています(たとえば、ネットワークがダウンしている場合は同期は行われません)。
  • ContentProviderは、アプリケーション間でデータを共有するための便利な方法です。注:Androidには、プロセス間通信の他の方法があります。
  • ContentProviderスケジュールバックグラウンドスレッドでのデータベースへのアクセスをAsyncQueryHanlder照会することができますContentProvider明示的にスレッドを処理するためにあなたを必要としないながら(ANR)のエラー応答しないアプリケーションを防止し、バックグラウンドスレッドで。
  • ContentProviderContentResolverのオブザーバーと連携:これは、コンテンツが変更されたときにビューに通知するのが簡単であることを意味します

ボトムライン:フレームワークAccountManager/ SyncAdapter/ ContentProviderあなたがウェブリソースからデータを同期したい場合に役立ちます。API 7 では、Fake / Dumb実装が必要です。

  • データを保存するだけの場合は、データストレージのより単純なメカニズムを検討する必要があります
  • 唯一のリソースを取得する必要がある場合は、 AsyncTaskLoader
  • 画像を非同期でロードする場合は、Square Picassoなどの専用ライブラリを使用できます
  • 特定の時間に一部のコードのみを実行したい場合は、サービス/アラームを検討できます
  • API> = 7からのみ利用可能(これは問題ではなくなりました)

最後に、を使用する場合はSyncAdapterFirebase Cloud Messaging(以前のGoogle Cloud Messaging)、つまり「プッシュ通知」を真剣に検討して、更新を更新し、バッテリー使用量を最適化してください。


1
SDKサンプルでは、AccountAuthentificatorActivityが唯一のオプション部分です。
rds

私はまだこれらのクラスに精通していませんが、これらのクラスがユーザーの操作なしで関数呼び出しを持つアカウントを追加することは可能ですか?たとえば、Microsoft Exchangeアカウント、Googleアカウント、POP3 / IMAPアカウントを追加します。ありがとう。
dackyD '17年

@dackyDはい、あなたはできるプログラムでアカウントを追加する
RDS

@rdsに感謝しますが、あなたの説明に基づいて、サンプルコードでは十分ではないようです。私の目標を達成するには、SyncAdapterとContentProviderも実装する必要があるようです。私が間違っている場合は私を修正してください:)
dackyD '25年

正解です。それは私の最初の段落の意味でした、彼らは一緒に行き、他のものなしで一つを使用することは不可能です。
2012年

23

AccountManagerクラスは、電話アカウントと統合されています。したがって、すべてのガイドに従って正しく機能すると、メニューの[設定]-> [アカウントと同期]にアカウントが表示されます。そこから、それらをカスタマイズしたり、削除することもできます。さらに、accountManagerには、アカウントの認証チケットのキャッシュがあります。これは、(私の知る限り)アカウントを同期する予定がない場合にも使用できます。

あなたのアカウントは、そのメニューの下に表示したくない場合は、AccountManagerをを使用して、別の場所(おそらく共有好みで)アカウントデータを保存しないでくださいhttp://developer.android.com/guide/topics/data/data -storage.html


14

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

パズルの最初のピースはアカウント認証システムと呼ばれ、「アカウントと同期」設定でユーザーのアカウントがどのように表示されるかを定義します。アカウント認証を実装するには、3つの要素が必要です。onBindメソッドからAbstractAccountAuthenticatorのサブクラスを返すサービス、ユーザーに資格情報の入力を求めるアクティビティ、およびユーザーに表示したときにアカウントがどのように表示されるかを記述したxmlファイルです。また、android.permission.AUTHENTICATE_ACCOUNTS権限をAndroidManifest.xmlに追加する必要があります。


3
これは良い記事ですが、AccountManagerは連絡先と電子メールを同期するアカウント専用であると思いますか、それともユーザーIDとパスワードを持つものに使用できますか?
Phil

@Phil:AccountManagerを使用したことがないので、わかりません。これは2.0に付属しているので、SDKが低いデバイスで実行する場合は、ログインを処理する別の方法を見つける必要があります。
Macarse 2010

6
アカウントマネージャを使用して、あらゆる種類のアカウントを作成し、あらゆる方法で保存したあらゆる種類のデータを同期できます。ブックマークをsqliteデータベースに同期するための使用例については、github.com / maxpower47 / PinDroidご覧ください。
maxpower47

7

AccountManager次の理由により、これは適切です。

  • 1つ目は、アプリの機能へのアクセスレベルが異なる複数のアカウント名を1つのアカウントタイプで保存することです。たとえば、ビデオストリーミングアプリでは、2つのアカウント名を持つことができます。1つは限られた数のビデオへのデモアクセスがあり、もう1つはすべてのビデオへの1か月のアクセスがあります。Accountsただし、これはを使用する主な理由ではありませんAccounts。この派手な外観を必要とせずに、アプリで簡単に管理できるためです。
  • を使用する他の利点はAccounts、認証がバックグラウンドで行われ、ユーザーが特定の条件でのみパスワードを要求されるため、ユーザーが認証された機能がユーザーによって要求されるたびに、ユーザー名とパスワードによる従来の認証を取り除くことです後でそれに行きます。
  • AccountsAndroidでこの機能を使用すると、自分のアカウントタイプを定義する必要もなくなります。おそらく、承認のためにGoogleアカウントを使用するアプリに出くわしているので、新しいアカウントを作成してユーザーの資格情報を覚えておく手間が省けます。
  • Accounts 設定→アカウントで個別に追加できます
  • を使用して、クロスプラットフォームのユーザー認証を簡単に管理できますAccounts。たとえば、クライアントは、繰り返しログインする必要なく、AndroidデバイスとPCで同時に保護されたコンテンツにアクセスできます。
  • セキュリティの観点から、サーバーへのすべてのリクエストで同じパスワードを使用すると、安全でない接続での盗聴の可能性があります。パスワードの暗号化は、パスワードの盗難を防ぐにはここでは不十分です。
  • 最後に、AccountsAndroidでこの機能を使用する重要な理由はAccounts、クライアント(ユーザー)の認証情報を損なうことなく、いわゆるオーセンティケーターとリソースオーナーに依存するビジネスに関与する2つの当事者を分離することです。用語は曖昧に見えるかもしれませんが、次の段落を読むまであきらめないでください…😉

後者について、ビデオストリーミングアプリの例を使って詳しく説明します。A社は、B社と契約して特定のメンバーにプレミアムストリーミングサービスを提供するビデオストリーミング事業の所有者です。B社は、ユーザーを認識するためにユーザー名とパスワードを使用します。A社がBのプレミアムメンバーを認識するための1つの方法は、Bからそれらのリストを取得し、同様のユーザー名/パスワードマッチングメカニズムを利用することです。このように、認証システムとリソース所有者は同じです(A社)。ユーザーが2番目のパスワードを覚えておく義務があることは別にして、A社のサービスを使用するためにB社のプロファイルと同じパスワードを設定する可能性が非常に高いです。これは明らかに好ましくありません。

上記の欠点を緩和するために、OAuthが導入されました。承認のオープンスタンダードとして、上記の例では、OAuthは、適格なユーザー(サードパーティ)にアクセストークンと呼ばれるトークンを発行し、会社A(リソースオーナー)にトークン。したがって、トークンがないことは資格がないことを意味します。

私はこれについてさらに詳しく説明しAccountManager、私のウェブサイト詳しく説明します。

これはAccountManagerを使用したシンプルなアプリです

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.