Closed5

ネイティブアプリとURL, CustomUrlScheme (DeepLink), UniversalLink, AppLink, DynamicLink の区別をつける

miyatakamiyataka

自分用メモ

この場合URLで表現したいこと

  • アプリの特定のページを開く

上記を前提についでに実現されると便利なこと

  1. アプリがあれば起動して特定ページを開くが、なければストアページに遷移したい
  2. OSだけでなく、ブラウザでも同じ挙動を実現したい

定義と補足

custom url scheme

  • OSに渡してアプリを起動するURL
    • アプリにスキームを設定しておくとよいらしい
  • アプリがインストールされている前提のとき(push通知、アプリ内部の遷移など)ならこれで十分
  • iOSはUniversal Linkといい、AndroidはAppLinkという。
  • OS固有のもので、なければそれぞれのストアへ遷移させる。
  • アプリをインストール有無が不明だけど、OSが分かるときは使える。
  • どのOS、アプリインストールの有無、そもそもPCで開かれる可能性があるときにも使えるようにするもの
  • 例えば、アプリ内部のコンテンツを友達に共有したい場合(twitter, youtube, tiktokのコンテンツなど)
    • 送付方法が不明
    • 送付先がPCか、スマホかどうかが不明
    • スマホだったとして、OSが不明
    • アプリのインストール有無が不明
  • 上記のケースでもブラウザさえあれば firebase dynamic linkはうまく機能するようにできる
  • 別の言い方をすると、アプリのコンテンツがどこに共有されても困らないようにする必要があるときに使うと便利
  • 上記のアプリの特定ページを開けるURLの総称
  • 歴史的には「Webサイトのトップページ以外を指すURL」とかだったときもあるが現代的にはその意味で使われるほうが稀
miyatakamiyataka

参考になった方はLikeしてってください!
間違いを見つけた方はコメントやTwitterでメンションとかしてもらえると!

miyatakamiyataka

脆弱性についての理解メモ

  • custom URL schemeはあくまで各アプリが自分に紐づくscheme文字列を宣言するだけである
  • 異なるアプリ間で同一scheme文字列が利用されているとき、どちらが起動するかは不定
  • よって、正しいアプリのpush通知などから、悪意を持ったアプリが存在する場合は、そちらへ誘導されてしまう可能性がある。そちらでなんらかの機密情報を入力するように誘導する、などが起きうる。
  • 対策として、アプリとdomainを紐づけるUniversal Links / AppLinksがある
    • プラットフォーム側(apple/google)から発行されたファイルを特定domain配下の特定pathでhostすることで、ドメイン保持者とアプリの識別子(bundleID)、もといアプリの保持者(開発者)とを紐づけることができる。bundleIDなどは一意なので、別のアプリが起動されることはなくなる。
このスクラップは2023/03/16にクローズされました