Non c'è modo di conoscere l'e-mail che l'utente sta acquistando.
Anche utilizzando lo Account Manager, viene restituito un intero elenco di tutte le e-mail.
Pattern emailPattern = Patterns.EMAIL_ADDRESS; // API level 8+
Account[] accounts = AccountManager.get(context).getAccounts();
for (Account account : accounts) {
if (emailPattern.matcher(account.name).matches()) {
String possibleEmail = account.name;
...
}
}
Non è così semplice come scegliere il primo della lista, in quanto l'utente può acquistare con qualsiasi e-mail associato al telefono. È possibile utilizzare lo AbstractAccountAuthenticator#getAccountRemovalAllowed per sapere che l'account non può essere cancellato e sapere quale è la posta principale (dato che non è possibile eliminare la posta principale), ma anche questo può cambiare, l'utente può cambiare la posta principale in qualsiasi momento.
Mi piacerebbe sapere come farlo, ma purtroppo non c'è modo. Nel mio caso, non è denaro essenziale, quindi mi mando come "payload" tutti gli account di posta elettronica del telefono concatenati e tutti questi che consentono di sbloccare contenuti premium nella mia applicazione, cosa posso perdere delle vendite? È probabile, ma preferisco questo a un punteggio negativo nel mercato perché un utente acquista contenuti premium e non può essere sbloccato perché ho scelto la posta sbagliata.