Android 深度 link 使用 intent 不打开应用程序
Android deep link using intent not opening app
我正在尝试打开我从移动 chrome 浏览器制作的应用程序。
https://developer.chrome.com/multidevice/android/intents
由此 link,我认为我必须使用 "intent:" 语法来完成这项工作。
但是,我的应用程序打不开。相反,它会打开 Google Play 商店,但商店只显示 "item not found" 页面。
我很想知道我是否做错了什么。
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="myscheme" android:host="myhost" android:path="/"/>
</intent-filter>
这是我写的意图过滤器。
var androidIntentUrl = 'intent://myhost/#Intent;scheme=myscheme;package=my.test.app.package;end';
if(!isIOS && isChromeAndBiggerThanVer25()) {
location.href = androidIntentUrl;
}
这是我在网上写的。
应用必须在 Play 商店发布才能实现吗?
我还不是很明白所有的东西。
我想知道怎么了。
PS) "myscheme" 和 "myhost" 这两个名字只是我为了写这个问题而编造的名字。我的代码中的实际名称与我的项目设置中的名称相匹配,包括包名称。
package
参数应匹配您的应用程序 ID(在 build.gradle
或您的 AndroidManifest.xml
中找到)
上面的示例代码显示包为my.test.app.package
,如果这不是您的应用程序包名称或未安装该应用程序,则意图将默认到Google Play商店进行搜索它。同样,最好将 host
和 scheme
参数更改为您的应用自定义的参数(如果您还没有这样做的话)。
正如 Alexey 在我的 post 中评论的那样,
<a href="myscheme://myhost/some/other/parameters">
对我来说还好。
我仔细检查了官方文档(我的post上的link)和我的chrome版本(71),所以我不知道为什么这样做:/ / 语法无效。
我想在第 25 版之后我错过了或找不到移动版 Chrome 上的一些更改。
我的答案是使用深度链接从 Web 应用程序打开 android 应用程序:
Flipkart - <a href="flipkart://app"> Open Flipkart! </a>
WhatsApp - <a href="whatsapp://app"> Open WhatsApp! </a>
Clash Royale - <a href="clashroyale://app"> Open Clash Royale! </a>
FaceBook - <a href="fb://app"> Open FaceBook! </a>
如果列出的应用程序安装在您的手机中,则只有它会打开,否则您必须单独处理。
我刚刚遇到了同样的问题,其中 linking with Intents 不起作用,但直接方案 linking 起作用了。但是,我不想使用直接版本来回退重定向到 PlayStore。
解决方案是意图 link 中的包参数 而不是 必须匹配 AndroidManifest.xml 中给定的包。我正在处理一个 Unity 项目,必须使用项目设置中给出的包名称。
tl;dr:这在 Chrome (v78) 中仍然有效,但包参数不一定是清单中给出的包。
我正在尝试打开我从移动 chrome 浏览器制作的应用程序。
https://developer.chrome.com/multidevice/android/intents
由此 link,我认为我必须使用 "intent:" 语法来完成这项工作。
但是,我的应用程序打不开。相反,它会打开 Google Play 商店,但商店只显示 "item not found" 页面。
我很想知道我是否做错了什么。
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="myscheme" android:host="myhost" android:path="/"/>
</intent-filter>
这是我写的意图过滤器。
var androidIntentUrl = 'intent://myhost/#Intent;scheme=myscheme;package=my.test.app.package;end';
if(!isIOS && isChromeAndBiggerThanVer25()) {
location.href = androidIntentUrl;
}
这是我在网上写的。
应用必须在 Play 商店发布才能实现吗?
我还不是很明白所有的东西。
我想知道怎么了。
PS) "myscheme" 和 "myhost" 这两个名字只是我为了写这个问题而编造的名字。我的代码中的实际名称与我的项目设置中的名称相匹配,包括包名称。
package
参数应匹配您的应用程序 ID(在 build.gradle
或您的 AndroidManifest.xml
中找到)
上面的示例代码显示包为my.test.app.package
,如果这不是您的应用程序包名称或未安装该应用程序,则意图将默认到Google Play商店进行搜索它。同样,最好将 host
和 scheme
参数更改为您的应用自定义的参数(如果您还没有这样做的话)。
正如 Alexey 在我的 post 中评论的那样,
<a href="myscheme://myhost/some/other/parameters">
对我来说还好。
我仔细检查了官方文档(我的post上的link)和我的chrome版本(71),所以我不知道为什么这样做:/ / 语法无效。
我想在第 25 版之后我错过了或找不到移动版 Chrome 上的一些更改。
我的答案是使用深度链接从 Web 应用程序打开 android 应用程序:
Flipkart - <a href="flipkart://app"> Open Flipkart! </a>
WhatsApp - <a href="whatsapp://app"> Open WhatsApp! </a>
Clash Royale - <a href="clashroyale://app"> Open Clash Royale! </a>
FaceBook - <a href="fb://app"> Open FaceBook! </a>
如果列出的应用程序安装在您的手机中,则只有它会打开,否则您必须单独处理。
我刚刚遇到了同样的问题,其中 linking with Intents 不起作用,但直接方案 linking 起作用了。但是,我不想使用直接版本来回退重定向到 PlayStore。
解决方案是意图 link 中的包参数 而不是 必须匹配 AndroidManifest.xml 中给定的包。我正在处理一个 Unity 项目,必须使用项目设置中给出的包名称。
tl;dr:这在 Chrome (v78) 中仍然有效,但包参数不一定是清单中给出的包。