2012-04-27 14 views
5

Kimlik doğrulamasıyla uğraşırken Android mimarisiyle ilgili birkaç kuşkum var.Android kimlik doğrulamasında niyetleri anlama

Kimlik doğrulaması yapmam gereken belirli bir hesap için AccountManager.getAuthToken numaralı telefonu aradığım varsayalım. Kötü şifre nedeniyle kimlik doğrulamanın başarısız olduğunu varsayalım. AbstractAccountAuthenticator sözleşmesi, kimlik doğrulayıcının KEY_INTENT aracılığıyla kullanıcı adı/parola girdisini işleyen Activity ile bir Bundle döndürmesini gerektirir.

Soruma sorum: kullanıcı arabirimini kimin göstermesi gerekiyor? Android, KEY_INTENT'un mevcut olduğunu ve UI'yi çalıştırdığını veya AccountManager'un yanıtında yer alan niyetle startActivity kodunun yapıldığını otomatik olarak algılıyor mu? Aynısı, sonucu bir Gelecek arayüzü üzerinden birleştiren AccountManager.addAccount için de geçerlidir.

Bu konularla ilgili bazı eğiticileri nereden bulabilirim?

KEY_INTENT mevcut olduğunda otomatik olarak aktiviteyi göstermiyor size

cevap

0

sistem ederiz. Bu aktiviteyi başlatmak size kalmıştır.

İşte bazı örnek kod:

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 
     } 
    } 
} 

Bunun Aradığın ne umut, ama durumda ben sorunuzu doğru, netleştirmek lütfen anlamadı.

Şerefe!

+0

Ya ** bir geriçağırım kullanmıyorsam? Soruyu sordum çünkü bir niyetin kimlik doğrulayıcısı tarafından döndürülmesi durumunda UI'nin yapması gerekip gerekmediğini bilmek istiyorum. Sistem otomatik olarak gösteriliyor mu veya kodu arayan kişide uygulamak zorunda mıyım? Ben sadece sistemin amacı çalıştırabileceğini düşünmeye başladım çünkü hesap yaratıcısıyla aynı UID ile çalışması gerekiyor. Gerçekten kafam karıştı –

+0

[Ekle] İlk cümlenin * olduğunu tahmin ediyorum * cevap: her arayan tüm mantığı uygulamak zorundadır ... –

İlgili konular