LoginSignup
20
14

More than 5 years have passed since last update.

iOSアプリがユニバーサルリンクから起動されているかどうかを知る

Posted at

やりたいこと

よくある実装

よくあるユニバーサルリンクの実装は以下のようにapplication(_:continueUserActivity:restorationHandler:)のなかでuserActivityから情報を取ってきて起動処理をするものです。

extension AppDelegate {
  func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool {
      if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
          // ユニバーサルリンクの処理
        print(userActivity.webpageURL!)
      }
    }
    return true
}

アプリが起動していない状態でユニバーサルリンクをクリックすると、application(_:didFinishLaunchingWithOptions:)などの初期化処理の後にこの関数が呼ばれます。

やりたいこと

しかし今回、どうしてもapplication(_:didFinishLaunchingWithOptions:)の処理の中で中でユニバーサルリンク起動かどうかを知る必要がありました。

application(_:didFinishLaunchingWithOptions:)の中でユニバーサルリンク起動かどうか知る

結論からいうと、launchOptionsのキーに.userActivityDictionaryを指定して、その中身からuserActivityの内容がとれます。

class AppDelegate {
  func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool {
    if let userActivityDictionary = launchOptions?[.userActivityDictionary] as? [UIApplicationLaunchOptionsKey : Any],
    let userActivity = userActivityDictionary[.userActivityType] as? NSUserActivity {
      // application(_:continueUserActivity:restorationHandler:)のuserActivityと同じものが取得できる。
      if userActivity.activityType == NSUserActivityTypeBrowsingWeb {
        print(" ユニバーサルリンクから起動。URL:\(userActivity.webpageURL!)")
      }
    }
    return true
  }
}

userActivitynilかどうか判断すればユニバーサルリンク起動か知ることができます。

20
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
14