解决onelink短链被应用市场劫持的问题

解决onelink短链被应用市场拦截的问题

问题

1.Onelink是啥就不说了,你可以去问谷歌
2.需求
问题:国内应用市场自带浏览器会识别onelink短链,跳转到自家应用市场
不跳转手机自带的应用市场,我想跳转到手机上安装的GooglePlay,怎么办?
一般 onelink 地址:https://go.onelink.me/app/…
到了浏览器中会重定向:market://details?id=包名&…

解决方法

1.创建一个webview 控件,调用loadUrl方法
2.创建内部类继承WebViewClient,覆写shouldOverrideUrlLoading

// 针对国内地址被拦截的问题
url?.let {
    if(it.contains("market://")){
        val startIndex = it.indexOf("=")
        val endIndex = it.indexOf("&")
        if(startIndex+1 < endIndex){
        	// 处理一:统一规则,最后到onPageFinished方法中处理
            val packageName = it.substring(startIndex+1,endIndex)
            val newUrl = "https://play.google.com/store/apps/details?id=$packageName"
            view?.loadUrl(newUrl)
            // 处理二:直接处理,直接跳转
            return true
        }
    }
}
return super.shouldOverrideUrlLoading(view, url)

3.覆盖 onPageFinished 方法,创建自己的跳转规则

var isFirstLoad = true
if (view.url.contains("play.google.com") && view.url.contains("?id=") && isFirstLoad) {
	isFirstLoad = false
    // 跳转到应用市场 
}else{
	// 跳转浏览器下载
}

4.跳转到应用市场

fun startMarket(activity: Activity, url: String?) {
    val GOOGLE_PLAY = "com.android.vending"
    try {
        if ("" == url) return
        val packageName = url!!.split("?id=")[1]
        //这里开始执行一个应用市场跳转逻辑,默认this为Context上下文对象
        val uri = Uri.parse("market://details?id=${packageName}")
        val intent = Intent(Intent.ACTION_VIEW, uri)
        //跳转到应用市场,非Google Play市场一般情况也实现了这个接口
        //存在手机里没安装应用市场的情况,跳转会包异常,做一个接收判断
        if (intent.resolveActivity(activity.packageManager) != null) { 			//可以接收
            if (!TextUtils.isEmpty(packageName)) {
                intent.setPackage(GOOGLE_PLAY)
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
                activity.startActivity(intent)
            }
        } else { //没有应用市场,我们通过浏览器跳转到Google Play
            intent.data = Uri.parse(url)
            //这里存在一个极端情况就是有些用户浏览器也没有,再判断一次
            if (intent.resolveActivity(activity!!.packageManager) != null) { //有浏览器
                activity.startActivity(intent)
            } else {
                Toast.makeText(activity,"You don't have an app market installed, not even a browser!",Toast.LENGTH_SHORT).show()
            }
        }
    } catch (e: Exception) {
    	// 跳转失败了
    }
}

5.跳转浏览器下载

private fun toDownLoad(url : String) {
    try {
        val intent = Intent()
        intent.action = "android.intent.action.VIEW"
        intent.data = Uri.parse(url)
        intent.addCategory(Intent.CATEGORY_BROWSABLE)
        startActivity(intent)
    } catch (e: Exception) {
        e.printStackTrace()
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值