Logging in for iOS: error "Unable to adjust value of type" [String: AnyObject] with index of type "String" "

'Cannot tune value of type [String, AnyObject]with index of type String' for options[UIApplicationOpenURLOptionsSourceApplicationKey]. Swift 2, iOS 9.x, Google Login installed using CocoaPods. Any clues?

func application(app: UIApplication, openURL url: NSURL, options:     [String : AnyObject]) -> Bool {
    return GIDSignIn.sharedInstance().handleURL(url,    sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey], annotation: options[UIApplicationOpenURLOptionsAnnotationKey])
}
+4
source share
3 answers

function before iOS 9.0

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
    return GIDSignIn.sharedInstance().handleURL(url, sourceApplication: sourceApplication, annotation: annotation)
}

or using the method you use, you can use it as ( Prior to iOS 9.0 and above)

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

or to support both in iOS 9 and aboveandiOS 8.0 to iOS 9.0

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

//for iOS 8, check availability   
@available(iOS, introduced=8.0, deprecated=9.0)
func application(application: UIApplication,openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
    return GIDSignIn.sharedInstance().handleURL(url, sourceApplication: sourceApplication!, annotation: annotation)
}
+8
source

, (.. Swift 3.x). , .

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

Swift 4 compatible answer to El Captain v2.0:

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

//for iOS 8, check availability
@available(iOS, introduced: 8.0, deprecated: 9.0)
func application(_ application: UIApplication,open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
    return GIDSignIn.sharedInstance().handle(url as URL!, sourceApplication: sourceApplication!, annotation: annotation)
}
0
source

All Articles