facebook openurl для входа в ios 9 метод ios swift

У меня есть интеграция с facebook и gmail в моем приложении, но как только я добавляю функцию открытия URL-адреса для входа в gmail, вход в facebook перестает работать. У меня есть этот код для открытого URL-адреса в моем приложении

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {

    var shouldOpen :Bool = FBSDKApplicationDelegate.sharedInstance().application(application,openURL: url,sourceApplication: sourceApplication,annotation: annotation)

    shouldOpen = shouldOpen ? shouldOpen : GIDSignIn.sharedInstance().handleURL(url,
                                                                                sourceApplication: sourceApplication,
                                                                                annotation: annotation)

    return shouldOpen

}

Это отлично работает с входом в facebook, но когда я добавляю метод openurl для gmail для ios 9, возникает проблема, т. е. после входа в facebook мы не перенаправляем обратно в приложение. В симуляторе белый экран в сафари. код для входа в gmail для ios 9

func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
    if #available(iOS 9.0, *) {

        return GIDSignIn.sharedInstance().handleURL(url,
                                                    sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as! String?,
                                                    annotation: options[UIApplicationOpenURLOptionsAnnotationKey])
    }
    return true
}

Если я прокомментирую приведенный выше код, вход в facebook работает правильно, я думаю, проблема в том, что я должен вернуть логическое значение для openurl facebook в ios 9. Но я не знаю, что с этим делать? ТИА


person Arun K    schedule 11.07.2016    source источник
comment
stackoverflow.com/questions/36543729/google-sign- in-api/   -  person Sahil    schedule 11.07.2016


Ответы (3)


Нашел свой ответ, мне нужно реализовать оба метода openurl.

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {

    var shouldOpen :Bool = FBSDKApplicationDelegate.sharedInstance().application(application,openURL: url,sourceApplication: sourceApplication,annotation: annotation)

    shouldOpen = shouldOpen ? shouldOpen : GIDSignIn.sharedInstance().handleURL(url,
                                                                                sourceApplication: sourceApplication,
                                                                                annotation: annotation)
    return shouldOpen

}

func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
    if #available(iOS 9.0, *) {
        var shouldOpen :Bool = FBSDKApplicationDelegate.sharedInstance().application(
            app,
            openURL: url,
            sourceApplication: options["UIApplicationOpenURLOptionsSourceApplicationKey"] as! String,
            annotation: nil)

        shouldOpen = shouldOpen ? shouldOpen : GIDSignIn.sharedInstance().handleURL(url,sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey] as! String?,
                                                                                    annotation: options[UIApplicationOpenURLOptionsAnnotationKey])

        return shouldOpen
    }
    return true
}

мне просто нужно проверить метод открытого URL-адреса facebook для ios 9, а также

Изменить для быстрого 3.0 функция изменилась

private func application(application: UIApplication, openURL url: URL, sourceApplication: String?, annotation: AnyObject) -> Bool {


    return  FBSDKApplicationDelegate.sharedInstance().application(application,open: url as URL!,sourceApplication: sourceApplication,annotation: annotation)

}

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    if #available(iOS 9.0 , *){
     return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: "UIApplicationOpenURLOptionsKey", annotation: nil)   

    }

return true
}
person Arun K    schedule 11.07.2016
comment
Это также работает для iOS 10 Beta с FBSDKLoginButton; однако метод с sourceApplication устарел. Использовал только второй. - person tech4242; 18.08.2016
comment
Это тот, кого я искал. +1 за использование тернарного оператора. Однако будет больно, если я использую еще одну схему URL :) - person Anand; 15.11.2016

Я пытался ответить @Aruk k, но у меня не получилось

Я также столкнулся с этой проблемой за последний 1 месяц. Выполнил все шаги и руководства, но ничего не получилось. Я интегрировал вход в facebook с firebase в ios 10 swift 3. Наконец, я смог успешно его реализовать. Я исправил это, внеся следующие изменения в файл AppDelegate.

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

        FIRApp.configure()
        FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
          return true
    }


    @available(iOS 9.0, *)
    func application(_ application: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any])
        -> Bool {
            var shouldOpen :Bool = FBSDKApplicationDelegate.sharedInstance().application(application,  open: url, sourceApplication:options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String!,annotation: options[UIApplicationOpenURLOptionsKey.annotation])
            return shouldOpen
    }

    // for iOS below 9.0
    func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
        var shouldOpen :Bool = FBSDKApplicationDelegate.sharedInstance().application(application,open: url as URL!,sourceApplication: sourceApplication,annotation: annotation)
        return shouldOpen
    }

Я надеюсь, что это может помочь другим

протестировано на эмуляторе iOS 10.2, iPhone 6 Plus работает с 10.2

person twister_void    schedule 18.01.2017

Swift 4. Xcode 9. iOS 11. Вход в Google + вход в Facebook. AppDelegate.

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {

    var signedIn: Bool = GIDSignIn.sharedInstance().handle(url, sourceApplication: sourceApplication, annotation: annotation)

    signedIn = signedIn ? signedIn : FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)

    return signedIn
}

@available(iOS 9.0, *)
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool {

    var signedIn: Bool = GIDSignIn.sharedInstance().handle(url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String, annotation: options[UIApplicationOpenURLOptionsKey.annotation])

    signedIn = signedIn ? signedIn : FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String, annotation: nil)

    return signedIn
}
person Włodzimierz Woźniak    schedule 10.10.2017