PhoneGapで作成したアプリにiOSのカスタムURLスキームを与える方法と注意事項です。
実装方法
1. 他のアプリ同様にInfo.plistにURLTypesというキーを追加して、その下に必要なキーを追加します。
(キーURL identifierとキーURL schemes)
<key>CFBundleURLTypes</key> <array> <dict> <key>CFBundleURLName</key> <string>XXX.XXX.XXX</string> <key>CFBundleURLSchemes</key> <array> <string>XXX</string> </array> </dict> </array>
2. アプリケーションのJavaScriptにwindow.handleOpenURL関数を用意し、devicereadyハンドラでinvokeString変数を処理するようにコールするようにします。
www.handleOpenURL = (url) -> # process url properly document.addEventListener 'deviceready', (-> # necessary initializations handleOpenURL(invokeString) if invokeString ), false
注意点
1. シミュレータでデバッグする時、バックグラウンドにプロセスがない状態からテストするには、XcodeのRunを止めること、シミュレータ側でプロセスを消すことの2つが必要です。プロセスだけ消してテストすると、アプリがスタートアップ画面でフリーズしたような感じになります。
2. (推測)PhoneGapではバックグランドプロセスのない場合のカスタムURLスキームは、URLがdidFinishLaunchingWithOptions:メソッドでinvokeString変数への代入の形で処理されて、handleOpenURL:には渡されていないようです。なので、handleOpenURL:からJavaScriptのhandleOpenURLがコールされません。これを補うために、devicereadyイベント内で代わりの処理を行います。