尝试让 Firebase Firestore 在 iOS 设备上的离子电容器中工作五个小时,但我现在已经失去了神经。希望你能在这里帮助我。
设置:
Ionic:
ionic (Ionic CLI) : 4.12.0 (/usr/local/lib/node_modules/ionic)
Ionic Framework : @ionic/angular 7.0.0
@angular-devkit/build-angular : 16.0.0
@angular-devkit/schematics : 16.0.0
@angular/cli : 16.0.0
@ionic/angular-toolkit : 6.1.0
Capacitor:
capacitor (Capacitor CLI) : 4.6.3
@capacitor/core : 4.6.3
我已经建立了一个 Firebase 项目,在其中创建了 Firestore 数据库和两个应用程序,一个用于 Web,一个用于 iOS。一切都非常适合网络,并且可以检索集合。然而,在 iOS 上,我在访问 Firebase 时遇到了相当大的问题。
我从项目中下载了GoogleService-Info.plist并将其导入到XCode中的父文件夹中。我还自定义了AppDelegate:
import UIKit
import Capacitor
import FirebaseCore
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
FirebaseApp.configure()
return true
}
...
在我的 app.module.ts 中,我认为“按书”导入 Firebase。
// Firebase
import { provideFirestore, getFirestore } from '@angular/fire/firestore';
import { provideStorage, getStorage } from '@angular/fire/storage';
import { initializeApp, provideFirebaseApp } from '@angular/fire/app';
import { provideAuth, getAuth } from '@angular/fire/auth';
@NgModule({
imports: [
BrowserModule,
AppRoutingModule,
provideFirebaseApp(() => initializeApp(environment.firebase)),
provideFirestore(() => getFirestore()),
provideStorage(() => getStorage()),
provideAuth(() => getAuth()),
...
问题似乎是在 iOS 下无法建立与 Firebase Storage 的连接。我什至将 Firestorage 的规则设置为完全公开作为测试。
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if true;
}
}
}
来自 XCode 的错误日志看起来像这样:
⚡️ [log] - Starting data load
⚡️ [log] - null
10.16.0 - [FirebaseAnalytics][I-ACS023130] Configuration not found. Using default configuration
我在数据检索中安装了日志,它告诉我代码当前所在的位置。这里似乎由于缺少配置而永远无法建立连接!
load(): Observable<any> {
console.log('Starting data load');
return from(this.testFirebaseConnection()).pipe(
switchMap(() => {
if (this.data) {
console.log('Returning cached data');
return from(Promise.resolve(this.data));
} else {
console.log('Fetching new data from Firestore');
const scheduleCollection = collection(this.firestore, 'schedule');
const announcementsCollection = collection(this.firestore, 'ankuendigungen');
return forkJoin({
schedule: from(getDocs(scheduleCollection)),
announcements: from(getDocs(announcementsCollection))
}).pipe(
map(({ schedule, announcements }) => {
console.log('Data fetched successfully');
const scheduleData = [];
schedule.forEach((doc) => {
console.log('Processing schedule document:', doc.id);
scheduleData.push({ id: doc.id, ...doc.data() });
});
const announcementsData = [];
announcements.forEach((doc) => {
console.log('Processing announcement document:', doc.id);
announcementsData.push({ id: doc.id, ...doc.data() });
});
this.data = {
schedule: scheduleData,
speakers: announcementsData
};
console.log('Data processing complete');
return this.processData(this.data);
})
);
}
}),
catchError(error => {
console.error('Error in load method:', error);
if (error instanceof Error) {
console.error('Error message:', error.message);
console.error('Error stack:', error.stack);
}
return throwError(error);
})
);
}
老实说,我有点绝望,因为我无法进一步缩小错误范围,并相信一切都应该是正确的。请问这里有人有什么想法吗?
我建议使用 Capacitor Cloud Firestore 插件。