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

Chromeのx−callback−url

考察

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


DACエンジニア採用情報

  関連記事

【クラウド初心者向け】Google Cloud Platform(GCP)でWebサイトを公開してみよう!

はじめに みなさんこんにちは、プロダクト開発本部の亀梨です。 普段はXmediaOneというメディアプランニング・広告運用管理・トラッキング・マーケティング分析を行う 統合プラットフォームの開発を担当しています。 背景 わたくしは最近プライベートで開発したWebサービスをインターネット上に公開しまし …

Scala入門 準備編「開発環境構築」 – PHP使いからScala使いへ転身!

  はじめに みなさんこんにちは、今月入社しましたプロダクト開発本部の亀梨です。 普段はXmediaOneというメディアプランニング・広告運用管理・トラッキング・マーケティング分析を行う 統合プラットフォームの開発を担当しています。 XmediaOneの開発で採用しているプログラム言語はS …

自社サービスのDocker化(前編)

こんにちは。 インフラ開発部の上田です。 普段は自社開発システムのインフラ担当として、日々頑張って仕事をしています。 今回は、近年話題になっているDockerについて、取り上げてみようと思います! なぜDockerなのか・・・? そもそもDockerとは何か・・・?   当社では様々なサー …

MacのSSHポートフォワーディングツール「autossh」と「Coccinellida」をご紹介!

はじめに みなさんこんにちは、プロダクト開発本部の亀梨です。 普段はXmediaOneというメディアプランニング・広告運用管理・トラッキング・マーケティング分析を行う 統合プラットフォームの開発を担当しています。 さて、皆さんはSSHポートフォワーディングするときにどんな方法で行っていますか? わた …

【小ネタ】タスク管理ツール移行: Trello から Asana

  プロジェクトチームのタスク管理ツールを Trello から Asana に変えることになり、 タスクの移行が意外と簡単にできた、というお話です。 Trello と Asana もともと使っていたのは Trello(トレロ)です。 プロジェクト > タスクグループ > タスク …

自社サービスのDocker化(後編)

こんにちは。 インフラ開発部の上田です。 前回、前編としてDockerについて書き、早半年も経ちました。 前編はこちらです 今回は後編として、以下について書いてみたいと思います。 ■複数プロセス起動 前編で書いた通り、通常のOS起動時とは異なり、コンテナ上で個別にプロセスを起動する必要があります。 …

no image
AWSにRailsアプリをデプロイする(準備編)

今回は、せっかくRailsで開発したアプリをAWS上に公開してみたいので その構築方法をまとめていきたいと思います。 (前回の記事:初心者がRailsで開発 – deviseでユーザー認証設定 ) AWSの設定はすでに社内で使用できるようになっていたので割愛します。 ★やりたいこと Gitlabでコ …

fastavroとjqでAVRO形式のファイルからデータを取得しよう

AVRO形式のファイルを取り扱いたい AVROとはApacheプロジェクトのひとつとして開発されているデータ交換形式です。 コンパクトなバイナリで高速なシリアライズ・デシリアライズが行えるため、サーバーログなどに利用されています。 弊社内での一部システムのログデータにも利用されているのですが、専用の …

modern.IEを使ってMac上でWindows10を動かす

Microsoftが提供している modern.IE というプロジェクトがある。そこで提供されている仮想環境を使って、MacにWindows10をインストールしてみる。ちなみに、このプロジェクトの本来の目的はInternet Explorerの表示確認やデバッグの支援。 VirtualBoxの準備 …

クラウド電話API “Twilio”で起こされてみた

どうも、開発部のクラヴマガです。 弊社サービスも最近はAWSの様なクラウド環境でサービスを構築することが多くなりました。 そこで問題になるのが、障害などによる深夜対応・・・。 データセンターに物理サーバをおいていた頃は、データセンターから障害発生時に 電話連絡をもらっていたのですが、クラウド環境では …