uniapp
1.自定义基座离线打包
2.真机调试
[真机调试](https://uniapp.dcloud.net.cn/tutorial/run/run-app.html
3.Hbuilder 运行到 Ios APP 需要 ipa 签名
https://www.yii666.com/blog/525606.html
vite.config.js
4.import { defineConfig } from "vite";
import uni from "@dcloudio/vite-plugin-uni";
const fs = require("fs");
const path = require("path");
const manifestPath = path.resolve(__dirname, "manifest.json");
let Manifest = fs.readFileSync(manifestPath, {
encoding: "utf-8",
});
function replaceManifest(path, value) {
const arr = path.split(".");
const len = arr.length;
const lastItem = arr[len - 1];
let i = 0;
let ManifestArr = Manifest.split(/\n/);
for (let index = 0; index < ManifestArr.length; index++) {
const item = ManifestArr[index];
if (new RegExp(`"${arr[i]}"`).test(item)) ++i;
if (i === len) {
const hasComma = /,/.test(item);
ManifestArr[index] = item.replace(
new RegExp(`"${lastItem}"[\\s\\S]*:[\\s\\S]*`),
`"${lastItem}": ${value}${hasComma ? "," : ""}`
);
break;
}
}
Manifest = ManifestArr.join("\n");
}
const versionCode = Math.ceil(Date.now() / 10000);
// versionCode更新
replaceManifest("versionCode", versionCode);
fs.writeFileSync(manifestPath, Manifest, {
flag: "w",
});
export default defineConfig({
plugins: [uni()],
});
5.下载文件
5.1 安卓下载文件
export default {
methods: {
downloadFile() {
// 替换为你要下载的文件的URL
const fileUrl = "https://example.com/file.pdf";
// 使用uni.downloadFile API下载文件
uni.downloadFile({
url: fileUrl,
success: (downloadResult) => {
if (downloadResult.statusCode === 200) {
// 下载成功,获取临时文件路径
const tempFilePath = downloadResult.tempFilePath;
// 获取安卓系统下载目录路径
const downloadDir = plus.android.invoke(
plus.android.runtimeMainActivity(),
"getExternalFilesDir",
"Download"
);
// 构建目标文件路径
const destinationFilePath = downloadDir + "/filename.pdf";
// 将文件复制到安卓系统下载目录
plus.io.resolveLocalFileSystemURL(
tempFilePath,
(entry) => {
entry.copyTo(
downloadDir,
"filename.pdf",
() => {
// 下载并保存成功
uni.showToast({
title: "下载完成",
icon: "success",
duration: 2000,
});
console.log("文件保存路径:", destinationFilePath);
},
(copyError) => {
console.error("复制文件失败", copyError);
}
);
},
(resolveError) => {
console.error("解析文件路径失败", resolveError);
}
);
} else {
console.error(
"下载文件失败,statusCode:",
downloadResult.statusCode
);
}
},
fail: (downloadError) => {
console.error("下载文件失败", downloadError);
},
});
},
},
};
5.2 ios 下载文件
export default {
methods: {
downloadFile() {
// 替换为你要下载的文件的URL
const fileUrl = "https://example.com/file.pdf";
// 使用uni.downloadFile API下载文件
uni.downloadFile({
url: fileUrl,
success: (downloadResult) => {
if (downloadResult.statusCode === 200) {
// 下载成功,获取临时文件路径
const tempFilePath = downloadResult.tempFilePath;
// 获取iOS系统下载目录路径
const documentsDirectory = plus.ios.invoke(
plus.ios.currentApplication(),
"documentsDirectory"
);
// 构建目标文件路径
const destinationFilePath = documentsDirectory + "/filename.pdf";
// 将文件复制到iOS系统下载目录
plus.io.resolveLocalFileSystemURL(
tempFilePath,
(entry) => {
entry.copyTo(
documentsDirectory,
"filename.pdf",
() => {
// 下载并保存成功
uni.showToast({
title: "下载完成",
icon: "success",
duration: 2000,
});
console.log("文件保存路径:", destinationFilePath);
},
(copyError) => {
console.error("复制文件失败", copyError);
}
);
},
(resolveError) => {
console.error("解析文件路径失败", resolveError);
}
);
} else {
console.error(
"下载文件失败,statusCode:",
downloadResult.statusCode
);
}
},
fail: (downloadError) => {
console.error("下载文件失败", downloadError);
},
});
},
},
};
6.请求权限
let isIos;
let isAndroid;
// #ifdef APP-PLUS
isIos = plus.os.name === "iOS";
isAndroid = plus.os.name === "Android";
// #endif
const AndroidPermissionMap = {
CAMERA: "android.permission.CAMERA",
};
/*******************************************************************************************************
*
*/
export async function requestCameraPermissions() {
if (isAndroid) {
const res = await requestAndroidPermissions("CAMERA");
if (res >= 0) {
return true;
}
uni.showModal({
title: "提示",
content: "请打开手机相机功能(点击确定后在权限中授权相机功能)",
success(res) {
if (res.confirm) {
goAndroidAppPermissionSetting();
}
},
});
return false;
}
if (isIos) {
const auth = judgeIosPermissionCamera();
if (!auth) {
uni.showModal({
title: "提示",
content: "请打开手机相机功能(点击确定后在权限中授权相机功能)",
success(res) {
if (res.confirm) {
goIOSAppPermissionSetting();
}
},
});
}
return auth;
}
}
export async function goPermissionSetting() {
if (isAndroid) {
goAndroidAppPermissionSetting();
return;
}
if (isIos) {
goIOSAppPermissionSetting();
return;
}
}
/*******************************************************************************************************
* android
*/
export function requestAndroidPermissions(type) {
if (!isAndroid || !type || !AndroidPermissionMap[type]) {
return;
}
const permissionID = AndroidPermissionMap[type];
return new Promise((resolve, reject) => {
plus.android.requestPermissions(
[permissionID], // 理论上支持多个权限同时查询,但实际上本函数封装只处理了一个权限的情况。有需要的可自行扩展封装
function (resultObj) {
console.log(resultObj);
const result = 0;
const { granted, deniedPresent, deniedAlways } = resultObj;
if (granted.indexOf(permissionID) !== -1) {
resolve(1);
}
if (
deniedPresent.indexOf(permissionID) !== -1 ||
deniedAlways.indexOf(permissionID) !== -1
) {
resolve(-1);
}
resolve(0);
}
);
});
}
export function goAndroidAppPermissionSetting() {
const Intent = plus.android.importClass("android.content.Intent");
const Settings = plus.android.importClass("android.provider.Settings");
const Uri = plus.android.importClass("android.net.Uri");
const mainActivity = plus.android.runtimeMainActivity();
const intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
const uri = Uri.fromParts("package", mainActivity.getPackageName(), null);
intent.setData(uri);
mainActivity.startActivity(intent);
}
/*******************************************************************************************************
* ios
*/
// 判断相机权限是否开启
function judgeIosPermissionCamera() {
let result = false;
let AVCaptureDevice = plus.ios.import("AVCaptureDevice");
let authStatus = AVCaptureDevice.authorizationStatusForMediaType("vide");
console.log("authStatus:" + authStatus);
if (authStatus == 3) {
result = true;
console.log("相机权限已经开启");
} else {
console.log("相机权限没有开启");
}
plus.ios.deleteObject(AVCaptureDevice);
return result;
}
export function goIOSAppPermissionSetting() {
const UIApplication = plus.ios.import("UIApplication");
const application2 = UIApplication.sharedApplication();
const NSURL2 = plus.ios.import("NSURL");
// var setting2 = NSURL2.URLWithString("prefs:root=LOCATION_SERVICES");
const setting2 = NSURL2.URLWithString("app-settings:");
application2.openURL(setting2);
plus.ios.deleteObject(setting2);
plus.ios.deleteObject(NSURL2);
plus.ios.deleteObject(application2);
}