web-dev-qa-db-ja.com

canOpenURLを呼び出そうとするiOS 9でGoogleサインインがクラッシュする

IOS 9 SDKでGoogle Sign-In 2.1.0をテストしているときに、GIDSignIn.sharedInstance().signInSilently()を呼び出すと、canOpenURLへの内部Google Sign-In SDK呼び出しでクラッシュします。

-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ではcanOpenURLに新しい変更が導入され、クエリする必要があるすべてのスキームをホワイトリストに登録するようアプリケーションに要求します。

iOS 9 URLスキームの変更に関するクイックテイク でこの理由を説明しています。

少なくとも、アプリケーションの識別子とGoogle OAuthアプリIDのInfo.plistLSApplicationQueriesSchemesの下。また、Googleサインインクエリの他のスキームをホワイトリストに登録して、他の警告を黙らせることもできます。

<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

次の手順に従ってください: https://developers.google.com/identity/sign-in/ios/start-integrating#add_url_schemes_to_your_project (スキームの追加を含む)、正常に動作するはずです。

また、以下のコメントで要求されているように、上記のリンクで説明されているURLスキームを追加しないことで問題が発生した可能性があることを強調します。

上記のリンクから引用:

Googleサインインでは、プロジェクトに2つのカスタムURLスキームを追加する必要があります。

カスタムスキームを追加するには:

  1. プロジェクト構成を開きます。左側のツリービューでプロジェクト名をダブルクリックします。 [ターゲット]セクションからアプリを選択し、[情報]タブを選択して、[URLタイプ]セクションを展開します。
  2. [+]ボタンをクリックし、逆引きしたクライアントIDのURLスキームを追加します。この値を見つけるには、GoogleService-Info.plist構成ファイルを開き、REVERSED_CLIENT_IDキーを探します。そのキーの値をコピーし、構成ページのURLスキームボックスに貼り付けます。他のフィールドは空白のままにします。
  3. [+]ボタンをクリックして、2番目のURLスキームを追加します。これは、アプリのバンドルIDと同じです。たとえば、バンドルIDがcom.example.appの場合、その値を[URLスキーム]ボックスに入力します。アプリのバンドルIDは、プロジェクト構成の[全般]タブ([ID]> [バンドルID])で確認できます。
13
emem

XCode 7.0および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>

このリンクから取られた参照

11
Sourabh Sharma

GoogleService-Info.plistをプロジェクトに追加した後、Info.plistファイルに次のコードを追加すると、エラーはなくなりました。

<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

Joshの答えは、Googleサインインライブラリの以前のバージョンでは正しいです。ただし、バージョン2.2.0以降では、この手順は不要になりました(要注意!)。

この問題が引き続き発生する場合は、Googleサインインライブラリを更新することをお勧めします。

5
Todd Kerpelman

私にとっては、LSApplicationQueriesSchemesをinfo.plistに入れても機能しませんでしたが、「プロジェクト>ターゲット>情報> URLタイプ」の下に置くとうまくいきました。

4
Chris

Com.googleusercontent.appsを追加します。 URLタイプへ

メインプロジェクト->情報-> URLタイプをクリックします。