当前位置:   article > 正文

uni-app 编译后微信h5打开APP,并且打开相应的页面_uniapp微信浏览器打开app

uniapp微信浏览器打开app

现在有一个需求,App分享出来的页面需要在页面底部加一个浮窗 “APP查看”

就跟某乎一样

并且能打开"APP相应的页面"

先查一下资料

1、iOS的APP是可以通过

"universal link"(通用链接)  这个东西打开的

你的APP只要配过微信分享,微博分享 那你的APP应该就集成好了通用链接的

所以在微信里面iOS是可以打开APP的,稳得很

直接

var url=通用链接地址;

var path=跳转参数

 location.href = url+path;

h5端已经完事

APP只需要对 启动的参数进行处理就可以

plus.runtime.launcher

plus.runtime.arguments

看html5+文档

安卓其实应该是能 URL Schemes 达到这样的跳转,但是wx这个憨批,把URL Schemes过滤掉了,所以安卓并不能通过这种方式跳转,只能另找它法了。

微信h5是提供一种标签可以打开你们的app的 但是你得先去微信开放平台申请账号,再申请应用

微信开放平台

看文档吧

跳转APP:wx-open-launch-app

这里说几个重要的步骤,千万别错了

1、开放平台一定要是公众账号&&移动应用

2、代码中的appid是移动应用中的appid,不是公众账号的appid

3、一定要将其关联在一起

4、代码中 微信sdk 初始化的时候有个参数 "openTagList" 一定要记得带上,因为很多人写的时候都是从微信js sdk过来的 而这里的只有jsApiList....

5、有点瑕疵就是 按照文档上说 是能监听到  “launch” “error” 事件的,但是我怎么监听得不太对劲

6、uni-app打的包需要是正式包,不能是调试包,至于正式包你怎么看启动日志我这边有个方法

可以参考下

在App.vue 的 onShow生命周期里面

  1. onShow: function () {
  2. console.log("App Show", is_one_modal);
  3. // #ifdef H5
  4. basics.h5_wx_share({});
  5. // #endif
  6. //#ifdef APP-PLUS
  7. //由于线上不太好调试 把数据加到本地存储中
  8. //
  9. // 跳转页面(需要在setTimeout中,否则IOS会出现获取的plus.runtime.arguments是上一个赋值给plus.runtime.arguments的值,而不是当前传入的plus.runtime.arguments)
  10. setTimeout(function () {
  11. let temp_launcher = plus.runtime.launcher;
  12. let temp_arguments = plus.runtime.arguments;
  13. plus.runtime.arguments = null;
  14. basics.sys_log("temp_launcher:" + temp_launcher);//加个记日志的方法
  15. //其实就是把个数据存到本地存储里面 然后我们自己在开个后门啥的 通过后面进到一个 调试页面,这个调试页面在将 本地存储里面的日子都打印出来就行了
  16. //这里的temp_launcher 就是 你标签中的 “extinfo” 你想怎么解析 怎么定义都行
  17. //ios 安卓都可以通过这样打开我们的app
  18. try {
  19. if (temp_arguments) {
  20. //basics.sys_log("存在temp_arguments", 1);
  21. //解析 temp_arguments 该干嘛干嘛
  22. } else {
  23. }
  24. } catch (e) {
  25. basics.sys_log("temp_arguments catch " + e, 1);
  26. }
  27. }, 100)
  28. // #endif
  29. }

js代码如下

  1. //#ifdef H5
  2. import wx_sdk from '@/util/wxsdk.js';
  3. var wx_sdk_is_init = !1;
  4. //#endif
  5. //一级基础方法 对象
  6. export default {
  7. //微信内服务号 打开app
  8. h5_wx_open_app(extinfo) {
  9. // #ifdef H5
  10. let append_fun = function (extinfo) {
  11. //return;
  12. var element = document.createElement("div");
  13. element.id = "float_app_open";
  14. element.className = "i-font float-app-open";
  15. var element1 = document.createElement("span");
  16. element1.id = "app_open_close";
  17. element1.innerHTML = "";
  18. element.innerHTML = '<wx-open-launch-app id="launch-btn" extinfo="' + extinfo + '" appid="你的移动应用id" style="position: relative; left: 50%; margin-left: -60px; background-color: #f5222d; display: block; text-align: center; border: 0; text-shadow: 0 2px 8px 0px #f5222d; border-radius: 50px; text-align: center; width: 120px; height: 40px; line-height: 40px; ">'
  19. + '<script type="text/wxtag-template"><style>.btn-open-weapp { display:block; text-align: center; color: #fff; height: 40px; line-height: 40px;}</style><div class="btn-open-weapp">APP查看</button>'
  20. + '<//script></wx-open-launch-app>';
  21. element.appendChild(element1);
  22. document.body.appendChild(element);//添加到body 子节点下
  23. try {
  24. var btn = document.getElementById("launch-btn");
  25. if (btn) {
  26. btn.addEventListener('click', e => {
  27. console.log('检测用户点击打开APP按钮', e);
  28. });
  29. console.log("找到launch-btn当前的按钮了")
  30. btn.addEventListener('launch', e => {
  31. console.log('打开app结果', e);
  32. if (e.errMsg.indexOf("fail") != -1) {
  33. this.jump_url(config.app_yyb_url, 3);//打开失败
  34. }
  35. });
  36. btn.addEventListener('error', e => {
  37. //console.error('fail', e.detail);
  38. this.jump_url(config.app_yyb_url, 3);
  39. // 唤醒失败的情况下,可用于降级处理比如在此处跳转到应用宝
  40. });
  41. }
  42. } catch (e) {
  43. }
  44. try {
  45. var close = document.getElementById("app_open_close");
  46. if (close) {
  47. console.log("找到app_open_close当前的按钮了")
  48. close.addEventListener('click', e => {
  49. document.getElementById("float_app_open").remove();
  50. });
  51. }
  52. } catch (e) {
  53. }
  54. }
  55. return new Promise((success, error) => {
  56. let ua = navigator.userAgent.toLowerCase();
  57. let is_wx = ua.indexOf('micromessenger') != -1;
  58. if (is_wx) {
  59. try {
  60. if (wx_sdk_is_init) {
  61. append_fun(extinfo);
  62. success({ status: 0, message: '成功' });
  63. } else {
  64. api_data.weishare({
  65. url: location.origin + location.pathname + location.search
  66. }).then(res => {
  67. wx_sdk.config({
  68. debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  69. appId: res.data.appId, // 必填,公众号的唯一标识
  70. timestamp: res.data.timestamp, // 必填,生成签名的时间戳
  71. nonceStr: res.data.nonceStr, // 必填,生成签名的随机串
  72. signature: res.data.signature,// 必填,签名
  73. openTagList: ['wx-open-launch-weapp', 'wx-open-launch-app'],//注意这个参数
  74. jsApiList: [
  75. 'updateAppMessageShareData',
  76. 'updateTimelineShareData',
  77. 'onMenuShareTimeline',
  78. 'onMenuShareAppMessage',
  79. "onMenuShareQQ",
  80. 'onMenuShareQZone'
  81. ]
  82. });
  83. }).catch(err => {
  84. success({ status: -1, message: '失败' });
  85. });
  86. wx_sdk.ready(function () { //需在用户可能点击分享按钮前就先调用
  87. wx_sdk_is_init = !0;
  88. append_fun(extinfo);
  89. success({ status: 0, message: '成功' });
  90. });
  91. wx_sdk.error(function () {
  92. success({ status: -1, message: '失败' });
  93. });
  94. }
  95. } catch (e) {
  96. success({ status: -1, message: '失败' });
  97. }
  98. } else {
  99. success({ status: -1, message: '失败' });
  100. //append_fun(extinfo);
  101. }
  102. }).catch((e) => {
  103. console.error("h5_wx_open_app catch ", e);
  104. })
  105. // #endif
  106. },
  107. }

参照的博客

https://ask.dcloud.net.cn/article/37584

https://ask.dcloud.net.cn/question/98097

https://blog.csdn.net/hahahhahahahha123456/article/details/109463412

https://blog.csdn.net/jane900/article/details/107410321

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/281042
推荐阅读
相关标签
  

闽ICP备14008679号