Google Sign-In se bloquea en iOS 9 intentando llamar a canOpenURL

Al probar Google Sign-In 2.1.0 en iOS 9 SDK, al invocar GIDSignIn.sharedInstance().signInSilently() termina GIDSignIn.sharedInstance().signInSilently() en una llamada SDK de canOpenURL sesión de Google a 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" 

iOS 9 ha introducido nuevos cambios en canOpenURL requieren que la aplicación canOpenURL la lista blanca todos los esquemas que necesita consultar.

Esta publicación en Quick Take on iOS 9 Cambios en el esquema de URL explica por qué.

Como mínimo, debe incluir en la lista blanca su propio identificador de aplicación y su id. De aplicaciones de Google OAuth en Info.plist en LSApplicationQueriesSchemes . También puede incluir en la lista blanca los otros esquemas en las consultas de inicio de sesión de Google para silenciar las otras advertencias.

 LSApplicationQueriesSchemes  com.example.foo com.googleusercontent.apps.1234567890-abcdefghijklmnopqrstuvwxyz com-google-gidconsent-google com-google-gidconsent-youtube com-google-gidconsent com.google.gppconsent.2.4.1 com.google.gppconsent.2.4.0 googlechrome googlechrome-x-callback  

Simplemente siga los pasos en: https://developers.google.com/identity/sign-in/ios/start-integrating#add_url_schemes_to_your_project (incluida la adición de los esquemas) y debería funcionar correctamente.

Y, tal como lo solicitan los comentarios a continuación, enfatizaré que el problema probablemente ocurrió al no agregar los esquemas de URL como se describe en el enlace anterior.

Citando desde el enlace de arriba:

El inicio de sesión de Google requiere que se agreguen dos esquemas de URL personalizados a su proyecto.

Para agregar los esquemas personalizados:

  1. Abra su configuración de proyecto: haga doble clic en el nombre del proyecto en la vista de árbol izquierda. Seleccione su aplicación de la sección OBJETIVOS, luego seleccione la pestaña Información y expanda la sección Tipos de URL.
  2. Haga clic en el botón + y agregue un esquema de URL para su ID de cliente invertido. Para encontrar este valor, abra el archivo de configuración GoogleService-Info.plist y busque la clave REVERSED_CLIENT_ID. Copie el valor de esa clave y péguelo en el cuadro Esquemas de URL en la página de configuración. Deje los otros campos en blanco.
  3. Haga clic en el botón + y agregue un segundo esquema de URL. Este es el mismo que el ID del paquete de su aplicación. Por ejemplo, si su ID de paquete es com.example.app, ingrese ese valor en el cuadro Esquemas de URL. Puede encontrar la ID del paquete de su aplicación en la pestaña General de la configuración del proyecto (Identidad> Identificador de paquete).

Actualizado para XCode 7.0 y Google plus Sdk 1.7.1

 LSApplicationQueriesSchemes  com-google-gidconsent-google com-google-gidconsent-youtube com-google-gidconsent com.google.gppconsent.2.4.1 com.google.gppconsent.2.4.0 googlechrome googlechrome-x-callback hasgplus4 com.google.gppconsent.2.3.0 com.google.gppconsent.2.2.0 com.google.gppconsent  

Referencia tomada de este enlace

La respuesta de Josh es correcta para las versiones anteriores de la biblioteca de inicio de sesión de Google. Sin embargo, parece que comienza con la versión 2.2.0, este paso ya no es necesario (¡hurra!).

Entonces, si todavía tiene este problema, mi consejo podría ser actualizar su biblioteca de inicio de sesión de Google.

Después de agregar GoogleService-Info.plist a mi proyecto, agregué lo siguiente al archivo Info.plist y los errores desaparecieron.

   CFBundleURLSchemes  fb1413410832299369 com.my.app  com.googleusercontent.apps.1111111111-6jcxxxxxxxikgnso524xxxxxxxx5o9     

Para mí, poner LSApplicationQueriesSchemes en el info.plist no funcionaba, pero ponerlo en ‘Proyecto> Destino> Información> Tipos de URL’ me LSApplicationQueriesSchemes .