2016-09-29 52 views
5

application:openURL:options:應用程序委託的方法。 該方法應該調用GIDSignIn實例的handleURL方法, 將正確處理應用程序在身份驗證過程結束時接收到的 的URL。谷歌登錄對會員'下標'的模糊引用

直接從Firebase指南文檔複製但仍有錯誤。

func application(application: UIApplication, openURL url: NSURL, options: [String: AnyObject]) -> Bool { 
    return GIDSignIn.sharedInstance().handleURL(url as URL!, sourceApplication: 
     options[UIApplicationOpenURLOptionsSourceApplicationKey] //Error is here 
     //Ambiguous reference to member 'subscript' error is shown. 

     as? String, annotation: options[UIApplicationOpenURLOptionsAnnotationKey]) 
} 

回答

25

您有幾個問題。委託方法應具有以下特徵的斯威夫特3:

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool 

,整個方法是:

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { 
    return GIDSignIn.sharedInstance().handleURL(url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String, annotation: options[UIApplicationOpenURLOptionsKey.annotation]) 
} 
+0

我得到線程1:信號SIGABRT錯誤的應用程序代理運行的應用程序,然後點擊谷歌登入按鈕 –

+0

後'_'&'open'外部參數的名字呢?爲什麼'options'沒有外部參數名? – Honey

+1

@Honey這些是方法調用者使用的參數標籤。 '_'表示沒有爲參數提供名稱。如果參數沒有單獨的標籤(比如'options'),那麼你使用參數名稱作爲參數標籤。這一切都涵蓋在蘋果Swift 3的「Swift編程語言」一書中。 – rmaddy

0

如果您正在使用多個URL方案與谷歌一起登錄,使用這樣的:

func application(application: UIApplication, 
       openURL url: NSURL, 
       options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { 

    return GIDSignIn.sharedInstance().handle(url as URL!, 
              sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String!, 
              annotation: options[UIApplicationOpenURLOptionsKey.annotation]) 

}