2

概要: カスタム 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 の両方で発生します。

再現する手順:

  1. 以下を使用して新しいアプリを生成します。

    $ sencha generate app -path /Library/WebServer/Documents/SchemeTest
    
  2. 上記のリンク先のドキュメントに従って、アプリケーションのプロパティに追加'Ext.device.Device'します。requires:

  3. 次のコードを 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);
    
  4. 次の行を に追加して、カスタム 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:HereIsMyURLiOS デバイスまたは iOS シミュレーターでアプリを開くようになります。

  5. 次のコマンドを使用して、iOS シミュレーターでアプリを実行します。

    $ sencha package run packager.json
    
  6. アプリは iOS シミュレーターで起動し、カスタム URL を使用してアプリが起動されていないため、URL スキームが false と表示されます。

    URL スキームを使用しないアプリの起動

  7. [OK] をクリックして警告ダイアログを閉じ、iOS シミュレーターの [ホーム] ボタンを押して、アプリをバックグラウンドに移動します。Mobile Safari を開き、URLsencha:HereIsMyURLを入力して Enter キーを押すか、[Go] ボタンをクリックしてアプリを再開します。

    URL スキームを使用したアプリの履歴書

  8. アプリが再び開き、URL が正しく渡されたことがわかります。

    再開されたアプリに渡される URL 引数

  9. iOS シミュレーターのホーム ボタンをタップし、ホーム ボタンをダブルタップして、アイコンが揺れ始めるまで [マイ アプリケーション] アイコンをマウス ボタンで押し続けます。赤い "-" を使用して "My Application" を完全に強制終了し、実行されないようにします。

    実行中のアプリを強制終了

  10. ホームボタンをもう一度押してから Mobile Safari に戻り、URL を再入力してsencha:HereIsMyURLEnter キーを押すか、[移動] ボタンをクリックしてアプリを起動します。

  11. アプリは起動Ext.device.Device.schemeしますが、まだ false であるため、URL を取得できません。

    URL スキームを使用したコールドからのアプリの起動

  12. (オプション)有効なとを使用してpackager.jsonファイルを構成し、 を に設定します。次に、 を使用して実際の iOS デバイス用にネイティブ アプリを再構築し、XCode を使用してアプリをデバイスにコピーし、実際のデバイスで手順 7 から 11 を繰り返します。結果は同じです。applicationName, applicationId, bundleSeedId, certificateAliasprovisionProfileplatformiOS$ 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 .

4

0 に答える 0