2012-04-27 21 views
5

認証を扱う際にAndroidアーキテクチャについて疑問を抱いています。Android認証の意図を理解する

認証する必要がある特定のアカウントに対してAccountManager.getAuthTokenと呼んだとします。パスワードが間違っているために認証に失敗したとします。 AbstractAccountAuthenticator契約では、オーセンティケータはを返信し、KEY_INTENTを介してユーザー名/パスワードの入力を処理するActivityを返します。

私の質問は、誰がUIを表示するはずですか? AndroidはKEY_INTENTが存在していることを自動的に検出してUIを実行するのですか?startActivityにはAccountManagerの応答が反映されていますか?同じことがAccountManager.addAccountに適用され、Futureインタフェースを介して結果がバンドルされます。

これらのトピックに関するチュートリアルはどこにありますか?

KEY_INTENTが存在する場合、システムが自動的に活性を示さないあなたに

答えて

0

ありがとうございます。 その活動を開始するのはあなた次第です。ここで

は、いくつかのサンプルコードです:

private AccountManagerCallback<Bundle> mAccountManagerCallback = new AccountManagerCallback<Bundle>() { 

    public void run(AccountManagerFuture<Bundle> future) { 

     Bundle bundle; 
     try { 

      bundle = future.getResult(); 
      //if an intent was sent, start the required activity 
      if (bundle.containsKey(AccountManager.KEY_INTENT)) { 
       Intent intent = bundle.getParcelable(AccountManager.KEY_INTENT); 

       //clear the new task flag just in case, since a result is expected 
       int flags = intent.getFlags(); 
       flags &= ~Intent.FLAG_ACTIVITY_NEW_TASK; 
       intent.setFlags(flags); 

       startActivityForResult(intent, REQUEST_CODE_AUTH); 

     } else { 
      //otherwise, just get the credentials 
      if (bundle.containsKey(AccountManager.KEY_AUTHTOKEN)) { 
        String authToken = bundle.getString(AccountManager.KEY_AUTHTOKEN); 
        String userMail  = bundle.getString(AccountManager.KEY_ACCOUNT_NAME); 
        //use the credentials 
      } 
     } 
     } 
     catch(...) { 
     ... 
     //handle errors, maybe retry your getAuthToken() call 
     } 
    } 
} 

私は、これはあなたが探していたものであると思いますが、私が正しくあなたの質問を理解していなかった場合には、明確にしてください。

乾杯!

+0

コールバックを使用していない場合はどうすればいいですか?インテントがオーセンティケータによって返された場合にUIが何をしなければならないかを知りたいので、私は質問しました。システムは自動的にそれを表示するか、呼び出し側にコードを実装する必要がありますか?私は、アカウント作成者と同じUIDで実行する必要があるため、システムだけがインテントを実行できると思っています。私は本当に混乱しています –

+0

[追加]あなたの最初の文は*答えです:すべての呼び出し元はすべてのロジックを実装する必要があります... –

関連する問題