前提:使用uniapp进行开发的APP:HTML5+ API Reference

一、APP环境

需要使用runtime模块进行检测是安卓还是ios,以及连接跳转

goGS_app() {
// plus.runtime.openURL('its://')  此方法(浏览器)不管安卓还是ios都可以直接唤起APP, 'its://' 表示要唤起APP所支持的schemeURL协议
// plus.runtime.launchApplication( appInf, errorCB );  appInf:需要唤起的三方, errorCB:启动第三方程序操作失败的回调函数
				    // 判断平台  
				if (plus.os.name == 'Android') {  
					if(plus.runtime.isApplicationExist({pname: 'cn.gov.tax.its'})){
						plus.runtime.launchApplication(
							{  
								pname: 'cn.gov.tax.its'      //安卓也可以直接跟着包名唤起
							},  
							function(e) {  
								console.log('Open system default failed: ' + e.message);  
							}  
						); 
					}else{
						uni.showToast({
							title: '还未下载该APP,请先前往应用商店进行下载',
							icon: 'none'
						});
					} 
				} else if (plus.os.name == 'iOS') {  
					if(plus.runtime.isApplicationExist({action: 'its://')}){
						plus.runtime.launchApplication(
							{ 
								action: 'its://' ,
							},            //ios都是根据schemeURL 唤起
							function(e) {  
								console.log('Open system default failed: ' + e.message);  
							}
						);
					}else{
						uni.showToast({
							title: '还未下载该APP,请先前往应用商店进行下载',
							icon: 'none'
						});
					}
					  
				}  
}

二、使用浏览器三方(h5等等)

// window.location.href = 'its://' ;
				// if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
				//   if (window.webkit && window.webkit.messageHandlers && window.webkit.messageHandlers.AppInstalled) {
				//     // iOS 平台下检查是否安装了指定的 APP
				//     window.webkit.messageHandlers.AppInstalled.postMessage({appName: ' '})
				//   } else {
				//     // 未安装指定的 APP,做相应处理
				// 		console.log("苹果--未安装")
				// 		window.location.href = 'https://apps.apple.com/cn/app/%E4%B8%AA%E4%BA%BA%E6%89%80%E5%BE%97%E7%A8%8E/id1436002627'
				//   }
				// } else if (/(Android)/i.test(navigator.userAgent)) {
				//   if (window.android && window.android.isAppInstalled) {
				//     // Android 平台下检查是否安装了指定的 APP
				//     window.android.isAppInstalled('appName', function(installed) {
				//       if (installed) {
				//         // 已安装指定的 APP,做相应处理
				// 		console.log("安卓--安装了")
				//       } else {
				//         // 未安装指定的 APP,做相应处理
				// 		console.log("安卓--未安装")
				//       }
				//     })
				//   } else {
				//     // 未安装指定的 APP,做相应处理
				//   }
				// } else {
				//   // 非移动设备,做相应处理
				// }

!!!!如何获取APP的scheme

https://segmentfault.com/a/1190000040065334?utm_source=sf-similar-article

反编译:apktool:如何使用apktool反编译APK_-CSDN博客

如果报错:apktool不是内部命令, 添加apktoll.bat文件,文件内容为

@echo off
if "%PATH_BASE%" == "" set PATH_BASE=%PATH%
set PATH=%CD%;%PATH_BASE%;
java -jar -Duser.language=en "%~dp0\apktool.jar" %1%2%3%4%5%6%7%8%9

三、下载外部链接

使用h5+app的api,plus, 注意!!!这个在h5页面会发生plus is no defied 这是因为plus在浏览器中没有这个api方法,所以不能用,只能在app真机调试才能使用。

3.1  直接在内部下载

直接内部下载,寻找下载存储位置市,比较深:一般都是在 andriod > data > andriod > data > io.dcluod.HBuilder > downloads 

var localurl = "_downloads/"      
var dtask = plus.downloader.createDownload("http://www.africau.edu/images/default/sample.pdf", {filename:localurl }, function(d, status){
	// 下载完成     d为下载的文件对象
	if(status == 200){ 
		uni.showToast({
			title: '下载成功'
	    });
//下载成功,d.filename是文件在保存在本地的相对路径,使用下面的API可转为平台绝对路径
	 var fileSaveUrl = plus.io.convertLocalFileSystemURL(d.filename);
	 plus.runtime.openFile(d.filename);	   //选择软件打开文件
	    console.log('文件路径', d.filename)
	} else {
	      //清除下载任务
		   plus.downloader.clear();
	}  
});
//dtask.addEventListener("statechanged", onStateChanged, false);
	dtask.start();

3.2  打开浏览器进行下载

跳转到浏览器下载,可以在文件管理器直接看到下载的内容

plus.runtime.openURL( url, errorCB, identity );

四、查看pdf文件 -- 不利用三方插件pdf.js

注意!!!!! 预览: 安卓手机不支持直接使用<image/>或是<web-view/>进行直接加载网络上的pdf文件, 但是ios直接直接进行预览打开。

支持<image/>或者<web-view/>方法则可以跳转至另一页面携带参数进行展示,不支持则利用微信自带的api进行下载打开文档进行查看

if(plus.os.name == 'Android'){
    wx.downloadFile({
	    url: pdf_url,
		success: function(res) {				
            const filePath = res.tempFilePath;
			wx.openDocument({
				filePath: filePath,
				success: function(res) {
				    console.log("打开文档成功")	
				}
			});
		}
	});
}else if(plus.os.name == 'iOS'){
	uni.navigateTo({
		url: '/page_bill/preview_pdf?pdf_url=' + pdf_url
	})
}

下载:安卓手机直接跳转至浏览器会自动询问是否下载,并且在文件管理器中可以找到下载文件,但是在ios中打开浏览器并不会自动下载,依然得手动选择存储在文件中,因为ios不具备文件存储,一般是需要依赖三方进行查看,所以可以利用微信自带的api或者是h5+app的creactDownloader方法进行下载:

if(plus.os.name == 'Android'){
	plus.runtime.openURL(pdf_url)
}else if(plus.os.name == 'iOS'){
	wx.downloadFile({
		url: pdf_url,
		success: function(res) {
			const filePath = res.tempFilePath;
				wx.openDocument({
					filePath: filePath,
					success: function(res) {
					    console.log("成功打开文档")		
					}
				});
		}
	});
}

五、app登录页面的设计

       5.1 要判断第一个页面是否展示登录,可以根据登录后会存在本地的token等值进行判断,如果将登录页面写成二级的vue页面, 真机上会存在一个物理返回的问题,我们要在在登录页面设置成只要在登录页面就不能退出这个页面,只能通过登录的方式进行退出,所以我们需要设置成不能退出,使用以下方法:

禁用物理返回:

 

题外:uniapp checkbox样式失效,选中框选中按钮不显示:
注释两个地方:

 

 

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐