iOS アプリの URL scheme ではなく、
Use item links to help others find shared items | 1Password
これの話。
「Copy Link(リンクをコピー)」で入手できる URL は以下のような形式になっている。
見やすさのために改行を入れると、こういう構造だとわかる。
https://start.1password.com/open/i ?a=3B2ZGWDZOZG6XDG5H2IJGUEADQ &v=boqzyrqxkbuidqbc7gle7vq5xq &i=queykooqcvbitd4rdvxemoauiq &h=my.1password.com
この URL をブラウザで開くと、以下の URL に遷移する。この遷移は HTTP リダイレクトではなく JavaScript によって発生している(後述)。
https://my.1password.com/signin ?landing-page= %2Fvaults%2Fboqzyrqxkbuidqbc7gle7vq5xq %2Fallitems%2Fqueykooqcvbitd4rdvxemoauiq
後者の URL におけるクエリストリングも踏まえると、前者の URL におけるクエリストリングの各パラメータは以下のような意味と推察できる。
- a は account
- 個人利用の場合は個人ごとに、 Team 利用の場合は Team ごとにユニークと思われる
- 組織で Team プランを導入している場合、複数人がそれぞれ持つ item で a の値は一致していた
- 個人利用の場合は個人ごとに、 Team 利用の場合は Team ごとにユニークと思われる
- v は Vault(保管庫)
- i は Item
- h は Web 版 1Password を利用する際のホスト名
- 試しに前者の URL を https://start.1password.com/open/i?a=3B2ZGWDZOZG6XDG5H2IJGUEADQ&v=boqzyrqxkbuidqbc7gle7vq5xq&i=queykooqcvbitd4rdvxemoauiq&h=foobar.1password.com のように書き換えてブラウザで開くと https://foobar.1password.com/signin?landing-page=%2Fvaults%2Fboqzyrqxkbuidqbc7gle7vq5xq%2Fallitems%2Fqueykooqcvbitd4rdvxemoauiq に遷移する
a と h が両方必要なのは何故?という疑問が浮かんだが、ページ遷移を JavaScript のみで行う(API リクエストを発生させない)ために、 URL 内に遷移先 URL の情報を含めているのだろう。
JavaScript によって遷移している箇所は、以下のように特定できる。
画像一枚目: 赤矢印の行が start.1password.com な URL に対するリクエスト。黄矢印の行が遷移先の URL に対するリクエスト。
画像二枚目: 遷移先 URL へのリクエストの Initiator の JavaScript (minified) を prettfiy した該当行。素朴に window.location.assign()
している。
遷移先の URL をブラウザで開いたとき、 1Password アプリで開きますか?というダイアログが表示される(こともある。ダイアログが出る・出ない条件は詳しく調査していない。おそらく 1Password アプリのインストール状況やブラウザ拡張のインストール状況による)。