uni-app,h5内嵌到原生app页面,获取token,跳转并调用原生app的方法

项目场景:uni-app,h5内嵌到原生app页面,获取token,跳转并调用原生app的方法


问题描述

需求是点击h5页面要跳转到原生app指定页面,但是看了网上的很多方法最终还是无法实现跳转和接收app的返回值
以下2个是网上的方法,自己试过之后还是无法实现效果,需要进行改动:
方法1;
H5调用IOS App方法

var query = {
  title:'分享到好友',
  desc:'快来看看吧'
}
window.webkit.messageHandlers.share.postMessage(JSON.stringify(query));

H5调用Android App方法

var query = {
  title:'分享到好友',
  desc:'快来看看吧'
}
window.android['share'](JSON.stringify(query));

方法2:

  function setupWebViewJavascriptBridge(callback) {
      if (window.WebViewJavascriptBridge) { return callback(WebViewJavascriptBridge); }
      if (window.WVJBCallbacks) { return window.WVJBCallbacks.push(callback); }
      window.WVJBCallbacks = [callback]; // 创建一个 WVJBCallbacks 全局属性数组,并将 callback 插入到数组中。
      var WVJBIframe = document.createElement('iframe'); // 创建一个 iframe 元素
      WVJBIframe.style.display = 'none'; // 不显示
      WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__'; // 设置 iframe 的 src 属性
      document.documentElement.appendChild(WVJBIframe); // 把 iframe 添加到当前文导航上。
      setTimeout(function() { document.documentElement.removeChild(WVJBIframe) }, 0)
  }
   // 这里主要是注册 OC 将要调用的 JS 方法。
  setupWebViewJavascriptBridge(function(bridge){
  })

(方法2 我之前是直接写在script标签下试的,发现还是不行)

原因分析:

方法1.我在ios和Android 都打印了window,发现在ios app上没有找到window里面的share方法,在Android app上找不到window.android
方法2.可能是因为我放的位置不对


解决方案:

其实与app数据互通应该除了会用到webview外,还要用到ios和Android 的桥梁bridge(桥梁名)的。
–我是这样写的
第一步:(写在script下)

function setupWebViewJavascriptBridge(callback) {
	 if (window.WebViewJavascriptBridge) { return callback(WebViewJavascriptBridge); }
	 if (window.WVJBCallbacks) { return window.WVJBCallbacks.push(callback); }
	 window.WVJBCallbacks = [callback]; // 创建一个 WVJBCallbacks 全局属性数组,并将 callback 插入到数组中。
	 var WVJBIframe = document.createElement('iframe'); // 创建一个 iframe 元素
	 WVJBIframe.style.display = 'none'; // 不显示
	 WVJBIframe.src = 'wvjbscheme://__BRIDGE_LOADED__'; // 设置 iframe 的 src 属性
	 document.documentElement.appendChild(WVJBIframe); // 把 iframe 添加到当前文导航上。
	 setTimeout(function() { document.documentElement.removeChild(WVJBIframe) }, 0)
 }

–其中callNativeMethod为ios和Android 里面的方法,调用原生app 名为callNativeMethod的方法,获取该方法的返回值,我需要token,所以返回的是token
第二步:(我要token所以将一下代码写在onload里面,根据不同情况放在不同的位置)


let platform = uni.getSystemInfoSync().platform;
	    if(platform === "ios"){
			setupWebViewJavascriptBridge(function(bridge){
			//{'actionType':'token','params':null } 为ios方法需要传入的参数
			//actionType 是类型,我传不同的值给app,他们会根据不用的值跳转到不同的页面,但是当传入‘token’字符串的时候不会跳转,而是return一个token给我,所以这个代码块我是放在onload的什么周期里面的。
				 bridge.callHandler('callNativeMethod',{'actionType':'token','params':null },function responseCallback(dataFromOC) {
					this.token = dataFromOC
				})
			});
	    }else if(platform === "android"){
	   		   let content = bridge.callNativeMethod('token',null)
			   this.token = 'bearer '+content
	    }

以下是点击按钮跳转(放在点击事件里面)

fexBtnType(i,status){
		// 这里主要是注册 OC 将要调用的 JS 方法。
		let par = status+''
		let platform = uni.getSystemInfoSync().platform;
		 if(platform === "ios"){
			 setupWebViewJavascriptBridge(function(bridge){
				 bridge.callHandler('callNativeMethod',{'actionType':par,'params':null })
			 });
		 }else if(platform === "android"){
				   bridge.callNativeMethod(par,null)
		 }
	}

—总结:哪里需要与app进行交互或传参哪里就放这些代码,里面如有需要可以做适当改动

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
uni-app 是一款跨平台应用开发框架,既支持生成 App,也支持生成各个平台的小程序,其中与微信小程序的授权方法有一些不同。 首先,对于 App 来说,可以使用 uni-app 提供的登录模块,该模块支持微信、支付宝等第三方平台的授权登录。对于微信授权登录,可以通过以下步骤实现: 1. 在 uni-app 的项目中安装并引入 uni-login 模块:`npm install @dcloudio/uni-login` 2. 在需要授权的页面中,添加登录按钮或其它触发授权的元素。 3. 在点击登录按钮的事件处理函数中,调用 uni.login 方法进行微信登录授权。 4. 在 uni.login 的回中,可以通过返回的 code 或 token 等信息进行登录验证、获取用户信息等操作。 而对于生成微信小程序,uni-app 也提供了相关的授权方式。在 uni-app 中,可以使用 openid 和 unionid 来进行用户标识和登录验证。具体的授权方法如下: 1. 在微信小程序的 app.json 文件中,将 `"appid"` 字段设置为你的小程序的 AppID。 2. 在 uni-app 的项目中引入并使用 uni.login 方法,通过该方法登录获取 code。 3. 将获取到的 code 发送至后台,后台通过 code 调用微信的 API 获取 openid 和 session_key。 4. 后台获取到 openid 和 session_key 后,可以将其存储在数据库中,用于用户标识和登录验证。 总之,无论是在 uni-app 生成 App 还是小程序,都可以通过 uni-login 模块实现微信授权登录。对于 App,可以直接使用登录模块进行授权;对于小程序,可以通过 openid 和 session_key 实现用户标识和登录验证。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值