web-dev-qa-db-fra.com

Google Sign-In se bloque sur iOS 9 lors d'une tentative d'appel de canOpenURL

Lors du test de Google Sign-In 2.1.0 sur le SDK iOS 9, l'appel de GIDSignIn.sharedInstance().signInSilently() finit par se bloquer sur un appel interne du SDK de connexion Google à 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"
30
user43955

iOS 9 a apporté de nouvelles modifications à canOpenURL, obligeant l'application à ajouter à la liste blanche tous les modèles qu'elle doit interroger.

Cet article sur Prise rapide sur iOS 9 Modifications du schéma d'URL explique pourquoi.

Au minimum, vous devez ajouter votre identifiant d’application à la liste blanche et votre identifiant d’applications Google OAuth dans Info.plist sous LSApplicationQueriesSchemes. Vous pouvez également ajouter aux autres schémas les requêtes Google Sign-In relatives aux régimes afin de désactiver les autres avertissements.

<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>
46
user43955

Il suffit de suivre les étapes décrites dans: https://developers.google.com/identity/sign-in/ios/start-integrating#add_url_schemes_to_your_project (y compris l’ajout des schémas) et tout devrait fonctionner correctement.

Et, comme demandé dans les commentaires ci-dessous, je soulignerai que le problème est probablement survenu en ajoutant les schémas d'URL décrits dans le lien ci-dessus. 

Citant le lien ci-dessus:

Google Sign-in nécessite l'ajout de deux modèles d'URL personnalisés à votre projet. 

Pour ajouter les modèles personnalisés:

  1. Ouvrez la configuration de votre projet: double-cliquez sur le nom du projet dans l'arborescence de gauche. Sélectionnez votre application dans la section CIBLES, puis sélectionnez l'onglet Informations et développez la section Types d'URL.
  2. Cliquez sur le bouton + et ajoutez un schéma d'URL pour votre ID client inversé. Pour trouver cette valeur, ouvrez le fichier de configuration GoogleService-Info.plist et recherchez la clé REVERSED_CLIENT_ID. Copiez la valeur de cette clé et collez-la dans la zone Schémas d'URL de la page de configuration. Laissez les autres champs vides.
  3. Cliquez sur le bouton + et ajoutez un second schéma d'URL. Celui-ci est identique à l'ID de bundle de votre application. Par exemple, si votre ID de regroupement est com.example.app, tapez cette valeur dans la zone Schémas d'URL. Vous pouvez trouver l'ID de l'ensemble de votre application dans l'onglet Général de la configuration du projet (Identité> Identificateur de l'ensemble).
13
Eran Marom

Mise à jour pour XCode 7.0 et Google plus 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>

Référence Tiré de ce lien

11
Sourabh Sharma

Après avoir ajouté le GoogleService-Info.plist à mon projet, j'ai ajouté ce qui suit au fichier Info.plist et les erreurs ont disparu.

<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>
5
Isuru

La réponse de Josh est correcte pour les versions antérieures de la bibliothèque de connexion de Google. Cependant, il semble qu'à partir de la version 2.2.0, cette étape ne soit plus nécessaire (hourra!). 

Par conséquent, si vous rencontrez toujours ce problème, je vous conseillerais peut-être de mettre à jour votre bibliothèque Google Sign-In.

5
Todd Kerpelman

Pour moi, mettre LSApplicationQueriesSchemes dans info.plist n'a pas fonctionné, mais le placer sous "Projet> Cible> Info> Types d'URL" a été décisif.

4
Chris

Ajoutez vos com.googleusercontent.apps. dans les types d'URL

Cliquez dans le projet principal -> Info -> Types d'URL