app-launch.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import appSettings from '@/core/config/app-settings'
  2. import { migrateObsoleteStorage } from '@/core/storage/legacy-migration'
  3. // nativePushEnabled 见 runtime-manifest UI_FLAGS
  4. import { bootstrapLocale } from './locale-bootstrap'
  5. import { bindTabCenterPublisher } from '@/features/tab-center-publish'
  6. import { startNetworkAccessGuard, refreshNetworkAccess } from '@/core/network/network-access-guard'
  7. import {
  8. startTeenModeGuard,
  9. onTeenModeForeground,
  10. onTeenModeBackground
  11. } from '@/features/account/teen-mode-guard'
  12. export function runColdStart(vm) {
  13. migrateObsoleteStorage()
  14. const sys = uni.getSystemInfoSync()
  15. const platform = (sys.platform || '').toLowerCase()
  16. vm.globalData.isAndroid = platform === 'android'
  17. vm.globalData._i18n = vm.$i18n
  18. bootstrapLocale(vm.$i18n, vm.globalData.isAndroid)
  19. const store = vm.$store
  20. store.dispatch('user/hydrateFromCache')
  21. store.dispatch('release/check')
  22. store.dispatch('shell/bootstrap')
  23. store.dispatch('cart/sync')
  24. store.dispatch('stats/hydrate')
  25. vm.globalData.runtimeConfig = { ...appSettings }
  26. bindTabCenterPublisher(vm)
  27. // 仅 App:拦截「系统禁止本应用联网」;H5 由浏览器管理网络,无需守卫
  28. // #ifdef APP-PLUS
  29. startNetworkAccessGuard(vm.$i18n)
  30. // #endif
  31. startTeenModeGuard(vm.$i18n)
  32. // #ifdef APP-PLUS
  33. if (appSettings.nativePushEnabled) {
  34. if (platform === 'android') {
  35. setTimeout(() => vm.$pushBridge && vm.$pushBridge.boot(), 400)
  36. } else if (platform === 'ios') {
  37. vm.$pushBridge && vm.$pushBridge.boot()
  38. }
  39. }
  40. // #endif
  41. }
  42. export function runForeground(vm) {
  43. // #ifdef APP-PLUS
  44. refreshNetworkAccess()
  45. // #endif
  46. onTeenModeForeground()
  47. vm.$store.dispatch('im/resume')
  48. // #ifdef APP-PLUS
  49. if (appSettings.nativePushEnabled) {
  50. try {
  51. const platform = (uni.getSystemInfoSync().platform || '').toLowerCase()
  52. if (platform === 'ios' && vm.$pushBridge) {
  53. setTimeout(() => {
  54. vm.$pushBridge.pullNativeTokens()
  55. vm.$pushBridge.queueServerReport('foreground-ios', 200)
  56. }, 300)
  57. }
  58. } catch (_) {}
  59. }
  60. // #endif
  61. }
  62. export function runBackground(vm) {
  63. onTeenModeBackground()
  64. vm.$store.dispatch('im/pause', false)
  65. }