onAuthStateChanged 在 iOS 上不返回初始 null 值

问题描述 投票:0回答:1

我正在将 Ionic/Angular 应用程序从使用 Firebase 和 Angular/Fire 命名空间兼容库的组合迁移到 Angular/Fire 模块化库。

更新后的代码,使用@angular/fire模块化库,通过

ionic serve
在本地网络浏览器和Android设备/模拟器上运行良好。但是当在 iOS 设备或模拟器上运行相同的代码时,我遇到了以下问题

  1. 开始时对
    onAuthStateChanged
    的调用不会返回任何内容,包括在第一次调用时不返回空值
  2. 并且在相关说明中,对
    signInWithCustomToken
    的调用挂起 - 通常在成功登录后,它将触发 onAuthStateChanged 但不会像上面 (1) 中那样响应,并挂起调用的地方,就好像等待 onAuthStateChanged 来触发。

在应用程序启动时调用的 onAuthStateChanged 代码是

import { getAuth, onAuthStateChanged, signInWithCustomToken, UserCredential } from '@angular/fire/auth';

export class LoginService {
  loginInit() {
    const auth = getAuth();
    this.unsubscribeFn = onAuthStateChanged(auth, async (user) => {
    if(!user) {
      this.loginUser();
    } else {
      // Initialize user account
    }
  }
  async loginUser() {
   // Get custom token from backend after validation
   this.loginToken = this.getCustomToken();
   const auth = getAuth();
   const creds: UserCredential = await signInWithCustomToken(auth, this.loginToken);
  }
}

我对所有 Firebase 调用都使用

@angular/fire
,在本例中使用
onAuthStateChanged
signInWithCustomToken
调用。我尝试了不同版本的 firebase(11.0.2、9.22.1 和 8.10.1)以及 @angular/fire(7.6.1 和 16.0.0)的版本,看看是否有帮助。

我在app.module中使用以下代码来初始化

provideFirebaseApp(() => initializeApp(environment.firebase)),
provideAuth(() => getAuth()),
provideDatabase(() => getDatabase())],

我的

ionic info
输出包含在下面。

Ionic:

   Ionic CLI                     : 7.2.0 (/Users/username/.nvm/versions/node/v22.11.0/lib/node_modules/@ionic/cli)
   Ionic Framework               : @ionic/angular 6.7.5
   @angular-devkit/build-angular : 16.2.16
   @angular-devkit/schematics    : 16.2.16
   @angular/cli                  : 16.2.16
   @ionic/angular-toolkit        : 12.1.1

Capacitor:

   Capacitor CLI      : 6.2.0
   @capacitor/android : 6.2.0
   @capacitor/core    : 6.2.0
   @capacitor/ios     : 6.2.0

Cordova:

   Cordova CLI       : not installed
   Cordova Platforms : not available
   Cordova Plugins   : not available

Utility:

   cordova-res : not installed globally
   native-run  : 2.0.1

System:

   ios-sim : 8.0.2
   NodeJS  : v22.11.0 (/Users/username/.nvm/versions/node/v22.11.0/bin/node)
   npm     : 10.9.0
   OS      : macOS Unknown
   Xcode   : Xcode 16.0 Build version 16A242d

鉴于相同的代码适用于 Android 设备/模拟器和 Web,这似乎表明 iOS 缺少一些设置/配置。我重新安装了 ionic 的 iOS 平台,但这也没有帮助。

我一直在尝试各种组合,但没有错误,并且不确定如何调试或解决此问题。感谢社区的任何帮助/指导。

分辨率 对于遇到这个问题的人,我可以通过更改 app.module 中的这行代码来解决这个问题

provideAuth(() => getAuth())

provideAuth(() => {
          if (Capacitor.isNativePlatform()) {
            return initializeAuth(getApp(), {
              persistence: indexedDBLocalPersistence
            })
          } else {
            return getAuth()
          }
        })
javascript firebase ionic-framework firebase-authentication angularfire
1个回答
0
投票

对于遇到此问题的人,我可以通过更改 app.module 中的这行代码来解决此问题

provideAuth(() => getAuth())

provideAuth(() => {
          if (Capacitor.isNativePlatform()) {
            return initializeAuth(getApp(), {
              persistence: indexedDBLocalPersistence
            })
          } else {
            return getAuth()
          }
        })
© www.soinside.com 2019 - 2024. All rights reserved.