2016-09-29 2 views
5

application:openURL:options: метод делегата приложения. Метод должен вызывать метод handleURL экземпляра GIDSignIn, , который будет правильно обрабатывать URL-адрес, полученный вашим приложением в конце процесса аутентификации.Google подписывает неоднозначную ссылку на индекс участника '

Непосредственно скопировано из документации по руководству 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

У вас есть несколько вопросов. Метод делегата должен иметь следующую подпись в Swift 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 ошибку в App Делегат после запуска приложения и нажав кнопку для входа в аккаунт Google –

+0

ли '' _' & open' внешние имена параметров? Почему у 'options' нет внешнего имени параметра? – Honey

+1

@Honey Это метки аргументов, используемые вызывающими лицами метода. Значение '_' означает, что для параметра не указывается имя. И если аргумент не имеет отдельной метки (например, 'options'), вы используете имя параметра как метку аргумента. Все это описано в книге Apple «Swift Programming Language» для Swift 3. – rmaddy

0

Если вы используете несколько схем URL вместе с Google Войти, использовать его как это :

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]) 

}