HOME > 開発者向けBLOG > Sencha Blog >  Sencha Touch、iOS、Cordova で URL スキームを使用

Technology Note 開発者向けBLOG

Sencha Blog

Sencha Touch、iOS、Cordova で URL スキームを使用

こんにちは、ゼノフィnakamuraです。

この記事は、US Sencha社ブログ Using URL Schemes with Sencha Touch, iOS, and Cordova を翻訳したものです。

モバイルアプリを使い、同じ端末の別のアプリケーションを起動させることは非常に便利であり、ユーザー体験を向上させます。「URL スキーム」とはアプリケーションに他のアプリケーションを起動、もしくは再開させる機能を持たせるメカニズムです。しかし、URL スキームの本当の力が発揮されるのは、データを受け取る側のアプリにパスする時です、つまりアプリケーションの挙動を制御したり、アプリケーシン内の特定の場所に直接誘導するなどといったことです。

ということでモバイルアプリ内に URL スキームを実装したいと思いませんか?以下はいくつかの実用例です。

  • アプリケーションから別のアプリケーションを起動もしくは再開する
  • アプリケーションにデータを送信する
  • 無料バージョンのアプリに保存されたデータを、有料バージョンのアプリに転送する

今日の記事では、アプリを起動し、そこに URL から特定のデータを送るということを解説したいと思います。

ユーザーの手助け

CNX はエンドユーザーが色々な種類の企業のデータにアクセスできるモバイルポータルアプリを持っています。しかし、これは適切なサーバー接続の詳細 (IP/ポート/などなど)が設定されないと正しく機能しません。このアプリケーションの前身のものでは、管理者はユーザーにアプリケーションをスマートフォンやタブレットにダウンロードさせ、「接続」アイコンをタップさせ、適切な情報を入力させていました。この情報をユーザーに正しく入力させるという方法では問題が多く生じるということがすぐにわかりました。

その解決法は、管理者に新しいユーザーに特定の URL を使ったメールを送信し、その URL をモバイル端末からタップした場合、自動的にアプリケーションを起動し、さらに適切な接続情報で設定までするということでした。このプロセスにより、設定時の入力ミスがなくなり、ユーザーのアプリでの初期体験がよりポジティブなものになりました。

では、アプリケーションにこのような URL スキームをハンドルする手順を解説しましょう。今回の場合は、ユーザーの端末で実行されているメールクライアントというアプリケーションから、別のアプリケーションを起動し、特定のデータを送信するということです。

iOS の設定

まず最初にすべきことは、アプリケーションの -info.plist ファイルをカスタム URL で更新するということです。以下は、-info.plist が xcode 内で “urlschemeexample” の URL スキームを足された後の状態です。

ビルドが成功すると、アプリケーションは新しい URL から起動、再開されます。

アプリケーションを起動する URL の例は:urlschemeexample://?foo=bar といったものになります。

もし、目標がただアプリケーションを起動、もしくは再開させるということであり、クエリパラメーターなどを無視する場合は、これだけが必要な手順です。しかし、今回の場合は、アプリケーションに URL のクエリ文字列を通したデータを受け取って欲しいので、次の手順に移らなければなりません。

index.js

Cordova は handleOpenURL というグローバル関数が存在すればそれを呼び出します。この関数には一つのパラメーターが渡されます。アプリケーションを起動/再開させるために使用された URL を含んだ文字列です。この手順を経て、handleOpenURL メソッドを Sencha Touch index.js ファイルに足します。その中で、ウィンドウに ‘launchURL’ という新しいプロパティをセットし、そこがアプリケーションを起動するための URL の値を 所持します。これにより、Sencha Touch アプリケーションの初期化時にアクセスすることができます。


コントローラー

コントローラーの init メソッドを使って、アプリケーションが 我々の URL スキームから起動されたかを確認することができます。もし、window に ‘launchURL’ プロパティが存在すれば、アプリケーションが URL から起動されたことがわかります。その場合、コントローラーは ‘onURLLaunch’ というメソッドを呼び出します (これは後にコントローラー内にコードするメソッドです )。


残りの手順はあとわずかです。コントローラー内の “init” メソッドが続けますが、オリジナルの handleOpenURL メソッドを削除します (これは Cordova が起動時に呼び出したことで役目を終えたからです )。そして、このメソッドをアプリケーションの再開機能 (既に起動されたアプリに切り替えるという意味 )のために転用します。


onURLLaunch メソッド

このメソッドはコントローラの init メソッドのアプリの起動と再開時に呼び出されるものです。二つのパラメーターが必要になります。1つめが フル URL で、2つ目が起動の種類 (”launch” か “resume”、起動か再開か )です。アプリケーションの起動と再開によって挙動を変える必要がある場合は、これによりその挙動を制御することができます。

最後の手順はクエリ文字列を抽出し、Ext.Object.fromQueryString を使ってクエリ文字列を、アプリケーションが特別なアクションをとる場合に必要なオブジェクトに変換することです。


終わりに

以上です。見ての通り、URLスキームはどんな情報でも1つのアプリから別のアプリに送信することを可能にします。まず手始めに、ユーザーがアプリにデータを入力することを省略できるユースケースに、どういったものがあるかを考えるところから始めてみるのはどうでしょうか?

PAGETOP