我正在从实时数据库迁移到Firestore。因为我不能在同一项目中同时拥有Realtime数据库实例和Firestore实例,所以我必须手动初始化Firestore实例,而不是让它在构建过程中自动拾取google-services.json
文件。我这样做是这样的:
FirebaseOptions firebaseOptions = new FirebaseOptions.Builder()
.setProjectId("***")
.setApiKey("***")
.setApplicationId("***")
.setDatabaseUrl("https://***.firebaseio.com")
.build();
FirebaseApp firebaseApp = FirebaseApp.initializeApp(this, firebaseOptions, "dev");
FirebaseFirestore db = FirebaseFirestore.getInstance(firebaseApp);
所有值均取自我为新项目下载的google-services.json
文件。
调用FirebaseFirestore.getInstance()
很好,但是当我稍后尝试获取文档时,我在logcat中看到了这一点:
W/Firestore: (0.6.6-dev) [OnlineStateTracker]: Could not reach Firestore backend.
对Task
的{{1}}调用的get()
异常消息为:
Document
设备肯定在线。控制台中的新项目没有设置SHA证书指纹,因为我不能使用与原始项目相同的指纹。
我想念什么?
[编辑]
答案 0 :(得分:0)
我知道答案来得有点晚。就我而言,我遇到了同样的问题,因为我尝试测试数据存储,而我失去了在项目中使用Firestore的可能性。当我尝试为Firestore创建新项目时,必须手动启动Firestore实例,并且遇到相同的问题。
在我的情况下,问题在于FirebaseOptions的参数之一是错误的(在我的情况下是project_id,因为我已经放置了project_number)。我从新项目的google_services.json中获取了所有参数:
FirebaseOptions.Builder()
.setApplicationId("X:XXXXXXXX:android:YYYYYYY") // FROM client_info -> mobilesdk_app_id.
.setApiKey("AIzaXXXXXXXXXXX") // FROM api_key -> current_key
.setDatabaseUrl("https://XXXXXXX.firebaseio.com") // FROM firebase_url.
.setProjectId("XXXXXXXX") //FROM project_id
.setStorageBucket("XXXXXXX.appspot.com") //FROM storage_bucket
.build();
此后,一切正常。