import {Inject, Injector, ModuleWithProviders, NgModule, Optional, SkipSelf} from '@angular/core'; import {SplashScreen} from '@ionic-native/splash-screen/ngx'; import {StatusBar} from '@ionic-native/status-bar/ngx'; import {InAppBrowser} from '@ionic-native/in-app-browser/ngx'; import {AppVersion} from '@ionic-native/app-version/ngx'; import {Device} from '@ionic-native/device/ngx'; import {ScreenOrientation} from '@ionic-native/screen-orientation/ngx'; import {FileOpener} from '@ionic-native/file-opener/ngx'; import {File} from '@ionic-native/file/ngx'; import {FileTransfer} from '@ionic-native/file-transfer/ngx'; import {throwIfAlreadyLoaded} from '../../guard/module-import-guard'; import {NativeService} from './native-service'; import {DeviceInfoNativeService} from './device-info.native.service'; import { APP_CONFIG, M2_APPLEID_LOGIN_PROVIDER, M2_DEVICE_INFO_PROVIDER, M2_FINGER_PRINT_PROVIDER, M2_WECHAT_PROVIDER } from '../../core/tokens/m2.tokens'; import {DeviceInfoInterface} from '../../core/interfaces/device-info.interface'; import {distinctUntilChanged, filter} from 'rxjs/operators'; import {NavigationEnd, Router, RouterEvent} from '@angular/router'; import {UpgradeService} from './upgrade-service'; import {NativeStatusbarService} from './native-statusbar.service'; import {InputFocusServe} from './input-focus.service'; import {ModalUpdatePage} from './modal-update/modal-update.page'; import {IonicModule} from '@ionic/angular'; import {CommonModule} from '@angular/common'; import {M2Logger2} from '../../core/services/m2.logger2'; import {Geolocation} from '@ionic-native/geolocation/ngx'; import {FingerPrintService} from './finger-print.service'; import {FingerprintAIO} from '@ionic-native/fingerprint-aio/ngx'; import {ImagePicker} from '@ionic-native/image-picker/ngx'; import {RUNMODE} from '../../core/enum/layout'; import {CordovaPluginWechatModule} from './modules/cordova-plugins/cordova-plugin-wechat/cordova-plugin-wechat.module'; import {CordovaPluginSignInWithAppleService} from './modules/cordova-plugins/cordova-plugin-sign-in-with-apple.service'; @NgModule({ declarations: [ModalUpdatePage], entryComponents: [ModalUpdatePage], imports: [ IonicModule, CommonModule, CordovaPluginWechatModule ], providers: [] }) export class NativeModule { constructor(@Optional() @SkipSelf() parentModule: NativeModule, private nativeService: NativeService, private router: Router, private nativeStatusbarService: NativeStatusbarService, private upgradeService: UpgradeService, private inputFocusServe: InputFocusServe, @Inject(APP_CONFIG) private appData: any, @Inject(M2_DEVICE_INFO_PROVIDER) private deviceInfoInterface: DeviceInfoInterface) { throwIfAlreadyLoaded(parentModule, 'NativeModule'); M2Logger2.log('NativeModule已经初始化……'); setTimeout(() => { const homeReady = new Promise(resolve => { const route$ = this.router.events.pipe( filter(event => event instanceof NavigationEnd), filter((event: NavigationEnd) => { const judge = (event.url === '/' && event.urlAfterRedirects === '/m2/home') || (event.url === '/' && event.urlAfterRedirects === '/login') || (event.url === '/login' && event.urlAfterRedirects === '/login'); return judge; }), distinctUntilChanged(), ); route$.subscribe((event) => { // 延迟1S,为了等待首页完全准备好,用户体验好一些 resolve(true); }); }); const splashReady = Promise.all([this.deviceInfoInterface.ready(), this.nativeStatusbarService.ready(), homeReady]); this.deviceInfoInterface.reload().then(item => { // 对app进行一些常规设置 // 对ionic进行一些全局行为设置,或为IOS或Android进行个性化设置 this.nativeService.appSetting(); this.inputFocusServe.init(); // 检查app的版本是否最新,如果不是最新则进行升级 this.upgradeService.checkAndUpgrade(); }); splashReady.then(() => { setTimeout(() => { this.nativeService.hideSplash(); }, 500); }); }); } static forRoot(): ModuleWithProviders { return { ngModule: NativeModule, providers: [ NativeService, UpgradeService, NativeStatusbarService, InputFocusServe, {provide: M2_DEVICE_INFO_PROVIDER, useClass: DeviceInfoNativeService}, {provide: M2_FINGER_PRINT_PROVIDER, useClass: FingerPrintService}, {provide: M2_WECHAT_PROVIDER, useClass: CordovaPluginWechatModule}, {provide: M2_APPLEID_LOGIN_PROVIDER, useClass: CordovaPluginSignInWithAppleService}, StatusBar, SplashScreen, InAppBrowser, AppVersion, Device, ScreenOrientation, FileOpener, File, FileTransfer, Geolocation, ImagePicker, FingerprintAIO ] }; } }