Сбой входа в систему Google на iOS 9, который пытается вызвать canOpenURL
При тестировании Google Sign-In 2.1.0 на SDK iOS 9 вызов GIDSignIn.sharedInstance().signInSilently()
завершается сбой на внутреннем вызове SDK для входа в 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"
Ответы
Ответ 1
iOS 9 внесла новые изменения в canOpenURL
, требуя от приложения белого списка всех необходимых ему запросов.
Этот пост в Быстрый переход на изменения схемы URL-адресов iOS 9 объясняет почему.
Как минимум, вам нужно присвоить свой собственный идентификатор приложений и ваш идентификатор приложений Google OAuth в 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>
Ответ 2
Просто выполните следующие действия: https://developers.google.com/identity/sign-in/ios/start-integrating#add_url_schemes_to_your_project (включая добавление схем), и он должен работать нормально.
И, как указано в комментариях ниже, я хотел бы подчеркнуть, что проблема, вероятно, возникла, если не добавить схемы URL, как описано в ссылке выше.
Цитата из ссылки выше:
Вход в Google требует, чтобы в ваш проект были добавлены две настраиваемые схемы URL.
Чтобы добавить пользовательские схемы:
- Откройте конфигурацию проекта: дважды щелкните имя проекта в левом представлении дерева. Выберите свое приложение из раздела TARGETS, затем выберите вкладку "Информация" и разверните раздел "Типы URL".
- Нажмите кнопку + и добавьте схему URL для вашего обратного идентификатора клиента. Чтобы найти это значение, откройте файл конфигурации GoogleService-Info.plist и найдите ключ REVERSED_CLIENT_ID. Скопируйте значение этого ключа и вставьте его в поле "Схемы URL" на странице конфигурации. Оставьте остальные поля пустыми.
- Нажмите кнопку + и добавьте вторую схему URL. Это то же самое, что и ваш идентификатор пакета приложений. Например, если ваш идентификатор пакета com.example.app, введите это значение в поле "Схемы URL". Идентификатор пакета приложения можно найти на вкладке Общие в конфигурации проекта (Identity > Bundle Identifier).
Ответ 3
Обновлено для 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>
Ссылка, взятая из этой ссылки
Ответ 4
Ответ Josh правильный для более ранних версий библиотеки входа в Google. Однако, похоже, что начиная с версии 2.2.0, этот шаг больше не нужен (ура!).
Итак, если вы все еще сталкиваетесь с этой проблемой, моим советом может быть обновление вашей библиотеки входа в Google.
Ответ 5
После добавления в проект проекта 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>
Ответ 6
Для меня установка LSApplicationQueriesSchemes
в info.plist не сработала, но поместить ее в "Project > Target > Info > URL Types" помогло.
Ответ 7
Добавьте свой com.googleusercontent.apps. в типы URL
Щелкните в главном проекте → Информация → Типы URL