cordova 如何从 http 或 https url 打开应用程序?

问题描述 投票:0回答:5

我找到了几种创建自定义 URL 方案的解决方案,例如 mycoolapp://somepath。

例如,此插件提供了定义自定义 URL 方案的功能。

但是,我不需要自定义 URL 方案。相反,我想使用标准 URL 结构,例如 http://www.mycoolapp.com/somepath。理想情况下,当在浏览器中打开此 URL 或作为超链接单击时,应提示用户打开我的应用程序 - 类似于 Google 地图的行为方式。

为了澄清,我希望它的工作方式如下:当用户在 Android 设备上单击指向我的网站的链接时,他们应该看到在我的应用程序中打开该链接的提示,如下图所示:

application link

javascript cordova url-scheme
5个回答
19
投票

对于同样的问题,我使用了现有的 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);
});

当应用程序已经运行并有意将其置于前台时会触发此事件。


5
投票

您正在寻找的内容在 iOS 上称为“通用链接”,在 Android 上称为“深层链接”。

有一个 Cordova 插件可以处理这个问题:https://www.npmjs.com/package/cordova-universal-links-plugin


2
投票

对于任何想要使用这个答案,但通过 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>

0
投票

您需要做的是检测正在连接到的设备http://www.mycoolapp.com/somepath

如果是移动设备,那么您可以向他们展示一个页面,其中包含带有可打开您的应用程序的自定义 URL 方案的链接。或者如果需要的话,自动打开应用程序的自定义网址。


0
投票

您应该将

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上...

© www.soinside.com 2019 - 2024. All rights reserved.