Explorar o código

ionic build 说明文件

warrior hai 3 semanas
pai
achega
db9d37f477

+ 9 - 9
android/app/build.gradle

@@ -17,17 +17,17 @@ android {
         }
     }
     signingConfigs {
-          //签名信息
-          release {
-              keyAlias System.getenv('KEY_ALIAS') ?: 'heychat'
-              keyPassword System.getenv('KEY_PASSWORD') ?: '12345678'
-              storeFile file(System.getenv('KEYSTORE_PATH') ?: '../heychat.keystore')
-              storePassword System.getenv('STORE_PASSWORD') ?: '12345678'
-          }
-      }
+        //签名信息
+        release {
+            keyAlias System.getenv('KEY_ALIAS') ?: 'heychat'
+            keyPassword System.getenv('KEY_PASSWORD') ?: '12345678'
+            storeFile file(System.getenv('KEYSTORE_PATH') ?: '../heychat.keystore')
+            storePassword System.getenv('STORE_PASSWORD') ?: '12345678'
+        }
+    }
     android.applicationVariants.all(variant ->{
         variant.outputs.all{
-            outputFileName = "heychat.apk"
+        outputFileName = "heychat.apk"
         }
     })
     buildTypes {

+ 2 - 0
android/app/capacitor.build.gradle

@@ -10,6 +10,8 @@ android {
 apply from: "../capacitor-cordova-android-plugins/cordova.variables.gradle"
 dependencies {
     implementation project(':capacitor-app')
+    implementation project(':capacitor-camera')
+    implementation project(':capacitor-filesystem')
     implementation project(':capacitor-haptics')
     implementation project(':capacitor-keyboard')
     implementation project(':capacitor-status-bar')

+ 3 - 3
android/app/src/main/AndroidManifest.xml

@@ -6,8 +6,9 @@
         android:icon="@mipmap/ic_launcher"
         android:label="@string/app_name"
         android:roundIcon="@mipmap/ic_launcher_round"
-        android:networkSecurityConfig="@xml/network_security_config"
         android:supportsRtl="true"
+        android:networkSecurityConfig="@xml/network_security_config"
+        android:hardwareAccelerated="true"
         android:theme="@style/AppTheme">
 
         <activity
@@ -39,8 +40,7 @@
     <!-- Permissions -->
 
     <uses-permission android:name="android.permission.INTERNET" />
-    
-     <!--可选权限-->
+    <!--可选权限-->
     <uses-permission android:name="android.permission.CAMERA"/>
     <uses-permission android:name="android.permission.RECORD_AUDIO"/>
     <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

+ 6 - 0
android/capacitor.settings.gradle

@@ -5,6 +5,12 @@ project(':capacitor-android').projectDir = new File('../node_modules/@capacitor/
 include ':capacitor-app'
 project(':capacitor-app').projectDir = new File('../node_modules/@capacitor/app/android')
 
+include ':capacitor-camera'
+project(':capacitor-camera').projectDir = new File('../node_modules/@capacitor/camera/android')
+
+include ':capacitor-filesystem'
+project(':capacitor-filesystem').projectDir = new File('../node_modules/@capacitor/filesystem/android')
+
 include ':capacitor-haptics'
 project(':capacitor-haptics').projectDir = new File('../node_modules/@capacitor/haptics/android')
 

+ 3 - 1
build.android.md

@@ -51,7 +51,9 @@
     将resources\android\xml\network_security_config.xml复制到android\app\src\main\res\xml\根目录
   - android\app\src\main\AndroidManifest.xml文件新增
   ``` bash
-    application 新增 android:networkSecurityConfig="@xml/network_security_config"
+    application 新增 
+    android:networkSecurityConfig="@xml/network_security_config"
+    android:hardwareAccelerated="true"
     <!--可选权限-->
     <uses-permission android:name="android.permission.CAMERA"/>
     <uses-permission android:name="android.permission.RECORD_AUDIO"/>

+ 5 - 3
ios/App/Podfile

@@ -1,4 +1,4 @@
-require_relative '../../node_modules/.store/@capacitor+ios@7.0.1/node_modules/@capacitor/ios/scripts/pods_helpers'
+require_relative '../../node_modules/@capacitor/ios/scripts/pods_helpers'
 
 platform :ios, '13.0'
 use_frameworks!
@@ -9,9 +9,11 @@ use_frameworks!
 install! 'cocoapods', :disable_input_output_paths => true
 
 def capacitor_pods
-  pod 'Capacitor', :path => '../../node_modules/.store/@capacitor+ios@7.0.1/node_modules/@capacitor/ios'
-  pod 'CapacitorCordova', :path => '../../node_modules/.store/@capacitor+ios@7.0.1/node_modules/@capacitor/ios'
+  pod 'Capacitor', :path => '../../node_modules/@capacitor/ios'
+  pod 'CapacitorCordova', :path => '../../node_modules/@capacitor/ios'
   pod 'CapacitorApp', :path => '../../node_modules/@capacitor/app'
+  pod 'CapacitorCamera', :path => '../../node_modules/@capacitor/camera'
+  pod 'CapacitorFilesystem', :path => '../../node_modules/@capacitor/filesystem'
   pod 'CapacitorHaptics', :path => '../../node_modules/@capacitor/haptics'
   pod 'CapacitorKeyboard', :path => '../../node_modules/@capacitor/keyboard'
   pod 'CapacitorStatusBar', :path => '../../node_modules/@capacitor/status-bar'

+ 33 - 0
package-lock.json

@@ -18,8 +18,11 @@
         "@angular/router": "^18.0.0",
         "@capacitor/android": "6.2.0",
         "@capacitor/app": "^6.0.2",
+        "@capacitor/camera": "^6.0.0",
         "@capacitor/core": "6.2.0",
+        "@capacitor/filesystem": "^6.0.0",
         "@capacitor/haptics": "^6.0.2",
+        "@capacitor/ios": "^7.0.1",
         "@capacitor/keyboard": "^6.0.3",
         "@capacitor/status-bar": "^6.0.2",
         "@ionic/angular": "^8.4.0",
@@ -34,6 +37,7 @@
         "svgaplayerweb": "^2.3.2",
         "swiper": "^11.1.14",
         "tslib": "^2.3.0",
+        "video-animation-player": "^1.0.5",
         "zone.js": "~0.14.3"
       },
       "devDependencies": {
@@ -2296,6 +2300,14 @@
         "@capacitor/core": "^6.0.0"
       }
     },
+    "node_modules/@capacitor/camera": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/@capacitor/camera/-/camera-6.0.0.tgz",
+      "integrity": "sha512-AZ/gfVPC3lsKbk9/yHI60ygNyOkN5jsCb4bHxXFbW0bss3XYtR/J1XWFJGkFNiRErNnTz6jnDrhsGCr7+JPfiA==",
+      "peerDependencies": {
+        "@capacitor/core": "^6.0.0"
+      }
+    },
     "node_modules/@capacitor/cli": {
       "version": "6.2.0",
       "resolved": "https://registry.npmmirror.com/@capacitor/cli/-/cli-6.2.0.tgz",
@@ -2467,6 +2479,14 @@
         "tslib": "^2.1.0"
       }
     },
+    "node_modules/@capacitor/filesystem": {
+      "version": "6.0.0",
+      "resolved": "https://registry.npmmirror.com/@capacitor/filesystem/-/filesystem-6.0.0.tgz",
+      "integrity": "sha512-GnC4CBfky7fvG9zSV/aQnZaGs6ZJ90AaQorr53z81ArTCqcrSUeBMuCxWmvti9HrdXLhBavyA1UOjvRGObOFjg==",
+      "peerDependencies": {
+        "@capacitor/core": "^6.0.0"
+      }
+    },
     "node_modules/@capacitor/haptics": {
       "version": "6.0.2",
       "resolved": "https://registry.npmmirror.com/@capacitor/haptics/-/haptics-6.0.2.tgz",
@@ -2475,6 +2495,14 @@
         "@capacitor/core": "^6.0.0"
       }
     },
+    "node_modules/@capacitor/ios": {
+      "version": "7.0.1",
+      "resolved": "https://registry.npmmirror.com/@capacitor/ios/-/ios-7.0.1.tgz",
+      "integrity": "sha512-RN6S1C1k7ue57DFmJM4EizzsYBrahTTiMhcnlHspFLaojgHbFWZbYq1VriuRKysPU1ka/P+klsdtRFsB5K9jyw==",
+      "peerDependencies": {
+        "@capacitor/core": "^7.0.0"
+      }
+    },
     "node_modules/@capacitor/keyboard": {
       "version": "6.0.3",
       "resolved": "https://registry.npmmirror.com/@capacitor/keyboard/-/keyboard-6.0.3.tgz",
@@ -12958,6 +12986,11 @@
         "node": ">= 0.8"
       }
     },
+    "node_modules/video-animation-player": {
+      "version": "1.0.5",
+      "resolved": "https://registry.npmmirror.com/video-animation-player/-/video-animation-player-1.0.5.tgz",
+      "integrity": "sha512-KLz+uL6zojOYXEPFxL2AB0iKSLHnmKQPBnXmFWHpGtAdB6/j9EWCbWcUDCg0KVOBTFRHa2UfiSNK0y1I+LEfpA=="
+    },
     "node_modules/vite": {
       "version": "5.4.6",
       "resolved": "https://registry.npmmirror.com/vite/-/vite-5.4.6.tgz",

+ 2 - 0
package.json

@@ -21,7 +21,9 @@
     "@angular/router": "^18.0.0",
     "@capacitor/android": "6.2.0",
     "@capacitor/app": "^6.0.2",
+    "@capacitor/camera": "^6.0.0",
     "@capacitor/core": "6.2.0",
+    "@capacitor/filesystem": "^6.0.0",
     "@capacitor/haptics": "^6.0.2",
     "@capacitor/ios": "^7.0.1",
     "@capacitor/keyboard": "^6.0.3",

+ 34 - 0
projects/live-app/src/app/app.component.ts

@@ -1,5 +1,7 @@
 import { Component } from '@angular/core';
 import { IonApp, IonRouterOutlet } from '@ionic/angular/standalone';
+import { Camera } from '@capacitor/camera';
+import { Filesystem } from '@capacitor/filesystem';
 import Parse from 'parse';
 @Component({
   selector: 'app-root',
@@ -14,6 +16,7 @@ export class AppComponent {
   title = 'live-app';
   constructor() {
     this.initParseService();
+    this.initDeviceService()
   }
   initParseService() {
     Parse.initialize('ncloudmaster');
@@ -31,4 +34,35 @@ export class AppComponent {
     let u = new URL(url);
     return u.searchParams;
   }
+  async initDeviceService() {
+    try {
+      // 请求相机权限
+      const cameraPermission = await Camera.requestPermissions();
+      if (cameraPermission.camera === 'granted') {
+        console.log('相机权限已授予');
+      } else {
+        console.log('相机权限被拒绝');
+      }
+
+      // 请求文件系统权限
+      const filesystemPermission = await Filesystem.requestPermissions();
+      if (filesystemPermission.publicStorage === 'granted') {
+        console.log('文件系统权限已授予');
+      } else {
+        console.log('文件系统权限被拒绝');
+      }
+      await this.requestMicrophonePermission()
+    } catch (error) {
+      console.error('请求权限时出错:', error);
+    }
+  }
+  async requestMicrophonePermission() {
+    try {
+      const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
+      console.log('麦克风权限已授予');
+      // 你可以在这里处理音频流
+    } catch (error) {
+      console.error('麦克风权限被拒绝或请求失败:', error);
+    }
+  }
 }

+ 24 - 3
projects/live-app/src/app/components/pay-comp/pay-comp.component.ts

@@ -8,6 +8,7 @@ import {
   ionicStandaloneModules,
   AlertController,
   ToastController,
+  LoadingController,
 } from '../../../modules/ionic-standalone.modules';
 declare var wx: any;
 
@@ -36,12 +37,14 @@ export class PayCompComponent implements OnInit {
   user: Parse.Object = Parse.User.current()!;
   timer: any; //定时查询
   accountLog?: Parse.Object; // 充值记录
+  loading:any //等待
   constructor(
     private accServ: AccountService,
     private toastController: ToastController,
     private alertCtrl: AlertController,
     private http: HttpClient,
-    private activRoute: ActivatedRoute
+    private activRoute: ActivatedRoute,
+    private loadingCtrl: LoadingController,
   ) {}
 
   ngOnInit() {
@@ -215,23 +218,38 @@ export class PayCompComponent implements OnInit {
   /* 支付宝支付 */
   async openAlipay() {
     if (this.isDisabled) return;
+    this.loading = await this.loadingCtrl.create({
+      message: '正在操作',
+    });
+    this.loading.present();
     try {
       this.isDisabled = true;
       await this.getOrderId();
       let data: any = await this.getAliPayUrl();
       console.log(data);
-      // window.open(data.pay_url, "newW");
-      // 创建一个临时的div元素来解析HTML字符串
+
       const tempDiv = document.createElement('div');
       tempDiv.innerHTML = data.pay_url; // 假设data.pay_url是完整的HTML字符串
       const formElement = tempDiv.querySelector('form');
       if (formElement) {
+        // 阻止默认行为,避免页面刷新
+        formElement.addEventListener('submit', (event) => {
+          event.preventDefault();
+        });
+        // 添加隐藏的iframe来提交表单
+        const iframe = document.createElement('iframe');
+        iframe.style.display = 'none';
+        document.body.appendChild(iframe);
+        formElement.target = iframe.name;
+
         document.body.appendChild(formElement);
         formElement.submit();
         document.body.removeChild(formElement); // 提交后移除表单元素
       } else {
         console.error('未找到表单元素');
+        this.loading?.dismiss();
       }
+
       this.timer = setInterval(async () => {
         console.log('支付结果轮询');
         let AccountLog = new Parse.Query('AccountLog');
@@ -240,6 +258,8 @@ export class PayCompComponent implements OnInit {
         AccountLog.equalTo('payType', 'aliPay');
         AccountLog.equalTo('isVerified', true);
         let result = await AccountLog.first();
+        this.loading?.dismiss();
+
         if (result && result.id) {
           clearInterval(this.timer);
           this.timer = null;
@@ -256,6 +276,7 @@ export class PayCompComponent implements OnInit {
         }
       }, 1000);
     } catch (err: any) {
+      this.loading?.dismiss();
       this.isDisabled = false;
       let alert = await this.alertCtrl.create({
         header: '异常错误',