我找到了几种创建自定义 URL 方案的解决方案,例如 mycoolapp://somepath。
例如,此插件提供了定义自定义 URL 方案的功能。
但是,我不需要自定义 URL 方案。相反,我想使用标准 URL 结构,例如 http://www.mycoolapp.com/somepath。理想情况下,当在浏览器中打开此 URL 或作为超链接单击时,应提示用户打开我的应用程序 - 类似于 Google 地图的行为方式。
为了澄清,我希望它的工作方式如下:当用户在 Android 设备上单击指向我的网站的链接时,他们应该看到在我的应用程序中打开该链接的提示,如下图所示:
对于同样的问题,我使用了现有的 webintent 插件,修改了 android 清单文件 - 将这些行添加到活动中
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:host="example.com" android:scheme="http" />
</intent-filter>
并修改了index.html ondeviceready:
function deviceReady() {
window.plugins.webintent.getUri(function(url) {
console.log("INTENT URL: " + url);
//...
});
}
编辑
我刚刚注意到一种可能不受欢迎的行为。当您使用另一个应用程序中的链接(意图)打开应用程序时,它将(在许多情况下)创建一个新实例,而不使用已经运行的实例(使用 gmail 和 skype 进行测试)。为了防止这种情况,解决方案是在 config.xml 文件中更改 Android 启动模式:
<preference name="AndroidLaunchMode" value="singleTask" />
(它适用于cordova 3.5,不确定旧版本)
那么你需要在 ondeviceready 上再添加一个函数:
window.plugins.webintent.onNewIntent(function(url) {
console.log("INTENT onNewIntent: " + url);
});
当应用程序已经运行并有意将其置于前台时会触发此事件。
您正在寻找的内容在 iOS 上称为“通用链接”,在 Android 上称为“深层链接”。
有一个 Cordova 插件可以处理这个问题:https://www.npmjs.com/package/cordova-universal-links-plugin
对于任何想要使用这个答案,但通过 config.xml 修改 AndroidManifest 的人来说,以下内容对我来说是成功的。无论我使用哪种排列,尝试匹配
android:name
都不起作用。
<config-file target="AndroidManifest.xml" parent="/manifest/application/activity[@android:label='@string/activity_name']">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
<data android:scheme="https" />
<data android:host="www.mysite.com" />
<data android:pathPrefix="/whatever/path" />
</intent-filter>
</config-file>
您需要做的是检测正在连接到的设备http://www.mycoolapp.com/somepath
如果是移动设备,那么您可以向他们展示一个页面,其中包含带有可打开您的应用程序的自定义 URL 方案的链接。或者如果需要的话,自动打开应用程序的自定义网址。
您应该将
intent-filter
添加到 Android 清单中的 activity
中。像这样的东西:
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
<data android:host="www.mycoolapp.com" />
<data android:pathPrefix="/somepath" />
</intent-filter>
有关
data
的更多信息,您可以在此处添加:http://developer.android.com/guide/topics/manifest/data-element.html
还有更多这里在stackoverflow上...