如果Android / iphone上没有安装app,请将用户带到应用程序商店

时间:2013-03-06 07:48:45

标签: titanium titanium-mobile

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

如何帮助我,因为我是钛的新手。提前致谢。

1 个答案:

答案 0 :(得分:1)

您正在寻找自定义网址计划。虽然这适用于安装了应用程序。

对于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()的副本以供以后比较 为'resumed'事件添加应用程序侦听器(而不是'resume'事件)并检查Ti.App.getArguments()。 “恢复”事件期间(当应用程序准备恢复时)尚未提供该值,但是在“恢复”事件期间(应用程序恢复时)。

当'resumed'事件具有您最初保存的相同值时,用户执行暂停/恢复或第二次启动相同的自定义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>