尝试调用canOpenURL的iOS 9上的Google登录崩溃

30 ios ios9 google-signin

在iOS 9 SDK上测试Google登录2.1.0时,调用GIDSignIn.sharedInstance().signInSilently()最终会导致内部Google Sign-In SDK调用崩溃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"
Run Code Online (Sandbox Code Playgroud)

小智 46

iOS 9引入了新的变化,canOpenURL要求应用程序将所有需要查询的方案列入白名单.

关于快速获取iOS 9 URL方案更改的这篇文章解释了原因.

您至少需要加入白名单,你自己的应用程序的标识和您的谷歌应用程式的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>
Run Code Online (Sandbox Code Playgroud)


eme*_*mem 13

只需按照以下步骤操作:https://developers.google.com/identity/sign-in/ios/start-integrating#add_url_schemes_to_your_project(包括添加方案),它应该可以正常工作.

并且,根据以下评论的要求,我将强调问题可能是由于未按上述链接中所述添加URL方案而发生的.

引自上面的链接:

Google登录需要将两个自定义网址架构添加到您的项目中.

要添加自定义方案:

  1. 打开项目配置:双击左侧树视图中的项目名称.从TARGETS部分选择您的应用,然后选择Info选项卡,并展开URL Types部分.
  2. 单击+按钮,然后为反向客户端ID添加URL方案.要查找此值,请打开Goog​​leService-Info.plist配置文件,然后查找REVERSED_CLIENT_ID项.复制该键的值,并将其粘贴到配置页面上的URL Schemes框中.将其他字段留空.
  3. 单击+按钮,然后添加第二个URL方案.这个与您的应用的捆绑ID相同.例如,如果您的包ID是com.example.app,请在"URL方案"框中键入该值.您可以在项目配置的"常规"选项卡中找到应用程序的包ID("标识">"包标识符").


Sou*_*rma 11

针对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>
Run Code Online (Sandbox Code Playgroud)

参考取自此链接


Tod*_*man 5

对于早期版本的Google登录库,Josh的回答是正确的.但是,它似乎从版本2.2.0开始,不再需要此步骤(万岁!).

因此,如果您仍然遇到此问题,我的建议可能是更新您的Google登录库.


Isu*_*uru 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>
Run Code Online (Sandbox Code Playgroud)