2013-08-26 14 views
40

Ho un'app, con le notifiche Push implementate.Autorizzazione GET_ACCOUNTS durante l'utilizzo di GCM - Perché è necessario?

Voglio capire il motivo per cui abbiamo bisogno di "GET_ACCOUNTS" (android.permission.GET_ACCOUNTS), mentre implementiamo GCM? Alcuni utenti sollevano dubbi su questa autorizzazione. Ho usato questa autorizzazione nel manifest come è stata data nel sito ufficiale here.

Quanto è sicuro questo permesso? e se rimuovo questo, dal mio manifest, funzioneranno le notifiche push?

+0

Avete provato * * notifiche push senza permesso GET_ACCOUNTS? Sembra che sarebbe più veloce provarlo che chiedere e attendere una risposta. Una volta che lo sai, per favore pubblica i tuoi risultati come risposta. – 323go

+0

GET_ACCOUNT serve per verificare se l'utente ha sincronizzato l'account Google nei dispositivi mobili e generare il valore chiave per ciascun utente (ciascun account Google). È necessario se il dispositivo esegue una versione inferiore a Android 4.0.4. –

+0

Okie ..c'è qualche altro modo per farlo, oltre a mantenere questo in manifesto? –

risposta

57

Utilizza una connessione esistente per i servizi di Google. Per i dispositivi precedenti alla 3.0 , è necessario che gli utenti configurino il proprio account Google sui propri dispositivi mobili . Un account Google non è un requisito sui dispositivi con Android 4.0.4 o versioni successive.

quindi questo è il motivo per il requisito del permesso

<uses-permission android:name="android.permission.GET_ACCOUNTS" /> 

leggere account Google.

Leggi di più riguardo non è più necessario per GCM al lavoro questa GCM Overview


Google account di accesso. Quindi non è necessaria l'autorizzazione android.permission.GET_ACCOUNTS.

Se si utilizza API GCM con GoogleCloudMessaging.register, non è più necessario configurare l'account Google su alcuna versione Android. Ma se si utilizza la libreria deprecata (GCMRegistrar.register), è ancora necessario un account Google nelle versioni precedenti (prima di ICS).

Maggiori dettagli allo https://groups.google.com/forum/#!topic/android-gcm/ecG-RfH-Aso. Un altro thread del simulatore è Why google Account login is required for GCM to work for devices below 4.0.4 OS?

+0

Okie ... c'è qualche altro modo per farlo, senza dare questo in manifest? –

+5

@VamsiChalla: tutte le autorizzazioni devono essere nel manifest. Tuttavia, se il tuo 'android: minSdkVersion' è impostato su 14 o superiore, interpreterò la documentazione nel senso che non avresti bisogno di questa autorizzazione. – CommonsWare

+0

@CommonsWare, grazie per le informazioni .. –

0

GET_ACCOUNT serve per verificare se l'utente ha sincronizzato l'account Google nei dispositivi mobili e generare il valore chiave per ciascun utente (ciascun account Google). È necessario se il dispositivo esegue una versione inferiore a Android 4.0.4.

1

Non penso che questo sia effettivamente il caso. L'ho provato su un dispositivo Gingerbread ripristinato di recente con un nuovo account Gmail e potevo ricevere messaggi GCM senza l'autorizzazione. Quindi la documentazione è SBAGLIATA.

12

L'autorizzazione GET_ACCOUNTS non è più necessaria per il funzionamento di GCM. Un tempo era necessario per la registrazione a GCM, ma un recente aggiornamento dei servizi di riproduzione ha smesso di utilizzare l'account Google anche su Froyo e Gingerbread. Se ti stai registrando a GCM con Play Services (cioè con GoogleCloudMessaging.register), non hai più bisogno di questa autorizzazione su alcuna versione di Android. Se si utilizza la libreria deprecata (GCMRegistrar.register), è ancora necessario un account Google nella versione precedente alla 4.0.4, che richiede tale autorizzazione.

Source (pubblicato su Android-GCM Google Group da uno sviluppatore di Google):

Alcuni retroscena:

Froyo e Gingerbread registrazione è implementato in GoogleServicesFramework, utilizzando l'account Google per la registrazione. Ciò ha provocato un sacco di errori di autorizzazione per le persone in cui l'account non era in buono stato.

A partire da ICS, GCM non dipende o utilizza l'account Google - è possibile utilizzarlo prima di aggiungere un account o senza account.

L'aggiornamento "Play Services" sta attuando il nuovo sistema su tutti i dispositivi - ma sembra un piccolo numero di dispositivi hanno problemi con questo, stiamo indagando - ma i numeri sono di gran lunga inferiori a quelli con il vecchio schema.

3

quando si utilizza

compilazione 'com.google.android.gms: Play Services-: 7.5.0' aggiungere il file build.gradle significa il permesso GET_ACCOUNT aggiunto automaticamente.

  • peresempio se lo sviluppatore deve utilizzare solo AdMob nel progetto significa solo specificare questa autorizzazione nel file di build.gradle di compilazione 'com.google.android.gms: play-servizi-ads: 7.5.0' se abbia qualunque altro chiarimento vedere questo link https://developers.google.com/android/guides/setup
6

Come chiunque altro qui ha detto, GET_ACCOUNT è necessario per dispositivi Android inferiori a 4.0.4.

Se siete come me e di aver installato una libreria che aggiunge automaticamente questa autorizzazione, ma non è necessario a, si può dire al AndroidManifest per rimuovere l'autorizzazione aggiungendo il permesso di con l'attributo tools:node="remove" in questo modo:

nel file AndroidManifest.xml, assicurarsi che il xmlns:tools attribuiscono definito nel tag manifest e quindi aggiungere il permesso con remove set:

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
      xmlns:tools="http://schemas.android.com/tools" 
      ...> 

    ... 

    <uses-permission android:name="android.permission.GET_ACCOUNTS" tools:node="remove" /> 

    ... 

</manifest> 

Word o avverte che questo non è mai effettivamente funziona per me, ma so ha funzionato per gli altri Se riesci a vedere cosa potrei fare di sbagliato o avere ulteriori informazioni a riguardo, ti preghiamo di commentare!

* Edit: C'è una segnalazione di bug aperti per ottenere questa caratteristica di funzionamento: https://bugzilla.xamarin.com/show_bug.cgi?id=48153

+0

Sembra essere post vecchio ma non funzionava neanche per me. Quindi quello che ho fatto è stato dopo aver letto la documentazione di Android ha aggiunto questa proprietà aggiuntiva nella persmissione utente Android: maxSdkVersion = "ALCUNE NUMERO DI API CHE NON SUPPORTI" insieme con gli strumenti: node = "remove". Ha funzionato per. – Devesh

+0

@Devesh Bello grazie per le informazioni extra. Ho anche modificato il mio post e aggiunto la segnalazione di bug per questa funzione. – hvaughan3

Problemi correlati