Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Google Sign-In for iOS: error "Cannot subscript a value of type '[String : AnyObject]' with an index of type 'String'"

Tags:

ios

swift

swift2

'Cannot subscript a value of type [String, AnyObject] with an index of type String' for options[UIApplicationOpenURLOptionsSourceApplicationKey]. Swift 2, iOS 9.x, Google Sign in installed using CocoaPods. Any hints?

func application(app: UIApplication, openURL url: NSURL, options:     [String : AnyObject]) -> Bool {
    return GIDSignIn.sharedInstance().handleURL(url,    sourceApplication: options[UIApplicationOpenURLOptionsSourceApplicationKey], annotation: options[UIApplicationOpenURLOptionsAnnotationKey])
}
like image 735
Duke Ace Avatar asked Feb 24 '16 06:02

Duke Ace


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 with the method you are using, you can using it like (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 above and in iOS 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)
}
like image 184
EI Captain v2.0 Avatar answered Oct 11 '22 21:10

EI Captain v2.0


I found that I needed to use this version recently (i.e., Swift 3.x). I hope this helps others with a similar compilation error.

return GIDSignIn.sharedInstance().handle(
    url as URL!,
    sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication.rawValue] as! String?,
    annotation: options[UIApplicationOpenURLOptionsKey.annotation.rawValue])
like image 44
MarkMendy Avatar answered Oct 11 '22 22:10

MarkMendy


Swift 4 compatible answer by 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[UIApplication.OpenURLOptionsKey.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)
}
like image 32
atulkhatri Avatar answered Oct 11 '22 21:10

atulkhatri



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!