uni-app打包后使用schemeURL进行唤起其他APP + app开发+ 预览下载pdf文件
如果报错:apktool不是内部命令, 添加apktoll.bat文件,文件内容为。进行检测是安卓还是ios,以及连接跳转。
前提:使用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样式失效,选中框选中按钮不显示:
注释两个地方:
更多推荐
所有评论(0)