iOSのユニバーサルリンク(Universal Links)に関する質問になります。
ユニバーサルリンク機能を利用して、iOS標準のメッセージアプリ(SMSをやり取りできるやつです)内にて特定のURLリンクをタップすると、指定した自作アプリが開くようにしています。
この自作アプリは、UIWebViewでWebアプリと連携しています。
アプリを起動すると、Webアプリのログインページ(https://testpage/login.html)が開くような仕組みです。
■実装したいこと■
メッセージ内にURLリンクが以下のように複数あるとします。
リンクA:https://testpage/aaa.html
リンクB:https://testpage/bbb.html
今の状態ではどちらのリンクをタップしても、アプリ起動後は最初のログインページ(testpage/login.html)が開いてしまいます。(当然の動作ですが)
目標としては、タップしてアプリが起動したときに、自動的にそのページが開かれるようにしたいです。
■試したこと■
NSUserActivityオブジェクトのwebpageURLにてタップしたURLは取得できるので、以下のようにstatic変数に値を渡しました。
AppDelegate
swift
1func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool { 2 if userActivity.activityType == NSUserActivityTypeBrowsingWeb { 3 4 Values.universalLinkFlag = true // ユニバーサルリンクによる起動か判別するフラグ 5 Values.universalLinkURL = (userActivity.webpageURL?.absoluteString)! // タップしたURL 6 7 } 8 return true 9}
そして、ログインページを開く処理の際に、URLを分岐させて読込先を変えようとしました。
viewWillAppear
swift
1var connectURL = "https://testpage/login.html" 2// ユニバーサルリンクで開かれたら、接続先URLを変更 3if (Values.universalLinkFlag) { 4 connectURL = Values.universalLinkURL 5} 6 7let url = NSURL(string: connectURL) 8let requrl = NSNutableURLRequest(url: url! as URL) 9self.webView.loadRequest(requrl as URLRequest)
上記で、アプリ起動時にユニバーサルリンクによる起動であれば対応したURLのページが開かれることを想定していましたが、実際に動かすとユニバーサルリンクによる起動の場合はviewWillAppearどころかviewDidLoadすら呼ばれないことがわかりました。
■課題点■
ユニバーサルリンクでのアプリ起動時にviewDidLoad等のライフサイクルイベントが呼ばれないことが仕様なのかどうかわかりませんが、このままでは実装したいことが実現できません。
他の方法でも構いませんので、リンクURLによって接続先を変える方法がございましたらご教示いただければと幸いです。
あなたの回答
tips
プレビュー