uni-app项目配置UrlSchemes在外部打开APP

已经安装跳转应用的情况

1.对于IOS配置打包

配置路径manifest->app-plus->distribute->ios

注意不要使用大写及中文以及特殊字符等,示例代码如下

"urltypes" : [
                    {
                        "urlidentifier" : "com.runtest.test",
                        "urlschemes" : [ "runtest" ]
                    }
                ]

uni-app项目配置UrlSchemes在外部打开APP_第1张图片

配置好后需要打包后才能生效,在另一个应用或者程序中访问带有唤起链接的页面访问runtest://

如下

uni-app项目配置UrlSchemes在外部打开APP_第2张图片

点击链接后会提示是否打开

uni-app项目配置UrlSchemes在外部打开APP_第3张图片

2.安卓配置打包

  1. 云打包:配置路径manifest->app-plus->distribute->android
    配置与ios类似,示例代码如下
     

    "schemes" : "runtest"

    uni-app项目配置UrlSchemes在外部打开APP_第4张图片
    配置好后云打包,与ios相同

  2. 本地离线打包

  • 打开Android项目的AndroidManifest.xml文件。
  • 将应用入口activity中的android:scheme值改为需要的UrlSchemes即可。



若未知是否安装应用


在唤起应用页面用js代码请求该协议,如果在500ms内,如果有应用程序能解析这个协议,那么就能打开该应用;如果超过500ms就跳转到app下载页。

// 打开链接

openApp() {
                var ua = window.navigator.userAgent.toLowerCase();
                if (ua.match(/MicroMessenger/i) == 'micromessenger') {
                    uni.showModal({
                        showCancel: false,
                        title: "提示",
                        content: "请用外部浏览器打开!"
                    })
                    return
                }
                if (navigator.userAgent.match(/(iPhone|iPod|iPad);?/i)) {
                    window.location = "https://apps.apple.com/us/app/商店链接" // 可以在苹果开发者中心找对应APP的链接
                    // window.location = "runtest://"
                } else if (navigator.userAgent.match(/android/i)) {

                        window.location.href = "runtest://page=index"
                        uni.showLoading({
                            mask: true
                        })

                        uni.hideLoading();
                        uni.showModal({
                            title: "提示",
                            content: "暂未检测到客户端,是否下载?",
                            success: function(res) {
                                if (res.confirm) {
                                    window.location =
                                        "下载链接"
                                } else if (res.cancel) {
                                    // window.close();
                                }
                            }
                        })
                }
            },

因为在打开APP过程中有添加Loading状态去先校验是否有安装此APP,如果存在这个APP打开后,该页面应取消LOADING状态并且禁止弹出未安装提示:

onHide() {
            if (this.downLoadHandle) {
                uni.hideLoading()
                clearTimeout(this.downLoadHandle)
            }
        },

在应用中对于从外部唤起的链接可以根据参数对应跳转指定页面,由于IOS的部分问题,需要包一个定时器才会生效

onShow: function() {
			// #ifdef APP-PLUS
			let urlMap={
               index:"/pages/index/index"
			}
			setTimeout(function() {
				var args = plus.runtime.arguments.split("://page=")[1];
				util.toast(urlMap[args])
				if (args) {
					plus.runtime.arguments = '';
					uni.navigateTo({
						url: urlMap[args] || "/pages/index/index"
					})
				}
			}, 10);
			// #endif
		}

 

可参考dcloud官方文档:

Android:https://ask.dcloud.net.cn/article/409

iOS:https://ask.dcloud.net.cn/article/64

你可能感兴趣的:(uniapp,笔记,日常积累,ios,android)