1

我正在使用钛构建一个适用于 android 和 i-phone 的应用程序。我的应用程序的一部分在用户点击浏览器中的链接时启动(例如,当用户在浏览器中键入链​​接并按下开始按钮时,这将启动我的应用程序)现在问题是我的应用程序是否尚未安装在我想发送的手机上用户到 android/apple 应用商店,以便用户可以在访问 URL 之前下载应用并安装它。

如何做到这一点请帮助我,因为我是钛新手。提前致谢。

4

1 回答 1

1

您正在寻找自定义 URL 方案。尽管如果安装了应用程序,这将有效。

对于 iOS,检查 (project)/build/iphone 文件夹中的 Info.plist 文件并查找 CFBundleURLSchemes 键。它在数组元素下列出的值是为自定义 URL 分配的名称。如有必要,您可以更改它,但仅知道它对您来说可能就足够了。我认为默认值基本上是您的小写项目名称。

对于可能需要此问题的其他人,以下示例使用您可以传递给应用程序的参数。

获得该名称后,在 URL 中使用它并添加 :// 后跟您想要的任何内容:

mybundleurlscheme://foobar?attribute=value&another_attribute=value2

在您的应用程序中,使用 Ti.App.getArguments() 找出传递给程序的内容。这里需要注意的是检测启动和暂停/恢复活动之间的区别。

最后我玩这个,暂停/恢复最终会在 Ti.App.getArguments() 中留下相同的值,这使得正确检测新的启动与恢复活动变得更加困难。

这里有几个指针:

保存 Ti.App.getArgumets() 的副本以供以后比较为“恢复”事件(不是“恢复”事件)添加应用侦听器并检查 Ti.App.getArguments()。该值在“恢复”事件期间(应用程序准备恢复时)尚不可用,但在“恢复”事件期间(应用程序已恢复时)。

当“恢复”事件的值与您最初保存的值相同时,用户执行了暂停/恢复,或者第二次启动了相同的自定义 URL。在我的场景中,我可以通过处理相同但 YMMV 来获得。这是我尝试过的一个项目的代码片段。它来自几个 SDK 版本,所以现在也许有更好的方法:

// Save initial launch command line arguments
Ti.App.launchURL = '';
Ti.App.pauseURL = '';
var cmd = Ti.App.getArguments();
if ( (getTypeOf(cmd) == 'object') && cmd.hasOwnProperty('url') ) {
    Ti.App.launchURL = cmd.url;
    Ti.API.info( 'Launched with url = ' + Ti.App.launchURL );
}

// Save launch URL at the time last paused
Ti.App.addEventListener( 'pause', function(e) {
    Ti.App.pauseURL = Ti.App.launchURL;
});

// After app is fully resumed, recheck if launch arguments
// have changed and ignore duplicate schemes.
Ti.App.addEventListener( 'resumed', function(e) {
    Ti.App.launchURL = '';
    cmd = Ti.App.getArguments();
    if ( (getTypeOf(cmd) == 'object') && cmd.hasOwnProperty('url') ) {
        if ( cmd.url != Ti.App.pauseURL ) {
            Ti.App.launchURL = cmd.url;
            Ti.API.info( 'Resumed with url = ' + Ti.App.launchURL );
        }
    }
});

对于 Android:在 SDK 3.0 中,无需创建自定义 AndroidManifest.xml,只需打开您的 tiapp.xml 并找到您的节点,并确保将其添加到其中:

<activity
            android:name=".MobileappActivity"
            android:label="MobileApp"
            android:theme="@style/Theme.Titanium"
            android:configChanges="keyboardHidden|orientation"
        >
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                     <category android:name="android.intent.category.DEFAULT" />
                     <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.LAUNCHER" />
                     <data  android:scheme="Mobileapp" />
            </intent-filter>
        </activity>
于 2013-03-06T18:27:38.433 回答