Cordova从http或https网址打开应用程序

时间:2015-01-20 09:24:21

标签: javascript cordova url-scheme

我无法找到解决问题的方法。

我找到了许多自定义网址的答案(mycoolapp://somepath)。

例如,

This plugin会添加自定义网址 - Sheme。

但我不想要自定义网址 - Sheme,我想要一个像这样的“普通”网址(http://www.mycoolapp.com/somepath)。

如果你在浏览器中打开它或者点击超链接,那么它会要求你打开我的应用程序(就像谷歌地图那样)。

这个问题可能已经有了答案,但我找不到。

修改

如果您不知道我的意思,那么如果您点击Android设备上我的网站链接,那该怎么回事:

只需选择我的应用即可。

5 个答案:

答案 0 :(得分:14)

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

当应用程序已经运行并且意图带到前面时,会触发此操作。

答案 1 :(得分:3)

您正在寻找的是&#34; Universal Links&#34;在iOS和&#34;深层链接&#34;在Android上。

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

答案 2 :(得分:0)

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

的设备

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

答案 3 :(得分:0)

您应该在Android清单中的intent-filter添加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>

更多关于您可以在此添加的datahttp://developer.android.com/guide/topics/manifest/data-element.html

在stackoverflow上

甚至更多here ......

答案 4 :(得分:0)

对于希望使用 this answer 但通过 config.xml 修改 AndroidManifest 的任何人,以下内容对我有用。无论我使用哪种排列,都无法尝试匹配 NameError: name 'crazyvar' is not defined

android:name