DACエンジニアブログ:アドテクゑびす界

DACのエンジニアやマーケター、アナリストが執筆するアドテクの技術系ブログです。

x-callback-urlを使ってみた

x-callback-urlとは?

iOSのアプリ間連携の仕様の一つみたいです。簡単に言うと、ディープリンクを行うためにカスタムURLスキームを利用するが、アプリ毎にバラバラな規則でURLスキームを設定するとアプリ間連携をスムーズに行うことができないため、どのような規則でURLスキームを設定するかを仕様としてまとめたのが、x-callback-urlみたいです。

http://x-callback-url.com/

iOSのディープリンク周りだと、AppleWWDC2015でApp Searchという機能が発表されてました。

https://developer.apple.com/library/prerelease/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS9.html#//apple_ref/doc/uid/TP40016198-DontLinkElementID_1

詳しく読んでませんが、Google検索用AppIndexing(https://developers.google.com/app-indexing/webmasters/?hl=ja)みたいな感じなのかなと思います。

Androidは?

x-callback-urlはiOS用の仕様のため、Androidも同じものがないか調べてみましたが見つからず。。。 厳密には違いますが、Android版は、さきほど登場したGoogle検索用AppIndexingでしょうか。 知っている人がいたら教えてください。

そもそもAndroidは、アプリからintentで別アプリを起動しても、戻るボタンでアプリに戻ることができるので、 そこまでの機能が必要ないのかもしれないです。

ただし、x−callback−urlで規定されているようなインターフェースは、 アプリ毎に異なってしまうため、同じような仕様が必要な気がします。

アプリの対応状況は?

そんなx-callback-urlですが、対応しているアプリは以下の通りです。

http://x-callback-url.com/apps/

有名どころだと、Evernote / Google Chrome / Google Maps / Tumblr for iOS / クックパッドのアプリが対応しているみたいです。

ちなみにFacebookやTwitterは、独自仕様です。

Facebook https://developers.facebook.com/docs/applinks/overview Twitter https://dev.twitter.com/ja/cards/mobile

使ってみる

iOS版Chromeが対応しているということで、サンプルアプリを作って連携させてみました。

Opening links in Chrome for iOS https://developer.chrome.com/multidevice/ios/links#enabling-a-callback-with-x-success GoogleChrome/OpenInChrome https://github.com/GoogleChrome/OpenInChrome.git

このgitに上がっているサンプルアプリのソースを元にswiftで写経しました。

ソースはここにあげました。 https://github.com/takuhou/x-callback-url

アプリのキャプチャはこんな感じ。

遷移

※なぜがアプリ名が表示されずnullになりました。

無事アプリからChromeを起動して、またアプリに戻ってこれました。

で、x−callback−urlの仕様はこんな感じ。

x−callback−url
[scheme]://[host]/[action]?[x-callback parameters]&[action parameters]
scheme:アプリ毎のURLスキーム
host:[x-callback-url]を指定
action:遷移先アプリでのアクション
x-callback parameters
x-source:遷移元のアプリ名(遷移先のアプリで表示するのが親切でいいそうです)
x-success:遷移元のURLスキーム+パラメータなど
x-error:遷移先のアプリの起動が失敗した場合に起動するURLを定義?
x-cancel:ユーザーによってアクションがキャンセルさせた場合に起動するURLを定義?
action parameters:遷移先アプリ固有の処理を行うアクション

Chromeのx−callback−url
googlechrome-x-callback://x-callback-url/open/?x-source=(null)&url=http%3A%2F%2Fwebdemo.dac.co.jp%2Finfeed%2Finfo.html&x-success=myapp%3A%2F%2F&create-new-tab

考察

Facebook/Twitterは独自仕様、x−callback−urlという仕様が存在し、App Searchもあり、AppIndexingもあり、 ウェブtoアプリやアプリtoウェブも考えなければいけない。

これらを差分をまるっと吸収してくれる、ワンディープリンクソリューションがあれば嬉しいと思ったのは、 僕だけではないはずです。

というか既にあると思うので調べたほうがいいですね。

後、x-callback-urlを実装しているライブラリがあるので、これを使うと便利みたいです。 https://github.com/tapsandswipes/InterAppCommunication

x-callback-url対応アプリのIF

Evernote https://github.com/evernote/evernote-ios-x-callback-url GoogleMaps https://developers.google.com/maps/documentation/ios/urlscheme Tumblr for iOS https://github.com/tumblr/TMTumblrSDK#url-schemes