使用自定义URL方案启动Sencha Touch Native iOS应用程序时,Ext.device.Device.scheme始终为false

时间:2013-01-17 18:27:05

标签: ios sencha-touch native

摘要:使用自定义网址方案在Sencha Touch 2.1(和2.2alpha)中成功创建了原生iOS应用。在iOS模拟器和真实设备上,使用自定义网址从冷启动应用程序时,不会将URL传递给应用程序(Ext.device.Device.scheme始终为false,无论您是否使用是否自定义URL)。但是,如果该应用已在后台运行,则用于恢复该应用的自定义网址会成功传递到schemeupdate事件。冷启动行为与文档不一致,我需要一种解决方法,以便在应用程序从冷启动时获取自定义URL。

详情

按照http://docs.sencha.com/touch/2-1/#!/api/Ext.device.Device上的说明为我的原生iOS应用指定自定义方案网址。我正在使用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中的启动功能:

    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. 通过将以下行添加到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>"
    

    这将导致sencha:HereIsMyURL形式的网址在iOS设备或iOS模拟器上打开您的应用。

  5. 使用以下命令在iOS模拟器中运行应用程序:

    $ sencha package run packager.json
    
  6. 该应用程序将在iOS模拟器中启动,并显示URL方案为false,因为该应用尚未使用自定义网址启动:

    App start without URL scheme

  7. 单击“确定”关闭警报对话框,然后按iOS模拟器上的“主页”按钮将应用程序移动到后台。打开Mobile Safari并输入URL sencha:HereIsMyURL并按Enter或单击Go按钮以恢复应用程序:

    App resume with URL scheme

  8. 应用程序将重新打开,您将看到URL已正确传入:

    URL argument passed to resumed app

  9. 点击iOS模拟器上的主页按钮,然后双击主页按钮并在“我的应用程序”图标上按住鼠标按钮,直到图标开始抖动。使用红色“ - ”完全杀死“我的应用程序”,以便它不再运行:

    Kill running app

  10. 再次按“主页”按钮,然后返回到移动版Safari并重新输入网址sencha:HereIsMyURL,然后按Enter或点击“转到”按钮启动该应用。

  11. 该应用将启动,但Ext.device.Device.scheme仍为false,因此无法检索到该网址。

    App start from cold with URL scheme

  12. (可选)使用有效packager.jsonapplicationName, applicationId, bundleSeedId, certificateAlias配置provisionProfile文件,并将platform设置为iOS。然后使用$ sencha package build packager.json为您的真实iOS设备重建原生应用程序,使用XCode将应用程序复制到您的设备,并在真实设备上重复步骤7到11。结果是一样的。

  13. 这意味着只有在应用程序已在后台运行时才能检索自定义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看到。

0 个答案:

没有答案