Firebase 未在 iOS Ionic 上初始化

Firebase isn't initialised on iOS Ionic

我无意中发现了我的 Ionic、Angular 和 Firebase 应用程序的问题。

我以前遇到过这个问题,不过好像自己解决了,现在又遇到了,不知道有没有人知道为什么。

我正在使用 Firebase FCM 存储用户的 token,然后向他们发送通知。在 android 上这完美地工作,在 iOS 上它曾经工作..

我从 Firebase 生成了 GoogleService-Info.plist 文件并将其放在我的主文件夹中。

我有以下代码来获取 fcm 令牌:

 getFCMToken() {
    let token;
    this.firebaseNative.getToken().then((tok) => {
        token = tok;
        if(this.platform.is('ios')) {
          this.firebaseNative.grantPermission().then((tok) => {
            return this.fcmToFirestore(token);
          }).catch(error => this.showToast("There was an error: " + error));
        } else {
          return this.fcmToFirestore(token);
        }
    }).catch(error => {
        this.showToast("There was an error: " + error)
    });
  }

  fcmToFirestore(token) {
    if (!token) return;

    const devicesRef = this.afs.collection('devices')
    const docData = {
      token,
      userId: this.userData.uid,
    }
    return devicesRef.doc(token).set(docData);
  }

当我 运行 在 iPhone 上执行以下代码时,我收到消息:

There was an error: Firebase isn't initialised

我在 imports 中的 app.module.ts 中初始化了应用程序,它一直有效,而且正如我所说,在 android 上运行良好。

知道为什么这对 iOS 不起作用吗?谢谢!

FCMFirebase Cloud Messaging,勉强支持可读性(这与 Firestore 完全不同)。 CocoaPods 可能缺乏相关依赖性,这可以解释它在 iOS 上不为 .ts 所知。将 CocoaPods 的当前版本与以前的版本进行比较应该可以显示那里到底发生了什么变化(使用版本控制的一个很好的理由)。

请参阅 FirebaseFirestore Framework Reference ...这与 JavaScript 无关。

这是必需的:pods/FirebaseFirestore

This is an issue with the installed version of firebase plugin.

我通过降级到 1.0.5 减轻了这个错误

cordova plugin remove cordova-plugin-firebase
cordova plugin add cordova-plugin-firebase@1.0.5 --save 

P.S。确保 config.xml 在所需版本中提到了 firebase。这有助于在所有开发系统中保持版本相同。

<plugin name="cordova-plugin-firebase" spec="~1.0.5" />

[编辑]

请注意,自 cordova-plugin-firebase 版本 2.x 起,initXXXXX 方法已再次删除。

并且版本 1.1.x 已被标记为 deprecated.

[/编辑]


首先,如果您能提供有关您正在使用的 libraries/versions 的更多详细信息,这将很有帮助。

我猜你正在使用 cordova-plugin-firebase 版本 1.1.x 与 @ionic-native/firebase (?)

看来,cordova-plugin-firebase 有一些新的初始化方法现在需要显式调用,然后才能使用 firebase 服务。

FirebasePlugin.initFirebase(success, error)

FirebasePlugin.initAnalytics(success, error)
FirebasePlugin.initCrashlytics(success, error)
FirebasePlugin.initPerformance(success, error)
FirebasePlugin.initRemoteConfig(success, error)

请注意,截至目前的最新版本 @ionic-native/firebase (v4.12.2) 尚未集成这些功能。

因此,为了在 Ionic 应用程序中使用这些,您可能需要访问 "raw" FirebasePlugin 实例本身,例如

declare var FirebasePlugin;
// ...
this.platform.ready().then(() => {
  FirebasePlugin.initFirebase(...

问题似乎是 Firebase 现在启动时未初始化,需要为此目的调用一个函数,然后您的代码才能调用 getToken()。

您需要的代码是(<any>window).FirebasePlugin.initFirebase()

我已经能够从 cordova firebase 插件的 github 获取此信息,其他人也遇到了同样的问题。出于某种原因,虽然 google 没有找到这个,也许它仍然是一个太新的问题

https://github.com/arnesson/cordova-plugin-firebase/issues/816