2015-12-22 11 views
5

Ho cercato una soluzione a questo problema per un po '(giorni, non minuti), ma mi elude in modo abbastanza efficace.Registrazione di un account Google sul dispositivo Android a livello di programmazione

Si prega di notare che questa NON è una domanda sull'avvio della procedura di registrazione. Questo deve avvenire automaticamente senza alcuna interazione dell'utente.

Vorrei aggiungere un account Google al mio dispositivo personalizzato (1000 di loro). L'account verrà principalmente utilizzato per attivare Google Play Store sul dispositivo in modo che l'app possa essere aggiornata quando saranno disponibili versioni più recenti.

mio codice esistente (il frammento più breve di quelli che ho provato):

AccountManager mgr = AccountManager.get(this); 
Account acc = new Account("[email protected]", "com.google"); 
mgr.addAccountExplicitly(acc, "password", new Bundle())); 

produce naturalmente un

java.lang.SecurityException: caller uid 10047 is different than the authenticator's uid 

Quindi, come potrei fare per conseguire realmente questo? Il mio dispositivo è radicato, quindi non è un ostacolo se è l'unico modo.

+0

Per quanto ne so, non è possibile creare un account per un altro autenticatore di app. Se disponi del firmware e della chiave di firma, potresti essere in grado di condividere il tuo ID utente con l'ID utente di sistema. In questo caso, potresti essere in grado di aggirarlo. (non scrivendo come risposta, dato che non sono sicuro al 100% di queste informazioni) – Knossos

+0

Bene, il backup in titanio può farlo in modo che sia in qualche modo fattibile – velis

+2

Poiché questo è il tuo dispositivo personalizzato, e tu dichiari di avere il "Google Play Store" su di esso, devi aver ottenuto la licenza da Google. Dovresti chiedere a Google qual è la loro politica in merito a pre-stabilire gli account Google in queste situazioni, non solo per determinare il modo migliore per farlo, ma anche se è autorizzato in primo luogo. – CommonsWare

risposta

0

Bene, a quanto pare, questo non è qualcosa di facilmente risolvibile. Alla fine ho registrato un dispositivo, quindi ho estratto il file degli utenti. Posizione del file degli utenti: /data/system/users/0/accounts.db (se sul dispositivo sono presenti più profili utente, l'ultima directory potrebbe differire in base al profilo in questione).

Ho archiviato questo file nelle risorse della mia app (compresso con gzip, assicurati che l'estensione non sia qualcosa.gz perché si perde durante l'imballaggio - non si è preoccupato di controllare perché).

Per prima cosa verificare se il mio utente esiste già:

AccountManager mgr = AccountManager.get(this); 
for (Account acc: mgr.getAccountsByType("com.google")) { 
    if (acc.name.equalsIgnoreCase("[email protected]")) 
    return; 
} 

Se è così, ho appena saltare il passo. In caso contrario, spacchetta il file degli utenti e sovrascrivo quello esistente (usando su). Poi faccio anche un riavvio per assicurarmi che le modifiche siano registrate.

+0

Hai trovato un modo migliore per farlo? Questo presuppone che tu abbia registrato manualmente questo account utente una volta che l'account.db sia stato compilato con l'e-mail e l'hash della password. C'è un modo per farlo saltando il primo passo, quando si conosce solo la password grezza e non si ha idea del suo modulo hash. Inoltre, non sono sicuro che la forma hash della password sarà la stessa su tutti i dispositivi, anche se il modello di tali dispositivi è esattamente lo stesso. –

+0

@ThanasisPetsas: In realtà, no.A quanto pare, Google ha qualche rilevamento in atto. Una volta che 50 dispositivi sono stati utilizzati con lo stesso account, Play Store ha smesso di funzionare. Quindi siamo stati costretti ad implementare il nostro meccanismo di aggiornamento dei pacchetti. – velis

+0

Ok, buono a sapersi! Quindi, i 49 dispositivi stavano bene con un account? La forma hash della password era la stessa per tutti i dispositivi? –

0

Non è possibile aggiungere/creare un account Google utilizzando addAccountExplicitly(). È possibile aggiungere solo account per i propri servizi. anche il tuo dispositivo è radicato perché verrà rifiutato dal server web di Google. Per ulteriori dettagli, controllare questo link

Problemi correlati