2012-02-13 6 views
10

Non sono un programmatore, ma ho bisogno di farlo da solo. Ho bisogno di aiuto.Autenticazione Android con Google OpenID. Cosa succederà?

Ho cercato la soluzione per gli ultimi due giorni e non riesco a trovarne.

Ok. Sto scrivendo Android Native App. Il mio primo obiettivo è ottenere la possibilità di accedere tramite l'account Google (che è già impostato sul telefono).

Così sto usando AccountManager per ottenere il conto "com.google", sto ottenendo un token di autenticazione in questo modo:

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()); 
} 

E la mia domanda è - quello che dovrebbe essere il mio prossimo passo? Come posso andare oltre con questo processo di autenticazione? Come dovrei usare questo token?

Ho trovato alcune risorse, ma la maggior parte di esse utilizza OAuth o è basata sul Web. Ho solo bisogno di autenticarsi e (se è possibile) ottenere il nome dell'utente (ho già l'indirizzo e-mail), non ho bisogno di accedere a nessun servizio di Google.

Grazie in anticipo.

+0

se provi a getAccounts(), non ti dà informazioni? non l'ho mai usato, ne ho solo letto un po ', ma ci provo un po', –

+0

E prova questo articolo: http://joakim.erdfelt.com/wiki/index.php/AndroidGetAccount –

risposta

8

In realtà, OAuth 2 è ciò che si desidera, piuttosto che OpenID - OpenID è intrinsecamente basato sul Web, quindi è necessario passare attraverso alcuni telegrammi con WebView o il browser. OAuth 2 consente di utilizzare il token da AccountManager con le API di Google direttamente dall'app.

nella chiamata a getAuthToken(), il parametro è il campo di applicazione authTokenType OAuth 2, che si vuole essere userinfo.profile e userinfo.email per autenticare l'indirizzo e-mail (è già in possesso, ma non hai verificato che, ma potrebbe, in teoria, essere falsificato) e ottenere il nome dell'utente.

Ecco quello che uso per l'intera portata in una situazione simile:

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

Naturalmente, si potrebbe utilizzare l'intera stringa in linea letterale, ma preferisco costruirla ed essere chiari, ed è rende più facile cambiare in seguito, se necessario.

Nel mio caso, io uso getAuthTokenByFeatures(), qualcosa di simile:

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); 

ma si può applicare la stessa idea di codice. È quindi possibile utilizzare il token OAuth con l'API di informazioni utente di Google, come descritto in Using OAuth 2.0 for Login per verificare l'e-mail e ottenere il nome dell'utente.

+0

Grazie mille per questa risposta. Proverò sicuramente la tua soluzione. È stato qualche tempo fa e penso di essere riuscito a farlo in qualche modo, ma proverò ora con questo approccio. Sembra facile. – TheJohnny

+0

quello che hai provato @TheJohnny, bocoz sto affrontando lo stesso problema anche per la mia applicazione ......... –

+0

@Darshan Computing Ho visto ottenere l'accesso di autenticazione usando il browser. vale a dire che l'utente può utilizzare qualsiasi account diverso da quelli registrati nel suo telefono. Proprio come in App per le note a colori ecc. Come posso ottenerlo? –