18

with iOS9 application openURL:sourceApplication:annotation is deprecated

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

so now we should use;

func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {}

FBSDKApplicationDelegate what to set for sourceApplication parameter (String)

Mihriban Minaz
  • 3,043
  • 2
  • 32
  • 52

2 Answers2

35
func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool
{
    return FBAppCall.handleOpenURL(url, sourceApplication: options["UIApplicationOpenURLOptionsSourceApplicationKey"] as! String)
}

if you have annotation param in your SDK pass as nil

New SDK

   let sourceApplication: String? = options[UIApplicationOpenURLOptionsSourceApplicationKey] as? String 
   return FBSDKApplicationDelegate.sharedInstance().application(app, openURL: url, sourceApplication: sourceApplication, annotation: nil)

Update 2017/04/06: Xcode 8.3, FBSDKCoreKit 4.20.2

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
    let sourceApplication: String? = options[UIApplicationOpenURLOptionsKey.sourceApplication] as? String
    return FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: sourceApplication, annotation: nil)
}
Gwendal Roué
  • 3,949
  • 15
  • 34
Muthu Ram
  • 993
  • 6
  • 15
  • 4
    I use the new FB SDK so it was like this, but for the rest it is working, Thanks! func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool { return FBSDKApplicationDelegate.sharedInstance().application(app, openURL: url, sourceApplication: options["UIApplicationOpenURLOptionsSourceApplicationKey"] as! String!, annotation: nil) } – Mihriban Minaz Nov 18 '15 at 16:08
  • 2
    What is FBAppCall here? – code_ada Dec 21 '15 at 14:32
  • In old fbsdk , FBAppCall class is used.But if you try with new fbsdk, call FBSDKApplicationDelegate.sharedInstance().application(app, openURL: url, sourceApplication: options["UIApplicationOpenURLOptionsSourceApplicationKey"] as! String!, annotation: nil) – Muthu Ram Dec 21 '15 at 14:38
  • 1
    Instead of using a quoted string as the key I would use a constant like this:`let sourceApplication: String? = options[UIApplicationOpenURLOptionsSourceApplicationKey] as? String` `return FBSDKApplicationDelegate.sharedInstance().application(app, openURL: url, sourceApplication: sourceApplication, annotation: nil)` – user3633673 Feb 02 '16 at 17:32
  • 1
    In iOS 9 and above, source application key is available via UIApplicationOpenURLOptionsKey enum. – simioliolio Oct 24 '16 at 10:57
5

The following used on facebook site till (Jan 1, 2017)

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
        let handled = FBSDKApplicationDelegate.sharedInstance().application(app, 
                      open: url, 
                      sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String?, 
                      annotation: options[UIApplicationOpenURLOptionsKey.annotation])

        return handled
}
hasan
  • 23,815
  • 10
  • 63
  • 101