2012-02-13 18 views
10

Programcı değilim, ama bunu kendim yapmalıyım. Biraz yardıma ihtiyacım var.Google OpenID ile Android kimlik doğrulaması. Sırada ne var?

Son iki gündür bir çözüm arıyordum ve bulamıyorum.

Tamam. Android Native App yazıyorum. İlk hedefim, Google Hesabı üzerinden giriş yapmak (telefona önceden ayarlanmış) sağlamaktır. Ben "com.google" hesabı almak için AccountManager kullanıyorum Yani

, ben bir doğrulama anahtarı bu şekilde alıyorum:

Account[] mAccounts = mAccountManager.getAccountsByType("com.google"); 
AccountManagerFuture<Bundle> response = 
    mAccountManager.getAuthToken(mAccounts[0], "android", null, this, null, null); 

Bundle authTokenBundle; 
String authToken; 

try { 
    authTokenBundle = response.getResult(); 
    authToken = authTokenBundle.getString(AccountManager.KEY_AUTHTOKEN).toString(); 
} catch (OperationCanceledException e) { 
    Log.e(TAG, e.getMessage()); 
} catch (AuthenticatorException e) { 
    Log.e(TAG, e.getMessage()); 
} catch (IOException e) { 
    Log.e(TAG, e.getMessage()); 
} 

Ve benim sorum - Ne sonraki adım olmalıdır? Bu kimlik doğrulama sürecine nasıl daha fazla gidebilirim? Bu belirteci nasıl kullanmalıyım?

Bazı kaynaklar buldum, ancak çoğu OAuth kullanıyor veya web tabanlı. Sadece kimlik doğrulaması yapmalı ve (eğer mümkün ise) kullanıcının adını almalıyım (zaten e-posta adresim var), herhangi bir Google hizmetine erişmem gerekmiyor.

Teşekkür peşin.

+0

Eğer getAccounts() 'ı kullanmaya çalışırsanız, o bilgiyi size vermez mi? Bunu hiç kullanmadım, sadece onu okudum, ama onunla biraz oynayın –

+0

Ve dene Bu makaleyi yaz: http://joakim.erdfelt.com/wiki/index.php/AndroidGetAccount –

cevap

8

Aslında, OpenID'den ziyade OAuth 2 istediğiniz şeydir - OpenID, doğal olarak web tabanlı olduğundan, WebView veya tarayıcıyla bazı düğümleri atlamanız gerekir. OAuth 2, hesaptaki Google API'ları olan hesap yöneticisini doğrudan simgeden kullanmanıza olanak tanır. getAuthToken() için görüşmesinde

, authTokenType parametre userinfo.profile ve userinfo.email e-posta adresi (zaten sahip, ancak bunu kontrol etmediniz kimlik doğrulaması olmak istiyorum OAuth 2 kapsamı, bu yüzden bu olabilir teoride aldatılmak) ve kullanıcının adını almak. İşte

Ben benzer bir durumda tam kapsamı için kullandığım şey: Tabii

private static final String OAUTH2_SCOPE = 
    "oauth2:" + 
    "https://www.googleapis.com/auth/userinfo.profile" + 
    " " + 
    "https://www.googleapis.com/auth/userinfo.email"; 

, sadece bütün dize satır içi kullanabilirsiniz, ama bunu kurmak ve net olmayı tercih ve onu Gerekirse daha sonra değiştirmeyi kolaylaştırır.

am.getAuthTokenByFeatures("com.google", OAUTH2_SCOPE, null, this, null, null, 
          new AccountManagerCallback<Bundle>() 
{ 
    public void run(AccountManagerFuture<Bundle> future) { 
     try { 
      Bundle bundle = future.getResult(); 
      System.out.println("Got Bundle:\n" + 
           " act name: " + 
           bundle.getString(AccountManager.KEY_ACCOUNT_NAME) + 
           "\n act type: " + 
           bundle.getString(AccountManager.KEY_ACCOUNT_TYPE) + 
           "\n auth token: " + 
           bundle.getString(AccountManager.KEY_AUTHTOKEN)); 
     } catch (Exception e) { 
      System.out.println("getAuthTokenByFeatures() cancelled or failed:"); 
      e.printStackTrace(); 
     } 
    } 
}, null); 

ancak koduna aynı fikri uygulayabilirsiniz: Benim durumumda

, böyle getAuthTokenByFeatures() şey kullanın. OAuth jetonunu, e-postayı doğrulamak ve kullanıcının adını almak için Using OAuth 2.0 for Login'da açıklandığı gibi Google Kullanıcı Bilgisi API'sı ile kullanabilirsiniz.

+0

Bu cevap için çok teşekkür ederim. Eminim çözümünüzü deneyeceğim. Bir süre önceydi ve sanırım bunu bir şekilde yapmayı başardım, ama şimdi bu yaklaşımı deneyeceğim. Kolay görünüyor. – TheJohnny

+0

Ne denediniz @TheJohnny, bocoz Ben de benim uygulama için de aynı sorunla karşı karşıyayım ......... –

+0

@Darshan Computing Tarayıcıyı kullanarak erişim izni almayı gördüm. yani kullanıcı telefonunda oturum açmış olanlar dışında herhangi bir hesabı kullanabilir. Renk notu uygulamasında olduğu gibi. Bunu nasıl başarabilirim? –

İlgili konular