Autore Topic: Utilizzare le credenziali dell'account gmail per inviare email automaticamente  (Letto 2512 volte)

Offline Meroelyth

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
Salve a tutti ragazzi...
Sono nuovo in questo forum ma vi seguo già da un po'.

Sto creando un'applicazione (già terminata) le quale invia delle informazioni tramite dei messaggi.
Una delle funzioni di quest'applicazione è l'invio di messaggi periodici. L'unico problema che vorrei risolvere è il seguente:

So già come inviare le email automaticamente, l'unico inconveniente è che l'utente deve inserire "nome utente" e "password" del proprio account gmail. Io vorrei invece che la mia applicazione utilizzasse (nel caso in cui ce ne sia uno) l'account gmail già registrato nel proprio device android.

Sono riuscito ad ottenere l'indirizzo email dell'account gmail ma al momento di estrarre la password ho il seguente errore:
Codice (Java): [Seleziona]
02-14 10:53:40.660: E/AndroidRuntime(23719): Caused by: java.lang.SecurityException: caller uid xxxxx is different than the authenticator's uiddove xxxxx sta per l'UID.

Il codice che utilizzo per estrarre queste informazioni è il seguente:
Codice (Java): [Seleziona]
AccountManager manager = AccountManager.get(this);
 Account[] accounts = manager.getAccountsByType("com.google");
 for (Account account : accounts){
   if(account.name.endsWith("gmail.com")){
      String gmailAddress = account.name;
      String password = manager.getPassword(account);
   }
 }

Vi prego di aiutarmi postandomi un codice di esempio (funzionante) e che, possibilmente, restituisca la password in una stringa. Non altro, perchè ho letto milioni di guide ma nessuna tratta esattamente il problema.
Grazie mille a tutti!

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Utilizzare le credenziali dell'account gmail per inviare email automaticamente
« Risposta #1 il: 14 Febbraio 2012, 12:14:29 CET »
0
Non sono molto esperto in materia ma credo che non puoi tirare fuori le credenziali ma solo ricevere un auth token.

Offline Meroelyth

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
Re:Utilizzare le credenziali dell'account gmail per inviare email automaticamente
« Risposta #2 il: 14 Febbraio 2012, 12:17:59 CET »
0
Non sono molto esperto in materia ma credo che non puoi tirare fuori le credenziali ma solo ricevere un auth token.

Grazie mille per la risposta. Puoi spiegarmi cos'è un auth token e farmi vedere tramite un esempio come si utilizza? Non ho proprio idea di cosa sia e ti sarei veramente grato se riuscissi a postarmi un codice funzionante. Sto facendo questo lavoro per la tesi di laurea e sto uscendo pazzo!

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Utilizzare le credenziali dell'account gmail per inviare email automaticamente
« Risposta #3 il: 14 Febbraio 2012, 12:26:04 CET »
0
Cerco di spiegarti il concetto  perchè non saprei darti una definizione "formale". Se ti interessa approfondire la cosa
OAuth Community Site   

Sostanzialmente tu interroghi l'account manager, lui contatta il server ed effettua il login e se quest'ultimo va buon fine il server rilascia un auth token che puoi utilizzare per fare delle chiamate senza fornire direttamente le credenziali.

Non ho modo di fornirti  codice già funzionante perchè non ho mai fatto niente del genere, comunque ho visto che ci sono delle api per interagire con gmail tramite smtp e per quelle dovrebbe essere sufficiente l'auth token. Prova a dare un occhio qui:

email - looking for Android Gmail SMTP Oauth example - Stack Overflow

Di più non saprei dirti, mi dispiace :)

Offline Meroelyth

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
Re:Utilizzare le credenziali dell'account gmail per inviare email automaticamente
« Risposta #4 il: 14 Febbraio 2012, 13:56:45 CET »
0
Cerco di spiegarti il concetto  perchè non saprei darti una definizione "formale". Se ti interessa approfondire la cosa
OAuth Community Site   

Sostanzialmente tu interroghi l'account manager, lui contatta il server ed effettua il login e se quest'ultimo va buon fine il server rilascia un auth token che puoi utilizzare per fare delle chiamate senza fornire direttamente le credenziali.

Non ho modo di fornirti  codice già funzionante perchè non ho mai fatto niente del genere, comunque ho visto che ci sono delle api per interagire con gmail tramite smtp e per quelle dovrebbe essere sufficiente l'auth token. Prova a dare un occhio qui:

email - looking for Android Gmail SMTP Oauth example - Stack Overflow

Di più non saprei dirti, mi dispiace :)


grazie mille tenterò di far qualcosa...grazie ancora

Offline ivano

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SGS2
Re:Utilizzare le credenziali dell'account gmail per inviare email automaticamente
« Risposta #5 il: 14 Febbraio 2012, 21:52:08 CET »
0
Io utilizzo le credenziali dell'account google per una mia applicazione, ma richiede dei permessi che fanno diffidare abbastanza l'utente:

Codice (XML): [Seleziona]
    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />

non bastasse questo la prima volta che chiedi il token appare una schermata di conferma tipo antivirus che credo metterebbe in allarme anche il più incauto degli utenti.
Per ottenere il token ho seguito questo tutorial: http://dalelane.co.uk/blog/?p=303
Io non ho usato OAuth.

Offline Meroelyth

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
Re:Utilizzare le credenziali dell'account gmail per inviare email automaticamente
« Risposta #6 il: 15 Febbraio 2012, 10:52:30 CET »
0
Io utilizzo le credenziali dell'account google per una mia applicazione, ma richiede dei permessi che fanno diffidare abbastanza l'utente:

Codice (XML): [Seleziona]
    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
    <uses-permission android:name="android.permission.USE_CREDENTIALS" />

non bastasse questo la prima volta che chiedi il token appare una schermata di conferma tipo antivirus che credo metterebbe in allarme anche il più incauto degli utenti.
Per ottenere il token ho seguito questo tutorial: http://dalelane.co.uk/blog/?p=303
Io non ho usato OAuth.

Grazie mille per la risposta, ma per utilizzo di quei permessi intendi che oltre al mio codice basta solo inserire quello che hai postato tu nel manifest e riuscirei a acquisire la password?

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Utilizzare le credenziali dell'account gmail per inviare email automaticamente
« Risposta #7 il: 15 Febbraio 2012, 11:01:02 CET »
0
Grazie mille per la risposta, ma per utilizzo di quei permessi intendi che oltre al mio codice basta solo inserire quello che hai postato tu nel manifest e riuscirei a acquisire la password?

La password non puoi prenderla, con nessun codice.
A meno che il tuo package sia firmato con la stessa chiave del codice delle app di Google, cosa credo molto difficile.

Dalla doc di getPassword:
Citazione
Gets the saved password associated with the account. This is intended for authenticators and related code; applications should get an auth token instead.
It is safe to call this method from the main thread.
This method requires the caller to hold the permission AUTHENTICATE_ACCOUNTS and to have the same UID as the account's authenticator.

Quello che ti ha scritto ivano serve per prendere l'auth token.
« Ultima modifica: 15 Febbraio 2012, 11:03:08 CET da Ricky` »

Offline Meroelyth

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
Re:Utilizzare le credenziali dell'account gmail per inviare email automaticamente
« Risposta #8 il: 15 Febbraio 2012, 11:06:13 CET »
0
La password non puoi prenderla, con nessun codice.
A meno che il tuo package sia firmato con la stessa chiave del codice delle app di Google, cosa credo molto difficile.

Dalla doc di getPassword:
Quello che ti ha scritto ivano serve per prendere l'auth token.

Ok grazie mille...spero seriamente di farcela!!!!

Offline ivano

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SGS2
Re:Utilizzare le credenziali dell'account gmail per inviare email automaticamente
« Risposta #9 il: 15 Febbraio 2012, 16:51:12 CET »
0
Grazie mille per la risposta, ma per utilizzo di quei permessi intendi che oltre al mio codice basta solo inserire quello che hai postato tu nel manifest e riuscirei a acquisire la password?

Sinceramente non considero una buona pratica prendere la password dell'utente, ma a parte questa considerazione personale se lo scopo è agire come se avessi le credenziali allora lavorare col token è la soluzione giusta.
Ti renderai conto che gestire i vari casi di questo processo di autenticazione non sarà proprio facile, ma del resto la funzionalità che stai cercando di utilizzare è abbastanza avanzata. Quindi tanta pazienza e in bocca al lupo.

Offline Meroelyth

  • Nuovo arrivato
  • *
  • Post: 19
  • Respect: 0
    • Mostra profilo
Re:Utilizzare le credenziali dell'account gmail per inviare email automaticamente
« Risposta #10 il: 15 Febbraio 2012, 16:57:46 CET »
0
Sinceramente non considero una buona pratica prendere la password dell'utente, ma a parte questa considerazione personale se lo scopo è agire come se avessi le credenziali allora lavorare col token è la soluzione giusta.
Ti renderai conto che gestire i vari casi di questo processo di autenticazione non sarà proprio facile, ma del resto la funzionalità che stai cercando di utilizzare è abbastanza avanzata. Quindi tanta pazienza e in bocca al lupo.

Accetto il tuo consiglio e faccio inserire all'utente la password. Però il problema vero è anche che non ho modo di fargli fare un test per verificare se i dati li ha inseriti correttamente o meno (se non facendogli inviare una mail di prova). Esiste un modo per fare una verifica?

Offline ivano

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    SGS2
Re:Utilizzare le credenziali dell'account gmail per inviare email automaticamente
« Risposta #11 il: 15 Febbraio 2012, 17:03:20 CET »
0
Accetto il tuo consiglio e faccio inserire all'utente la password. Però il problema vero è anche che non ho modo di fargli fare un test per verificare se i dati li ha inseriti correttamente o meno (se non facendogli inviare una mail di prova). Esiste un modo per fare una verifica?

Se leggi bene ti consiglio il contrario, inoltre col metodo che ti ho indicato non hai bisogno di verificare nulla, basta sapere la mail dell'account google che vuoi utilizzare.