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

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

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

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

1回答

2313閲覧

Custom URL Schemeで起動時のURLをアプリ側で取得したい

Risney

総合スコア148

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2020/09/08 08:41

前提・実現したいこと

①以下のURLスキームでをsafariからアプリを起動
②パラメーターを取得
③「パラメーター取得ボタン」で取得したパラーメーターを表示する

・stv://hostname:8080/test?name=taro

まずはこんな感じにprinntされるようにしたい。

print

1url : cm-app://hostname:8080/test?name=taro 2scheme : cm-app 3host : hostname 4port : 8080 5query : name=taro

発生している問題・エラーメッセージ

safariからアプリを起動できるが、
printで何も表示されない。(取得されていないのか…?)

該当のソースコード

swift

1import UIKit 2 3@UIApplicationMain 4class AppDelegate: UIResponder, UIApplicationDelegate { 5 6 func open(_ url: URL, 7 options: [UIApplication.OpenExternalURLOptionsKey : Any] = [:], 8 completionHandler completion: ((Bool) -> Void)? = nil){ 9 let url = URL(string: "stv")! 10 11 if UIApplication.shared.canOpenURL(url) { 12 if #available(iOS 10.0, *) { 13 UIApplication.shared.open(url, options: [:], completionHandler: { 14 (success) in 15 print("Open (success)") 16 }) 17 }else{ 18 UIApplication.shared.openURL(url) 19 } 20 } 21 } 22 23 func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool { 24 print("url : (url.absoluteString)") 25 print("scheme : (url.scheme!)") 26 print("host : (url.host!)") 27 print("port : (url.port!)") 28 print("query : (url.query!)") 29 return true 30 } 31 32---以下略--- 33

URL Type設定
イメージ説明

試したこと

以下のサイト参考に実装してみたのですが、問題解消ならず…

[iOS] ディープリンク(Custom URL Scheme)でアプリを起動する
Web ページから iOS アプリを起動したい - Custom URL scheme

補足情報(FW/ツールのバージョンなど)

・version
MacOS:Catalina 10.15.5
Xcode:11.6

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

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

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

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

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

Risney

2020/09/09 06:34 編集

早速の回答ありがとうございます。 SceneDelegate.swiftに以下を追加したら、コンソールにURLはprint文に表示されました! ```SceneDelegate func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>){ print(URLContexts) } ``` しかしこれだと、 以下の他のパラメーターを取得するのが出来ない状態であります。 公式ドキュメントも確認してみたもののそれらしいものを見つけられず… > host : hostname > port : 8080 > query : name=taro 【追加】 なんかそれっぽい記事みつけたので、 いったんこちらを参照にやってみようと思います! [[iOS13]SceneDelegateでURL Schemeのリクエストを受取る(追記あり)](https://qiita.com/MASATO_SSS/items/734da388c9e8f135911e)
Risney

2020/09/09 08:54

おかげさまでこちらの問題は解決いたしました。 いつもありがとうございます。 また、こちらから派生した問題も起きたので、 もしお時間ありましたらご確認いただけると幸いです。 https://teratail.com/questions/290693?modal=q-comp
guest

回答1

0

自己解決

SceneDelegate.swiftに以下を追加したら、コンソールにURLはprint文に表示されました!

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>){ print(URLContexts) // コールバックで来たURLの取得 guard let url = URLContexts.first?.url else { return } let components = URLComponents(string: url.absoluteString) print(components?.url! as Any) print(components?.scheme! as Any) print(components?.host! as Any) print(components?.port! as Any) print(components?.query! as Any) //下記の方法でも良い //let host = components?.host //print(host!) }

参照記事
[iOS13]SceneDelegateでURL Schemeのリクエストを受取る(追記あり)

投稿2020/09/09 07:46

Risney

総合スコア148

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問