読者です 読者をやめる 読者になる 読者になる

【swift】AppDelegateのopenURLが呼ばれなかったときの対応メモ

swift ios objective-c iPhoneアプリ開発

はじめに

「example://」のような形でアプリを起動したときにAppDelegateのopenURLメソッドが呼ばれませんでした。
ちなみに、アプリを起動した状態でブラウザから起動すると期待通り呼ばれました。

原因としては、AppDelegateのdidFinishLaunchingWithOptionsでFaceBookSDKの処理を追加したため以下のような箇所が原因でした。

return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)

これがfalseを返す原因はまだ調べきれていません、、、

原因

didFinishLaunchingWithOptionsの戻り値がfalseだとopenURLが呼ばれないみたいでした

AppDelegate.swift

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    // なんらかの処理
    // result = 外部のSDKやらを使ってその戻り値

    return result
}

func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
    // ★呼ばれない
    return true
}

対応

AppDelegate.swift

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    // ★openURLが呼ばれないのでここでUserDefaultにでも保存しておいてViewControllerなどで処理する
    if let openUrl = launchOptions?[UIApplicationLaunchOptionsURLKey] as? NSURL {
       let userDefaults = NSUserDefaults.standardUserDefaults()
       userDefaults.setObject(openUrl, forKey: "openUrl")
    }

    // なんらかの処理
    // result = 外部のSDKやらを使ってその戻り値

    return result
}

以上です