【问题标题】:Firebase isn't initialised on iOS IonicFirebase 未在 iOS Ionic 上初始化
【发布时间】:2018-09-02 20:36:26
【问题描述】:

我偶然发现了我的 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 上运行以下代码时,我收到了 toast 消息:

出现错误:Firebase 未初始化

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

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

【问题讨论】:

    标签: javascript angular firebase ionic-framework cordova-plugin-fcm


    【解决方案1】:

    这是安装的 firebase 插件版本的问题。

    我通过降级到 1.0.5 来缓解这个错误

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

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

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

    【讨论】:

    • 不幸的是,我已经在1.0.5&lt;plugin name="cordova-plugin-firebase" spec="^1.0.5" /&gt;,我不确定^ 是否有所作为?
    • 1.0.5 出现了一些不同的错误,我进一步降级为0.1.18。检查这是否适合您。我已经更新了我的答案,所以你可以检查它是否有效:)
    • 感谢您的提示!我会尝试并报告回来!到目前为止降级是个好主意吗?
    • 不幸的是,当向后兼容性因频繁发布而中断时,降级是唯一的选择。
    • 工作就像一个魅力! 1.0.5 适合我。
    【解决方案2】:

    FCMFirebase Cloud Messaging,几乎不支持可读性(这是一个完全不同于Firestore 的产品)。 CocoaPods 可能缺乏相关的依赖关系,这将解释它在 iOS 上不为 .ts 所知。将CocoaPods 的当前版本与以前的版本进行比较应该可以显示那里的确切变化(使用版本控制的一个很好的理由)。

    参见FirebaseFirestore Framework Reference ...这与 JavaScript 无关。

    这里是必需的:pods/FirebaseFirestore

    【讨论】:

    • 对不起,我没有关注。那么我需要做什么才能让它重新开始工作呢?我需要从用户那里获取 FCM 令牌才能推送通知
    【解决方案3】:

    似乎问题在于 Firebase 现在开始未初始化,并且需要为此目的调用一个函数,然后您的代码调用 getToken()。

    您需要的代码是(&lt;any&gt;window).FirebasePlugin.initFirebase()

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

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

    【讨论】:

      【解决方案4】:

      [编辑]

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

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

      [/编辑]


      首先,如果您能提供更多关于您正在使用的库/版本的详细信息,将会很有帮助。

      我猜你正在使用 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 应用程序中使用这些,您可能需要像访问“原始”FirebasePlugin 实例本身一样

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-09-05
        • 1970-01-01
        • 1970-01-01
        • 2016-10-27
        • 1970-01-01
        • 2022-10-16
        • 2020-08-26
        • 2021-04-26
        相关资源
        最近更新 更多