我偶然发现了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上运行以下代码时,我收到了敬酒消息:
出现错误:Firebase尚未初始化
我在app.module.ts
的{{1}}中初始化应用程序,该应用程序一直都有效,并且正如我所说,在android上运行良好。
有人知道为什么这在iOS上不起作用吗?谢谢!
答案 0 :(得分:1)
这是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" />
答案 1 :(得分:0)
FCM
是Firebase Cloud Messaging
,几乎不支持可读性(这是Firestore
以外的另一种产品)。 CocoaPods
可能缺乏相关的依赖性,这可以解释.ts
在iOS上不为人所知。将CocoaPods
的当前版本与以前的版本进行比较,应该可以看到那里的确切更改(使用版本控制的充分理由)。
请参阅FirebaseFirestore Framework Reference ...这与JavaScript无关。
这是必填项:pods/FirebaseFirestore。
答案 2 :(得分:0)
[编辑]
请注意,自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(...
答案 3 :(得分:0)
问题似乎是Firebase现在开始未初始化,并且需要在代码调用getToken()之前为此目的调用一个函数。
您需要的代码是(<any>window).FirebasePlugin.initFirebase()
我已经能够从cordova firebase插件的github上获取此信息,其他人也遇到相同的问题。由于某种原因,尽管google没找到这个,也许它还是一个太新的问题了
https://github.com/arnesson/cordova-plugin-firebase/issues/816