8

Android のアカウント管理をアプリケーションに統合し、Accounts & Sync設定からアカウントを管理できます。

ユーザーのパスワードを記憶するオプションを使用して、ログインに成功するとユーザーをホームアクティビティに転送する従来のログインアクティビティが必要です。ただし、は資格情報と残りのアカウント情報とともにAccountAuthenticatorActivity結果を に返す必要があり、明示的を呼び出してインテントを返します。AccountManagerfinish()

ログイン アクティビティAccountManagerを行わなくても、必要な情報を提供するにはどうすればよいですか?finish()

4

3 に答える 3

20

AccountManager は、対話型アプリケーションではなく、同期アダプターによって呼び出されることを意図しています。(優れたチュートリアルは「Did You Win Yet? » Writing an Android Sync Provider」のパート 1パート 2で、優れたコード例が示されていますが、データ フローの説明にはあまり役立っていません)。

データベースをラップする ContentProvider を開発します。SyncAdapter (これはバックグラウンド サービスです) を構築して、サーバーに接続し、データをフェッチして、サーバーと一致するように ContentProvider を同期します。次に、UI が ContentProvider にクエリを実行して、取得したデータを表示します。たとえば、結果を検索してキャッシュする場合など、特定の情報を直接クエリする方法もいくつかあります。データ モデルがどのように見えるべきかについての 1 時間のセッションについては、RESTful Android アプリの開発を参照してください。彼らは、「単純な」実装から始めて、適切な SyncAdapter モデルに進む 3 つのアーキテクチャの例を示しています。

認証自体に関しては、SyncAdapter が AccountManager を使用する方法は、認証トークンを取得することです。これは (多くの場合) 大きな 16 進数値であり、ユーザー名/パスワードのペアの代わりに HTML ヘッダーの一部として渡されます。1 つのセッションの一意のキーと考えてください。キーの所有は認証の証明であり、定期的に有効期限が切れます。それらが期限切れになると、再認証して新しいものをフェッチします。SyncAdapter は AccountManager に、特定のアカウントの種類とユーザー名の組み合わせの認証トークンを要求します。AccountManager はサーバーで認証し (変更により必要に応じてユーザーに新しいパスワードを要求します)、トークンを SyncAdapter に返します。SyncAdapter はそれ以降、それを使用します。

このモデルがアプリケーションに適していない場合は、代わりにアプリ コードでログイン/ログアウトを手動で処理する必要があります。ちょっとした痛み、私は知っています。

于 2011-03-16T11:53:45.930 に答える
11

@jcwengerそれは完全に正しいわけではありません。AccountManagerインタラクティブなアプリケーションからも使用できます。たとえば、AccountManageraddAccountExplicitly()メソッドを使用して、アカウント マネージャー インターフェイスを呼び出さずにアカウントを追加できます。

「まだ勝ったの?」について この記事では、アカウント マネージャーがアプリケーションの独自の から呼び出されていることがはっきりとわかりますActivity。これは、アプリケーションに独自のアカウント管理インターフェイスがある場合に役立ちます。

于 2011-11-30T02:59:03.480 に答える
1

AccountManager を使用した「クラシック フロー」の私のバージョン:

私は自分の AuthenticatorActivity を、それが使用される通常のケースの両方で使用します。アカウントと同期の設定ですが、同じアカウントに依存するアプリケーションで使用するためにも開いています。Authenticator が実装された別の apk と、これらのアカウントに依存する他のアプリ (別の apk) があります。

取り扱い事例:

  • 通常のケース: ユーザーは経由で追加/認証します。アカウントと同期 (Android サンプル プロジェクトによる)

  • 外部アプリからの認証リクエストの処理: どのように? Authenticator アプリのマニフェストにインテント フィルターを用意して、他のアプリが AuthenticatorActivity を介してインスタンス化できるようにします。startActivityForResult (自分が誰であるか (アプリのパッケージ) を示すインテント エクストラを含める必要があります)。AuthenticatorActivity では、このケースを検出し、認証プロセスが終了したときに setAccountAuthenticatorResult の呼び出しを控えます。これは、上記の通常のケースでの使用を予約しているためです。ユーザーは資格情報を入力し、サインインを押します: AccountManger が一致するアカウントをチェックし、一致した場合は、そのアカウントのユーザー名を呼び出し元のアプリのパッケージのアクティブなユーザーとして保持します。次に、呼び出し元のアプリにインテントを返します。成功を示す setResult、ユーザー名とアカウントの種類。

これが誰かに役立つことを願っています。

于 2013-05-30T11:02:37.243 に答える