wake-up-neo.net

Google Sign-In stürzt unter iOS 9 ab, wenn versucht wird, canOpenURL aufzurufen

Beim Testen von Google Sign-In 2.1.0 auf dem iOS 9-SDK stürzt der Aufruf von GIDSignIn.sharedInstance().signInSilently() bei einem internen Aufruf des Google Sign-In-SDK an canOpenURL ab.

-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

in iOS 9 wurden neue Änderungen an canOpenURL eingeführt, sodass die Anwendung alle für die Abfrage erforderlichen Schemata auf die Whitelist setzen muss.

Dieser Beitrag zu Quick Take für iOS 9 URL Schema-Änderungen erklärt warum.

Sie müssen mindestens die Kennung Ihrer eigenen Anwendung und die ID Ihrer Google OAuth-Apps in Info.plist unter LSApplicationQueriesSchemes auflisten. Sie können auch die anderen Schemata von Google Sign-In abfragen, um die anderen Warnungen abzustellen.

<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

Folgen Sie einfach den Schritten in: https://developers.google.com/identity/sign-in/ios/start-integrating#add_url_schemes_to_your_project (einschließlich dem Hinzufügen der Schemata) und es sollte gut funktionieren.

Und wie in den Kommentaren unten gefordert, möchte ich betonen, dass das Problem wahrscheinlich dadurch aufgetreten ist, dass die URL-Schemas nicht wie im obigen Link beschrieben hinzugefügt wurden. 

Zitieren aus dem obigen Link:

Für die Google-Anmeldung müssen Ihrem Projekt zwei benutzerdefinierte URL-Schemas hinzugefügt werden. 

So fügen Sie die benutzerdefinierten Schemas hinzu:

  1. Öffnen Sie Ihre Projektkonfiguration: Doppelklicken Sie in der linken Strukturansicht auf den Projektnamen. Wählen Sie Ihre App im Abschnitt TARGETS aus, wählen Sie dann die Registerkarte Info und erweitern Sie den Abschnitt URL-Typen.
  2. Klicken Sie auf die Schaltfläche + und fügen Sie ein URL-Schema für Ihre stornierte Client-ID hinzu. Um diesen Wert zu finden, öffnen Sie die Konfigurationsdatei GoogleService-Info.plist und suchen Sie nach dem Schlüssel REVERSED_CLIENT_ID. Kopieren Sie den Wert dieses Schlüssels und fügen Sie ihn auf der Konfigurationsseite in das Feld URL Schemes ein. Lassen Sie die anderen Felder leer.
  3. Klicken Sie auf die Schaltfläche + und fügen Sie ein zweites URL-Schema hinzu. Diese ist mit der Bundle-ID Ihrer App identisch. Wenn Ihre Bundle-ID beispielsweise com.example.app lautet, geben Sie diesen Wert in das Feld URL Schemes ein. Sie finden die Bundle-ID Ihrer App auf der Registerkarte Allgemein der Projektkonfiguration (Identität> Bundle-ID).
13
Eran Marom

Aktualisiert für XCode 7.0 und 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>

Verweis aus diesem Link entnommen

11
Sourabh Sharma

Nachdem ich die Datei GoogleService-Info.plist zu meinem Projekt hinzugefügt habe, fügte ich der Datei Info.plist Folgendes hinzu und die Fehler gingen weg.

<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

Joshs Antwort ist für frühere Versionen der Google-Anmeldebibliothek korrekt. Ab Version 2.2.0 sieht es jedoch so aus, dass dieser Schritt nicht mehr erforderlich ist (Hurra!). 

Wenn Sie also immer noch auf dieses Problem stoßen, empfiehlt es sich möglicherweise, Ihre Google-Anmeldebibliothek zu aktualisieren.

5
Todd Kerpelman

Für mich funktionierte es nicht, die Variable LSApplicationQueriesSchemes in die info.plist zu setzen, aber unter "Projekt> Ziel> Info> URL-Typen" zu platzieren, war für mich der Trick.

4
Chris

Fügen Sie Ihren com.googleusercontent.apps hinzu. in URL-Typen

Klicken Sie in das Hauptprojekt -> Info -> URL-Typen