URLスキームが複数のアプリで同一であった時のiOSバージョンごとの挙動について

投稿日: 更新日:

結構違いがあったので、自分のためも兼ねて記しておきます。

以下、先にインストールしたものをA、後にインストールしたものをB。
URLスキームは両方とも xxx:// とします。

 

■ iOS5の場合

A、Bがインストールされている場合に、xxx://で呼び出されるのはAです。
xxx://というURLスキームが先着でAに紐づけられ、固定されます。
A削除後にxxx://を呼び出してもBを開くことはできません。

Aの削除後に、xxx://のURLスキームを持つアプリがインストールされた時点で、再度そのアプリに紐づけがなされます。

【先にインストールしたもの優先】

 

■ iOS6の場合

A、Bがインストールされている場合に、xxx://で呼び出されるのはBです。
Bを削除後にはxxx://でAが呼び出されます。

【後にインストールしたもの優先】

 

■ iOS7の場合

どのアプリが優先して呼び出されるかを決める要素は無いようです。

If more than one third-party app registers to handle the same URL scheme, there is currently no process for determining which app will be given that scheme.

異なるデベロッパのアプリA,Bをインストールした場合には、Bが優先されることが多いように思えますが、同一デベロッパのものでAが起動するものもあるとのことです。

ただし、競合するアプリがApple製のものであった場合、Apple製が優先されます。

If your URL type includes a scheme that is identical to one defined by Apple, the Apple-provided app is launched instead of your app.

参考:iOS App Programming Guide

【優先順位不明だけど、Appleは最優先】

 

■ RSSフィードを開いた際の挙動について

SafariでRSSをFeedlyなどに登録しようとしても、Podcastが起動してしまうという悩みを読みました。
iPhoneからFeedlyは登録できる? | iPhoneとマヨテキメモ

一方で、Feedlyのアプリが起動するという記事もあります。
なんでこんなに統一性がないのか気になって調べてみたのが、上の結果です。

さて、今回の件で理解しなくてはいけないのは、RSSフィードをSafariで直接開くとhttp://から始まるアドレスをfeed://にリダイレクトするということです。
https://reliphone.wordpress.com/feed/
↑これをiPhoneのSafariで開くとfeed://~が呼ばれます。
これはPodcastアプリが持つURLスキームなので、もしインストールされていればPodcastが起動します。
(iPadの場合はまた挙動が異なりますが、今回は割愛します)

このURLスキームは他にもFeedlyやDigg、Downcastなどいくつものアプリに備わっているものなので、これらのうちどれかひとつが起動することになります。
feed://がどのアプリに紐づけされているかという話なのです。

iOS6までであれば、Podcastに優先してサードパーティーアプリを起動することが可能でしたが、iOS7では競合した場合に必ずApple製アプリが優先される。これがポイントです。
ですので、SafariでRSSフィードを開いて直接Feedlyアプリなどに登録するためには、Podcastをインストールしていないことが条件になります。

ちなみにブログ等に貼ってあるFeedly登録用のアイコンは、普通にFeedlyのWebに繋がるだけなので、Podcastをインストールしていようが影響はないはずです。

 

もし誤りがあった場合はつっこみを頂けると助かります。