2015-07-19 20 views
30

Durante il test di Google Sign-in 2.1.0 su iOS 9 SDK, invocare GIDSignIn.sharedInstance().signInSilently() si interrompe in modo anomalo su una chiamata dell'SDK di accesso di Google interna a canOpenURL.L'accesso a Google si arresta in modo anomalo su iOS 9 che tenta di chiamare canOpenURL

-canOpenURL: failed for URL: "com.googleusercontent.apps.1234567890-abcdefghijklmnopqrstuvwxyz://a" - error: "This app is not allowed to query for scheme com.googleusercontent.apps.1234567890-abcdefghijklmnopqrstuvwxyz" 
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Your app must support the following URL schemes: com.example.foo, com.googleusercontent.apps.1234567890-abcdefghijklmnopqrstuvwxyz' 

-canOpenURL: failed for URL: "com-google-gidconsent-google://" - error: "This app is not allowed to query for scheme com-google-gidconsent-google" 
-canOpenURL: failed for URL: "com-google-gidconsent-youtube://" - error: "This app is not allowed to query for scheme com-google-gidconsent-youtube" 
-canOpenURL: failed for URL: "com-google-gidconsent://" - error: "This app is not allowed to query for scheme com-google-gidconsent" 
-canOpenURL: failed for URL: "com.google.gppconsent.2.4.1://" - error: "This app is not allowed to query for scheme com.google.gppconsent.2.4.1" 
-canOpenURL: failed for URL: "com.google.gppconsent.2.4.0://" - error: "This app is not allowed to query for scheme com.google.gppconsent.2.4.0" 
-canOpenURL: failed for URL: "googlechrome:" - error: "This app is not allowed to query for scheme googlechrome" 
-canOpenURL: failed for URL: "googlechrome-x-callback:" - error: "This app is not allowed to query for scheme googlechrome-x-callback" 
-canOpenURL: failed for URL: "googlechrome-x-callback:" - error: "This app is not allowed to query for scheme googlechrome-x-callback" 
-canOpenURL: failed for URL: "googlechrome:" - error: "This app is not allowed to query for scheme googlechrome" 

risposta

45

iOS 9 ha introdotto nuove modifiche al canOpenURL che richiedono l'applicazione di whitelist tutti gli schemi di cui ha bisogno per interrogare.

Questo post su Quick Take on iOS 9 URL Scheme Changes spiega perché.

Come minimo è necessario inserire nella whitelist l'identificativo dell'applicazione e l'ID app Google OAuth in Info.plist in LSApplicationQueriesSchemes. Puoi anche autorizzare gli altri schemi di query di accesso di Google per disattivare gli altri avvisi.

<key>LSApplicationQueriesSchemes</key> 
<array> 
    <string>com.example.foo</string> 
    <string>com.googleusercontent.apps.1234567890-abcdefghijklmnopqrstuvwxyz</string> 
    <string>com-google-gidconsent-google</string> 
    <string>com-google-gidconsent-youtube</string> 
    <string>com-google-gidconsent</string> 
    <string>com.google.gppconsent.2.4.1</string> 
    <string>com.google.gppconsent.2.4.0</string> 
    <string>googlechrome</string> 
    <string>googlechrome-x-callback</string> 
</array> 
+0

non ha funzionato per me, io continuo ottengono 'NSURLSession/NSURLConnection HTTP carico non riuscita (kCFStreamErrorDomainSSL, -9802)' –

+0

whys si dice questo non è nel formato corretto per me? Arnt suppongo per incollarlo nella prima dell'ultima "" – 4GetFullOf

+0

ciao posso non eseguire questo errore di visualizzazione è come come: - Questa applicazione non è autorizzato a eseguire query per lo schema terminazione app a causa di eccezione non identificata 'NSInvalidArgumentException ', motivo:' La tua app deve supportare i seguenti schemi URL: Ti prego di aiutarmi per questo ... –

5

risposta di Josh è corretto per le versioni precedenti della libreria Sign-in Google. Tuttavia, sembra che inizi con la versione 2.2.0, questo passaggio non è più necessario (evviva!).

Quindi, se continui a riscontrare questo problema, il mio consiglio potrebbe essere quello di aggiornare la tua libreria di accesso a Google.

+1

Funziona perfettamente per iOS 9 in Xcode beta 7. Sarebbe sicuro inviare l'applicazione ad appStore usando solo questo, o dovrei aggiungere anche schemi di whitelist per essere sicuro (dato che l'intero sistema è in fase beta). – cheeseRoot

11

aggiornati per XCode 7.0 e Google, più Sdk 1.7.1

<key>LSApplicationQueriesSchemes</key> 
    <array> 
     <string>com-google-gidconsent-google</string> 
     <string>com-google-gidconsent-youtube</string> 
     <string>com-google-gidconsent</string> 
     <string>com.google.gppconsent.2.4.1</string> 
     <string>com.google.gppconsent.2.4.0</string> 
     <string>googlechrome</string> 
     <string>googlechrome-x-callback</string> 
     <string>hasgplus4</string> 
     <string>com.google.gppconsent.2.3.0</string> 
     <string>com.google.gppconsent.2.2.0</string> 
     <string>com.google.gppconsent</string> 
    </array> 

Reference Taken from this link

4

Per me, mettendo il LSApplicationQueriesSchemes nel info.plist non ha funzionato, ma mettere sotto 'Progetto> Target> Info> Tipi di URL "ha fatto il trucco per me.

13

Basta seguire i passaggi in: https://developers.google.com/identity/sign-in/ios/start-integrating#add_url_schemes_to_your_project (compresa l'aggiunta degli schemi) e dovrebbe funzionare correttamente.

E, come richiesto dai commenti di seguito, sottolineo che il problema probabilmente si è verificato non aggiungendo gli schemi URL come descritto nel link sopra.

Citando dal link qui sopra:

Google Sign-in richiede due schemi URL personalizzato da aggiungere al vostro progetto.

Per aggiungere gli schemi personalizzati:

  1. Aprire il configurazione del progetto: fare doppio clic sul nome del progetto nella vista ad albero a sinistra. Seleziona la tua app dalla sezione TARGET, quindi seleziona la scheda Info ed espandi la sezione Tipi di URL.
  2. Fare clic sul pulsante + e aggiungere uno schema URL per l'ID cliente stornato. Per trovare questo valore, apri il file di configurazione di GoogleService-Info.plist e cerca la chiave REVERSED_CLIENT_ID. Copia il valore di quella chiave e incollalo nella casella Schemi URL nella pagina di configurazione. Lascia vuoti gli altri campi.
  3. Fare clic sul pulsante + e aggiungere un secondo schema URL. Questo è uguale all'ID bundle della tua app. Ad esempio, se il tuo ID bundle è com.example.app, digita tale valore nella casella Schemi URL. Puoi trovare l'ID del gruppo della tua app nella scheda Generale della configurazione del progetto (Identità> Identificatore pacchetto).
+0

Questo ha funzionato bene per me .... –

5

Dopo aver aggiunto il GoogleService-Info.plist al mio progetto, ho aggiunto il seguente al file Info.plist e gli errori sono andato via.

<array> 
    <dict> 
     <key>CFBundleURLSchemes</key> 
     <array> 
      <string>fb1413410832299369</string> 
      <string>com.my.app</string> <!-- My app bundle ID --> 
      <string>com.googleusercontent.apps.1111111111-6jcxxxxxxxikgnso524xxxxxxxx5o9</string> <!-- Reverssed client ID --> 
     </array> 
    </dict> 
</array> 
1

Aggiungi il tuo com.googleusercontent.apps. in tipi di URL

scattano in progetto principale -> Info -> tipi di URL

Problemi correlati