uniapp

1.自定义基座离线打包

自定义基座离线打包open in new window

2.真机调试

[真机调试](https://uniapp.dcloud.net.cn/tutorial/run/run-app.html

3.Hbuilder 运行到 Ios APP 需要 ipa 签名

https://www.yii666.com/blog/525606.html

4.vite.config.js

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);
}
Contributors: masecho