Firebase не инициализируется на iOS Ionic
Я наткнулся на проблему с моим приложением 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 ответа
Это проблема с установленной версией плагина firebase.
Я уменьшил эту ошибку, опустив версию до 1.0.5
cordova plugin remove cordova-plugin-firebase
cordova plugin add cordova-plugin-firebase@1.0.5 --save
PS Обязательно config.xml
упоминается firebase с требуемой версией. Это помогает сохранять одинаковые версии во всех системах разработки.
<plugin name="cordova-plugin-firebase" spec="~1.0.5" />
[РЕДАКТИРОВАТЬ]
Обратите внимание, что с 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(...
FCM
является Firebase Cloud Messaging
, который едва поддерживает читабельность (это совсем другой продукт, чем Firestore
). CocoaPods
может отсутствовать соответствующая зависимость, которая объясняет, что она не известна .ts
на iOS. сравнивая текущую версию CocoaPods
с предыдущей версией должно показываться, что именно там изменилось (веская причина использовать контроль версий).
посмотрите Ссылку Платформы FirebaseFirestore... это не имеет никакого отношения к JavaScript.
это было бы то, что требуется: https://cocoapods.org/pods/FirebaseFirestore.
Похоже, проблема в том, что Firebase теперь запускается неинициализированным и требует, чтобы для этой цели была вызвана функция, прежде чем ваш код вызовет getToken().
Вам нужно немного кода (<any>window).FirebasePlugin.initFirebase()
Я смог получить эту информацию из GitHub плагина Cordova Firebase, где у других людей была такая же проблема. По какой-то причине, хотя Google не нашел это, возможно, это слишком новая проблема до сих пор
https://github.com/arnesson/cordova-plugin-firebase/issues/816