質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

0回答

1524閲覧

ユニバーサルリンクとWebViewの連携

teshiya

総合スコア8

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2018/01/11 07:27

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によって接続先を変える方法がございましたらご教示いただければと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問