Подтвердить что ты не робот

Сбой входа в систему 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"
4b9b3361

Ответ 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