我正在使用钛构建一个适用于 android 和 i-phone 的应用程序。我的应用程序的一部分在用户点击浏览器中的链接时启动(例如,当用户在浏览器中键入链接并按下开始按钮时,这将启动我的应用程序)现在问题是我的应用程序是否尚未安装在我想发送的手机上用户到 android/apple 应用商店,以便用户可以在访问 URL 之前下载应用并安装它。
如何做到这一点请帮助我,因为我是钛新手。提前致谢。
我正在使用钛构建一个适用于 android 和 i-phone 的应用程序。我的应用程序的一部分在用户点击浏览器中的链接时启动(例如,当用户在浏览器中键入链接并按下开始按钮时,这将启动我的应用程序)现在问题是我的应用程序是否尚未安装在我想发送的手机上用户到 android/apple 应用商店,以便用户可以在访问 URL 之前下载应用并安装它。
如何做到这一点请帮助我,因为我是钛新手。提前致谢。
您正在寻找自定义 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>