2015-07-19 49 views
30

在iOS 9 SDK上測試Google Sign-In 2.1.0時,調用GIDSignIn.sharedInstance().signInSilently()最終導致內部Google Sign-In SDK調用canOpenURL崩潰。iOS 9上的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" 

回答

45

的iOS 9已經推出canOpenURL需要加入白名單的所有它需要查詢方案的應用新的變化。

這個帖子在Quick Take on iOS 9 URL Scheme Changes解釋了原因。

您至少需要在Info.plistLSApplicationQueriesSchemes之下將您自己的應用程序標識符和Google OAuth應用程序ID列入白名單。您還可以將其他計劃的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> 
+0

並沒有爲我工作,我不斷收到'NSURLSession/NSURLConnection的HTTP加載失敗(kCFStreamErrorDomainSSL,-9802)' –

+0

個爲什麼它說這對我來說格式不正確? ARNT我想將其粘貼在剛剛之前的最後一次「」 – 4GetFullOf

+0

你好 我不能運行喜歡,因爲這是顯示錯誤: - 這個程序是不允許查詢方案 終止應用程序由於未捕獲的異常「NSInvalidArgumentException ',原因:'您的應用必須支持以下URL方案: 請幫助我... –

5

Josh的答案對早期版本的Google登錄庫是正確的。然而,它看起來像從2.2.0版開始,這一步不再是必要的(hooray!)。

因此,如果您仍然遇到此問題,我的建議可能是更新您的Google登錄庫。

+1

這對於Xcode beta 7中的iOS 9來說工作正常。將應用程序僅發送給appStore是否安全,還是應該添加白名單以保證安全(因爲整個系統處於beta階段)。 – cheeseRoot

11

更新了的XCode 7.0,谷歌,加上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> 

Reference Taken from this link

4

對我來說,把在info.plist中沒有工作的LSApplicationQueriesSchemes,但把它下的「項目>目標>信息> URL類型'爲我做了詭計。

13

只需按照以下步驟:https://developers.google.com/identity/sign-in/ios/start-integrating#add_url_schemes_to_your_project(包括添加計劃),它應該工作正常。

而且,根據以下評論的要求,我會強調這個問題可能是因爲沒有添加上述鏈接中描述的URL方案。

從上面的鏈接引用:

谷歌登入需要兩個自定義URL方案被添加到您的項目。

添加自定義方案:

  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 Schemes框中。您可以在項目配置的「常規」選項卡中找到應用的軟件包ID(身份>軟件包標識符)。
+0

這對我來說很好.... –

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> 
1

添加com.googleusercontent.apps。到URL類型

點擊進入主項目 - >信息 - > URL類型