Vue(h5)与App(android,ios)端交互详解

科技颠覆者  金牌会员 | 2024-6-10 02:36:50 | 来自手机 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 818|帖子 818|积分 2454

前言:

迩来开发vue与app交互,总结了一下开发心得。我是一名Android开发者,vue开发这块也稍有涉足,在android或者IOS中展示h5可以减少工作量,也能满足用户体验性。下面主要以Android和Vue方法介绍为主。
上菜了

 

 
一、h5与App交互的两种情势

1.h5调用app的原生方法。

2.app嗲用h5方法

二、Android基本设置

  1. WebSettings webSettings=webView.getSettings();
  2.         //设置为可调用js方法
  3.         webSettings.setJavaScriptEnabled(true);
  4.         webView.setWebViewClient(new WebViewClient());
  5.         webView.setWebChromeClient(new WebChromeClient());
  6.         //js调用android
  7.         webView.addJavascriptInterface(new JsCommunication(), "handleMessage");
  8.         //你自己的h5地址
  9.         webView.loadUrl("http://192.168.23.6:8080/#/webview");
复制代码
三、 vue代码
  1. <template>
  2.   <div class="box">
  3.     <button @click="jsAndroid">JS调用Android方法</button>
  4.     <button @click="jsIos">JS调用IOS方法</button>
  5.     <button @click="jsAI">JS调用Android||IOS方法</button>
  6.     <div>
  7.       <span>Android||IOS调用h5方法,控制内用显示</span>
  8.       <div v-if="isShow">
  9.        <img src="https://imgsa.baidu.com/forum/w%3D580/sign=1b2a89cb16950a7b75354ecc3ad0625c/2635349b033b5bb59ec8f2033dd3d539b600bc35.jpg" alt="">
  10.     </div>
  11.     </div>
  12.     <div>
  13.       <span>Android||IOS调用h5方法,并传值</span>
  14.       <img :src="imgUrl" alt="">
  15.     </div>
  16.   </div>
  17. </template>
  18. <script>
  19. import { toRefs, reactive, onMounted } from "vue";
  20. export default {
  21.   // vue3.0 钩子函数写法
  22.   setup() {
  23.     const obj = reactive({
  24.       isShow: false,
  25.       content: "接受内容",
  26.       imgUrl:'https://pic4.zhimg.com/v2-112e0474e000e98e8fbd22ced185c923_b.gif',
  27.     //   这里Android和ios判断固定了,判断方法这里就不写了,网上很多资料
  28.       isIOS:false,
  29.       isAndroid:true
  30.     })
  31.     onMounted(()=>{
  32.         window.sendImageURL=sendImageURL
  33.         window.show=()=>{
  34.             obj.isShow=!obj.isShow
  35.         }
  36.     })
  37.     const jsAndroid=()=>{
  38.         window.handleMessage.toast('你好,调用成功?')  
  39.     }
  40.     const jsIos=()=>{
  41.         window.webkit.messageHandlers.handleMessage.toast('你好,调用成功?');
  42.     }
  43.     const jsAI=()=>{
  44.         //app端会拿到对应的方法,然后app端做处理
  45.         if (obj.isIOS) {
  46.                 window.webkit.messageHandlers.handleMessage.toast('1212121');
  47.             } else if (obj.isAndroid) {
  48.                 window.handleMessage.toast('你好,调用成功?')
  49.             }
  50.     }
  51.     const sendImageURL=(imgUrl)=>{
  52.         obj.imgUrl=imgUrl
  53.     }
  54.     return {
  55.       ...toRefs(obj),
  56.       jsAndroid,
  57.       jsIos,
  58.       jsAI,
  59.       sendImageURL
  60.     };
  61.   },
  62. };
  63. </script>
  64. <style lang="scss" scoped>
  65. * {
  66.   margin: 0px;
  67.   padding: 0px;
  68. }
  69. .box {
  70.   display: flex;
  71.   flex-direction: column;
  72.   button {
  73.     margin: 10px;
  74.     padding: 18px;
  75.     background: gold;
  76.     color: #fff;
  77.     font-weight: 700;
  78.     border: none;
  79.   }
  80.   img {
  81.     width: 188px;
  82.     height: 127px;
  83.   }
  84. }
  85. </style>
复制代码
四、App调用h5方法

注意,Vue中的方法通常是写在vue实例的methods中的,app无法直接调用,此时在页面的onMounted钩子里将方法挂在window下即可。
Vue代码
  1. onMounted(()=>{
  2.         //挂载方法到window上面
  3.         window.sendImageURL=sendImageURL
  4.         //可以直接定义成匿名函数
  5.         window.show=()=>{
  6.             obj.isShow=!obj.isShow
  7.         }
  8.     })
  9. const sendImageURL=(imgUrl)=>{
  10.         obj.imgUrl=imgUrl
  11.     }
复制代码
Android可以通过:  webView.loadUrl("javascript:sendImageURL('" + img + "')");
sendImageURL:方法名
img:需要传递的参数
  1. btn.setOnClickListener(v->{
  2.            //android调用js,无参数无返回值
  3.             webView.loadUrl("javascript:show()");
  4.         });
  5.         btn2.setOnClickListener(v->{
  6.             //android调用js,无参数无返回值
  7.             webView.loadUrl("javascript:sendImageURL('" + img + "')");
  8.         });
复制代码
IOS类似Android
  1. NSString *img = @"图片地址";
  2. NSString *jsStr = [NSString stringWithFormat:@"sendImageURL('%@')",img];
  3. [self->_wkWebView evaluateJavaScript:jsStr completionHandler:^(id _Nullable d, NSError * _Nullable error) {
  4.   NSLog(@"状态---%@",d);//回调值
  5. }];
复制代码
五、h5调用app方法

 vue方法,注意一定要挂载到window上,否则回报未定义,点掉叉号后虽然调用的时间能成功。

 
handleMessage:app上面定义的接口名称
toast:app上定义的方法名称
  1. const jsAndroid=()=>{
  2.         window.handleMessage.toast('你好,调用成功?')  
  3.     }
  4.     const jsIos=()=>{
  5.         window.webkit.messageHandlers.toast.postMessage('你好,调用成功?');
  6.     }
  7.     const jsAI=()=>{
  8.         //app端会拿到对应的方法,然后app端做处理
  9.         if (obj.isIOS) {
  10.                 window.webkit.messageHandlers.toast.postMessage('1212121');
  11.             } else if (obj.isAndroid) {
  12.                 window.handleMessage.toast('你好,调用成功?')
  13.             }
  14.     }
复制代码
Android代码
  1. //js调用android
  2. webView.addJavascriptInterface(new JsCommunication(), "handleMessage");
  3. public  class JsCommunication {
  4.         @JavascriptInterface
  5.         public void toast(String json) {
  6.             Toast.makeText(MainActivity.this,json,Toast.LENGTH_LONG).show();
  7.         }
  8.     }
复制代码
以上就是遇到的题目和总结,希望对你有资助。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

科技颠覆者

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表