第三方链接跳转原生APP( H5前端 对接 原生前端 )

608 阅读2分钟

前言

需求:微信群点击第三方链接跳转原生APP

一、url schemes是什么?

url schemes:页面跳转协议

组成: [scheme:][authority][path][?query][#fragment]

scheme : 协议名称 - 必须

host : 协议地址 - 必须

port : 协议的端口,可以不填

path : 协议路径,可用 / 连接多个

query : 携带的参数可用 & 连接多个

fragment : 锚点

通过定义自己的scheme协议,可以非常方便跳转app中的各个页面;

通过scheme协议,服务器可以定制化告诉App跳转到APP内部页面。

栗子1:http://baidu:8080/news?system=pc&id=45464

栗子2:alipays://platformapi/startapp?appId=20000067

二、Universal Link是什么?

Universal Link 是 Apple 在 WWDC 2015 上为 iOS 9 引入的一个新功能,是通过传统HTTP链接来启动App的新技术。可以使用相同的网址打开网站和App。 通过唯一的网址,就可以链接到App中具体的视图,不需要特殊的Scheme。如果用户没有安装App则链接到对应的普通网页。

栗子: company.jiajuxy.com/?’+window.l…

三、解决方案

1.callapp-lib(第三方依赖)

开箱即用的callapp-lib
使用文档参考
callapp-lib使用

Install

Install with npm:

callapp-lib 同样支持 script 加载,你可以使用下面的 cdn 文件(地址在下面的示例中),也可以下载 dist/index.umd.js 到你的项目中,index.umd.js 会暴露一个全局变量 CallApp ,这个全局变量和上面 commonjs 导入的 CallApp 内容是一致的,使用方法也是一致的。

npm install --save callapp-lib

const CallApp = require('callapp-lib');
or;
import CallApp from 'callapp-lib';

2.第三方集成MobLink

此项方式需要原生端配合生成集成
moblink使用教程入口

3.朴素的按钮(手动写)

<template>
  <div>
    <!--自动加载隐藏页面跳转-->
    <iframe src="协议地址" style="display:none"></iframe>
    <van-button type="primary" :disabled="isDisabled" block @touchstart.native.prevent="evokeByLocation()">打开APP</van-button>
    <van-button type="primary"  block @touchstart.native.prevent="clickCallappFn()">下载APP</van-button>

  </div>
</template>

<script>
export default {
  props:{
    packageDataUrl:String,
  },
  data () {
    return {
      uri:window.location.hash,  //参数
      isDisabled:false,
    }
  },
  methods:{
    evokeByLocation(){
      window.location.href = '协议地址?'+this.uri;
      // 无响应或者没安装跳转下载
        var t = Date.now(),
        r = this.packageDataUrl;
        var timer =null;
        timer = setTimeout(function() {
          this.isDisabled=true;
        return Date.now() - t > 2200
          ? (clearTimeout(this.timer), !1)
          : !document.webkitHidden &&
              !document.hidden &&
              void (location.href = r);

      }, 2000);

    }, 
    clickCallappFn(){
     window.location = this.packageDataUrl; //下载地址  
   }, 
  },
}
</script>