概要: カスタム URL スキームを使用して、Sencha Touch 2.1 (および 2.2alpha) でネイティブ iOS アプリの作成に成功しました。iOS シミュレーターと実際のデバイスの両方で、カスタム URL を使用してコールドからアプリを起動しても、URL はアプリに渡されません (カスタム URL を使用してアプリを起動するかどうかに関係なく、Ext.device.Device.scheme
常にです)。false
ただし、アプリが既にバックグラウンドで実行されている場合は、アプリを再開するために使用されるカスタム URL がschemeupdate
イベントに正常に渡されます。コールドからの起動動作はドキュメントと一致していないため、アプリがコールドから起動されたときにカスタム URL を取得するための回避策が必要です。
詳細:
http://docs.sencha.com/touch/2-1/#!/api/Ext.device.Deviceの指示に従って、ネイティブ iOS アプリのカスタム スキーム URL を指定します。XCode 4.5.1 を使用して OS X Lion でビルドしています。
これは、Sencha Touch 2.1 と 2.2alpha の両方、および iOS 5 と iOS 6 の両方で発生します。
再現する手順:
以下を使用して新しいアプリを生成します。
$ sencha generate app -path /Library/WebServer/Documents/SchemeTest
上記のリンク先のドキュメントに従って、アプリケーションのプロパティに追加
'Ext.device.Device'
します。requires:
次のコードを app.js の launch 関数に追加します。
alert("Scheme is " + Ext.device.Device.scheme); if (Ext.device.Device.scheme) { // the application was opened via another application. Do something: alert('Applicaton pened via another application: ' + Ext.device.Device.scheme.url); } // Listen for future changes Ext.device.Device.on('schemeupdate', function(device, scheme) { // the application was launched, closed, and then launched another from another application // this means onReady wont be called again ('cause the application is already running in the // background) - but this event will be fired alert('Applicated reopened via another application: ' + scheme.url); }, this);
次の行を に追加して、カスタム URL スキームを指定します
packager.json
。"rawConfig": "<key>CFBundleURLTypes</key><array><dict><key>CFBundleURLSchemes</key><array><string>sencha</string></array><key>CFBundleURLName</key><string>com.sencha.example</string></dict></array>"
これにより、フォームの URL が
sencha:HereIsMyURL
iOS デバイスまたは iOS シミュレーターでアプリを開くようになります。次のコマンドを使用して、iOS シミュレーターでアプリを実行します。
$ sencha package run packager.json
アプリは iOS シミュレーターで起動し、カスタム URL を使用してアプリが起動されていないため、URL スキームが false と表示されます。
[OK] をクリックして警告ダイアログを閉じ、iOS シミュレーターの [ホーム] ボタンを押して、アプリをバックグラウンドに移動します。Mobile Safari を開き、URL
sencha:HereIsMyURL
を入力して Enter キーを押すか、[Go] ボタンをクリックしてアプリを再開します。アプリが再び開き、URL が正しく渡されたことがわかります。
iOS シミュレーターのホーム ボタンをタップし、ホーム ボタンをダブルタップして、アイコンが揺れ始めるまで [マイ アプリケーション] アイコンをマウス ボタンで押し続けます。赤い "-" を使用して "My Application" を完全に強制終了し、実行されないようにします。
ホームボタンをもう一度押してから Mobile Safari に戻り、URL を再入力して
sencha:HereIsMyURL
Enter キーを押すか、[移動] ボタンをクリックしてアプリを起動します。アプリは起動
Ext.device.Device.scheme
しますが、まだ false であるため、URL を取得できません。(オプション)有効なとを使用して
packager.json
ファイルを構成し、 を に設定します。次に、 を使用して実際の iOS デバイス用にネイティブ アプリを再構築し、XCode を使用してアプリをデバイスにコピーし、実際のデバイスで手順 7 から 11 を繰り返します。結果は同じです。applicationName, applicationId, bundleSeedId, certificateAlias
provisionProfile
platform
iOS
$ sencha package build packager.json
これは、アプリが既にバックグラウンドで実行されている場合にのみ、カスタム URL を取得できることを意味します。カスタム URL を使用してコールドからアプリを起動すると、アプリはカスタム URL スキームが使用されていることを正しく検出しないため、アプリに情報を渡すことができません。誰もこれに対する回避策を知っていますか?
http://www.sencha.com/forum/showthread.php?254153-ST-2.1-and-2.2alpha-Ext.device.Device.scheme-is-false-で見ることができるバグ レポートを提出しました。 on-launch-from-custom-URL .