2010-08-16 12 views
6

Sto cercando di utilizzare l'API dati di Google per un'applicazione installata su Android 2.1. Non voglio che l'utente debba inserire le proprie credenziali se ha già un account configurato sul dispositivo. Pertanto, sto utilizzando l'account manager con tipo di account "com.google".Esiste un modo ufficiale di autenticazione per Google Data API su Android utilizzando gli account AccountManager?

Ma dove andare da lì? Non ci sono esempi da Google su come eseguire l'autenticazione di Google (authTokenType ecc.). C'è un progetto che tenta di farlo (http://code.google.com/p/google-authenticator-for-android) in un modo generale ma senza alcun successo, ancora.

Può essere così difficile? In questo modo si evitano le applicazioni come i client di Google Reader che devono chiedere all'utente le proprie credenziali di Google (che, si spera, nessuno le fornisce).

Qualsiasi suggerimento/consiglio è apprezzato.

risposta

1

Si prega di dare un'occhiata allo sample code nel google data api. La cosa importante da fare dopo l'autenticazione è chiamare GoogleHeaders.setGoogleLogin (String).

4

Sì, questo è possibile. Dopo aver gestito l'account Google (come descritto), devi solo richiedere un token di autenticazione da AccountManager per il servizio GData.

Se il dispositivo Android ha già un token di autenticazione (per il particolare servizio GData a cui si sta tentando di accedere), verrà restituito all'utente. In caso contrario, l'AccountManager ne richiederà uno e te lo restituirà. In entrambi i casi, non è necessario preoccuparsi di ciò mentre l'AccountManager lo gestisce.

Nel seguente esempio, sto utilizzando l'API di Google Spreadsheets:

ArrayList<Account> googleAccounts = new ArrayList<Account>(); 

// Get all accounts 
Account[] accounts = accountManager.getAccounts(); 
    for(Account account : accounts) { 
    // Filter out the Google accounts 
    if(account.type.compareToIgnoreCase("com.google")) { 
     googleAccounts.add(account); 
    } 
    } 
AccountManager accountManager = AccountManager.get(activity); 

// Just for the example, I am using the first google account returned. 
Account account = googleAccounts.get(0); 

// "wise" = Google Spreadheets 
AccountManagerFuture<Bundle> amf = accountManager.getAuthToken(account, "wise", null, activity, null, null); 

try { 
    Bundle authTokenBundle = amf.getResult(); 
    String authToken = authTokenBundle.getString(AccountManager.KEY_AUTHTOKEN); 

    // do something with the token 
    InputStream response = sgc.getFeedAsStream(feedUrl, authToken, null, "2.1"); 

} 

Spero che questo aiuta.

1

Assicurarsi di chiamare GoogleHeaders.setGoogleLogin dopo l'autenticazione. Quindi puoi controllare questo sample code per ulteriore aiuto se necessario.

Problemi correlati