华为禁止跳转其他app_外部跳转APP_Android一条路走到黑 - SegmentFault 思否

需求

广告推广、华为微服务;通过外部网页或者卡片跳转到我们的app指定界面。如果app已经存在打开app,app不存在跳转下载界面。

APP配置

android:name=".LauncherActivity"

android:launchMode="singleTask"

android:screenOrientation="portrait">

android:host="host"

android:scheme="scheme" />

scheme 、host 是必填项

android:path="/path"

android:port="8080"

根据需求进行添加

获取URL scheme中的值

Uri uri = getIntent().getData();

if (uri != null) {

// 完整的url信息

String url = uri.toString();

Log.i(TAG, "url:" + uri);

// scheme部分

String scheme = uri.getScheme();

Log.i(TAG, "scheme:" + scheme);

// host部分

String host = uri.getHost();

Log.i(TAG, "host:" + host);

// port部分

int port = uri.getPort();

Log.i(TAG, "port:" + port);

// 访问路劲

String path = uri.getPath();

Log.i(TAG, "path:" + path);

List pathSegments = uri.getPathSegments();

// Query部分

String query = uri.getQuery();

Log.i(TAG, "query:" + query);

//获取指定参数值

String success = uri.getQueryParameter("success");

Log.i(TAG, "success:" + success);

}

}

通过web打开,核心参数scheme 和 host

1、创建一个html,把这个粘贴扔进去。如果安装了app就可以打开

打开app

2、这个可以配置下载链接,如果APP未安装会跳转下载链接地址

(根据需要自己修改,网上找的例子)

Start or Download

(function(){

var ua = navigator.userAgent.toLowerCase();

var t;

var config = {

/*scheme:必须*/

scheme_IOS: 'scheme://host',

scheme_Adr: 'scheme://host',

download_url: 'http://a.app.qq.com/o/simple.jsp?pkgname=com.test',

timeout: 600

};

function openclient() {

var startTime = Date.now();

var ifr = document.createElement('iframe');

ifr.src = ua.indexOf('os') > 0 ? config.scheme_IOS : config.scheme_Adr;

ifr.style.display = 'none';

document.body.appendChild(ifr);

var t = setTimeout(function() {

var endTime = Date.now();

if (!startTime || endTime - startTime < config.timeout + 200) {

window.location = config.download_url;

} else {

}

}, config.timeout);

window.onblur = function() {

clearTimeout(t);

}

}

window.addEventListener("DOMContentLoaded", function(){

document.getElementById("call-app").addEventListener('click',

openclient, false);

}, false);

})()

通过另外一个app打开

Intent intent = new Intent(Intent.ACTION_VIEW,Uri.parse("scheme://host"));

startActivity(intent);

可以try catch一下,出现Exception说明手机没有安装想打开的APP,进行其他处理或者提示。

华为微服务

用到的是deeplink链接,使用原理也是scheme

遇坑

scheme | host 大小写问题(亲测实坑)

scheme host 在浏览器里是不分大小写的,会统一转为小写。

所以不要再scheme、host里面写大写!!!

所以不要再scheme、host里面写大写!!!

所以不要再scheme、host里面写大写!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值