Firebase не инициализируется на iOS Ionic - PullRequest
0 голосов
/ 02 сентября 2018

Я наткнулся на проблему с моим приложением Ionic, Angular и Firebase.

Раньше у меня была эта проблема, но она, казалось, решилась сама собой, и теперь у меня это снова, и мне интересно, знает ли кто-нибудь почему.

Я использую Firebase FCM для хранения token пользователя, чтобы затем отправить ему уведомление. На андроиде это работает отлично, а на iOS раньше работало ..

Я сгенерировал свой GoogleService-Info.plist файл из Firebase и поместил его в основную папку.

У меня есть следующий код для получения токена 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, я получаю тостовое сообщение:

Произошла ошибка: Firebase не инициализирован

Я инициализирую приложение в app.module.ts в imports, которое всегда работало, и, как я уже сказал, прекрасно работает на Android.

Есть идеи, почему это не работает на iOS? Спасибо!

Ответы [ 4 ]

0 голосов
/ 06 сентября 2018

Похоже, проблема в том, что Firebase теперь запускается неинициализированным и требует, чтобы для этой цели была вызвана функция, прежде чем ваш код вызовет getToken ().

Требуемый бит кода: (<any>window).FirebasePlugin.initFirebase()

Мне удалось получить эту информацию из github плагина базы данных cordova, где другие люди сталкивались с такой же проблемой. По какой-то причине, хотя Google не нашел это, возможно, это слишком новая проблема до сих пор

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

0 голосов
/ 05 сентября 2018

Это проблема с установленной версией плагина firebase.

Я уменьшил эту ошибку, понизив ее до 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" />
0 голосов
/ 05 сентября 2018

[EDIT]

Обратите внимание, что начиная с cordova-plugin-firebase версии 2.x initXXXXX -методы были удалены снова.

И версия 1.1.x была помечена как deprecated.

[/ EDIT]


Во-первых, было бы полезно, если бы вы могли предоставить более подробную информацию о библиотеках / версиях, которые вы используете.

Полагаю, вы используете 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(...
0 голосов
/ 05 сентября 2018

FCM равен Firebase Cloud Messaging, что едва поддерживает удобочитаемость (это совсем другой продукт, чем Firestore). CocoaPods может не иметь соответствующей зависимости, что объясняет, что она не известна .ts в iOS. Сравнение текущей версии CocoaPods с предыдущей версией должно показать, что именно там изменилось (хорошая причина использовать контроль версий).

см. Справочник по FirebaseFirestore Framework ... это не имеет ничего общего с JavaScript.

это здесь будет необходимо: pods / FirebaseFirestore .

...