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