目前我正在开发一个应用程序,当用户在网页上的任何浏览器中单击预定义格式的 url 时应该调用该应用程序。我想到了两种格式的选择。
https://mobile.meta.com/payment/applink.html?page=login&payload=some_payload (app link with https scheme)
metaapp://payment?page=login&payload=some_payload (app link with custom scheme)
所以我先尝试了 https 方案。我正在 chrome 上测试我的应用程序,一切正常。我的应用程序被直接调用,没有任何问题。
所以当我使用
intent.getData()
在我的本机代码中,它返回调用应用程序的正确 https 请求。
但是,当我安装其他浏览器并进行测试时,出现了问题。我的应用程序成功启动,但 intent.getData() 返回一个自定义 url,其中所有查询参数都丢失了(这是我已经在应用程序清单中定义的自定义 url)。似乎对于大多数浏览器,页面被重定向到应用程序的 Play 商店页面。(这在 Chrome 中没有发生)
https://mobile.meta.com/payment/applink.html是我正在开发的应用程序所有者拥有的域,我无法控制这个网站,因此如果我能完全解决这个问题会更可取android应用程序端,当我在浏览器中输入这个url时,它会重定向到这个应用程序的google play store页面。
所以我的第一个问题是为什么他们的行为不同?为什么浏览器调用的应用程序不像 Chrome 的反应那样直接被调用,而是页面首先被重定向到网站,然后应用程序被调用?
我的第二个问题是如何解决这个问题(不改变网站,即在 android 应用程序清单中完成所有工作)?
接下来,我尝试了自定义方案,所有浏览器都以相同的方式运行,应用程序被调用而没有任何问题。
所以我的第三个问题是,为什么这一次所有浏览器的行为都一样?
我的最后一个问题是为什么单击 url https://mobile.meta.com/payment/applink.html可以使用自定义方案 url 调用应用程序?该站点实际上在幕后做什么,以便它可以实际打开 google play 商店页面并调用应用程序?
PS我知道以下相关问题,但似乎他们告诉这个问题没有解决方案:
从链接打开应用程序的意图过滤器在三星浏览器/Firefox 等中不工作但在 Chrome 中工作