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"
iOS 9ではcanOpenURL
に新しい変更が導入され、クエリする必要があるすべてのスキームをホワイトリストに登録するようアプリケーションに要求します。
iOS 9 URLスキームの変更に関するクイックテイク でこの理由を説明しています。
少なくとも、アプリケーションの識別子とGoogle OAuthアプリIDのInfo.plist
LSApplicationQueriesSchemes
の下。また、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>
次の手順に従ってください: https://developers.google.com/identity/sign-in/ios/start-integrating#add_url_schemes_to_your_project (スキームの追加を含む)、正常に動作するはずです。
また、以下のコメントで要求されているように、上記のリンクで説明されているURLスキームを追加しないことで問題が発生した可能性があることを強調します。
上記のリンクから引用:
Googleサインインでは、プロジェクトに2つのカスタムURLスキームを追加する必要があります。
カスタムスキームを追加するには:
- プロジェクト構成を開きます。左側のツリービューでプロジェクト名をダブルクリックします。 [ターゲット]セクションからアプリを選択し、[情報]タブを選択して、[URLタイプ]セクションを展開します。
- [+]ボタンをクリックし、逆引きしたクライアントIDのURLスキームを追加します。この値を見つけるには、GoogleService-Info.plist構成ファイルを開き、REVERSED_CLIENT_IDキーを探します。そのキーの値をコピーし、構成ページのURLスキームボックスに貼り付けます。他のフィールドは空白のままにします。
- [+]ボタンをクリックして、2番目のURLスキームを追加します。これは、アプリのバンドルIDと同じです。たとえば、バンドルIDがcom.example.appの場合、その値を[URLスキーム]ボックスに入力します。アプリのバンドルIDは、プロジェクト構成の[全般]タブ([ID]> [バンドルID])で確認できます。
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>
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>
Joshの答えは、Googleサインインライブラリの以前のバージョンでは正しいです。ただし、バージョン2.2.0以降では、この手順は不要になりました(要注意!)。
この問題が引き続き発生する場合は、Googleサインインライブラリを更新することをお勧めします。
私にとっては、LSApplicationQueriesSchemes
をinfo.plistに入れても機能しませんでしたが、「プロジェクト>ターゲット>情報> URLタイプ」の下に置くとうまくいきました。
Com.googleusercontent.appsを追加します。 URLタイプへ
メインプロジェクト->情報-> URLタイプをクリックします。