在 iOS 中访问其他项目 Firestore 数据

Posted

技术标签:

【中文标题】在 iOS 中访问其他项目 Firestore 数据【英文标题】:Access Other Projects Firestore Data in iOS 【发布时间】:2020-12-16 12:35:08 【问题描述】:

我正在使用 Firestore 在多个项目之间建立聊天,使用此 Doc 即我有 2 个应用程序/Firebase 项目。 应用 A 和应用 B 现在我已经在 App A 的 Firestore 中实现了简单的集合,它工作正常,没有任何问题。 我的问题是当我想使用上述文档从 App B 访问 App A 的 Firestore 我收到错误Error Domain=FIRFirestoreErrorDomain Code=7“权限缺失或不足 我附上了收藏的图片 规则是

service cloud.firestore 
   match /databases/database/documents 
      match /document=** 
          allow read, write: if true;
      
  

我在App B的ChatViewController上配置的代码如下

let secondaryOptions = FirebaseOptions(googleAppID: "1:27992087142:ios:2a4732a34787067a",
                                   gcmSenderID: "27992087142")
secondaryOptions.apiKey = "AIzaSyBicqfAZPvMgC7NZkjayUEsrepxuXzZDsk"
secondaryOptions.projectID = "projectid-12345"
secondaryOptions.bundleID = "com.google.firebase.devrel.FiroptionConfiguration"
secondaryOptions.databaseURL = "https://myproject.firebaseio.com"

guard let secondary = FirebaseApp.app(name: "secondary")
else  assert(false, "Could not retrieve secondary app") 

// Retrieve a Real Time Database client configured against a specific app.
let _ = Database.database(app: secondary)

var collectionReference:CollectionReference?
collectionReference =
        Firestore.firestore().collection("eclinic").document("1002").collection("chats")

collectionReference?.order(by: "timestamp", descending: false).addSnapshotListener  [self] (snapShot, err) in
        if let error = err 
            print("Error     \(error)")
        else
            
            guard let snapDoc = snapShot?.documents else 
                print("Return  ")
                return
            
      
 

【问题讨论】:

你确定这些规则是在数据所在的app A的项目上设置的吗?安全规则仅适用于部署它们的一个项目,不适用于其他项目。 @DougStevenson 是的,我正在使用我的数据所在的 App A 的 Firestore,请建议我应该怎么做才能从 App B 访问它 【参考方案1】:

探索这个文档link我能够克服我的问题,代码如下

let secondaryOptions = FirebaseOptions(googleAppID: "1:27992087142:ios:2a4732a34787067a",
                                gcmSenderID: "27992087142")
secondaryOptions.apiKey = "AIzaSyBicqfAZPvMgC7NZkjayUEsrepxuXzZDsk"
secondaryOptions.projectID = "projectid-12345"
secondaryOptions.bundleID = "com.google.firebase.devrel.FiroptionConfiguration"
secondaryOptions.databaseURL = "https://myproject.firebaseio.com"

FirebaseApp.configure(name: "secondary", options: secondaryOptions)

// Retrieve a Real Time Database client configured against a specific app.
guard let secondary = FirebaseApp.app(name: "secondary")
     else  assert(false, "Could not retrieve secondary app") 

let firestoreSecondary = Firestore.firestore(app: secondary)
var collectionReference:CollectionReference?
collectionReference =
firestoreSecondary.collection("eclinic").document("1002").collection("chats")

collectionReference?.order(by: "timestamp", descending: false).addSnapshotListener  [self] (snapShot, err) in
     if let error = err 
         print("Error     \(error)")
     else
         
         guard let snapDoc = snapShot?.documents else 
             print("Return  ")
             return
         
   

【讨论】:

以上是关于在 iOS 中访问其他项目 Firestore 数据的主要内容,如果未能解决你的问题,请参考以下文章

Firebase Firestore iOS:如何将图像保存到 Firestore 中的集合中?

我正在尝试从我的 ios Swift 项目中的 Firestore 数据库中获取数据

如何在 Swift 中从 Cloud FireStore Firebase 访问特定字段

Firebase Firestore:无法访问Firestore后端(仅限Android)

我无法从我的颤振项目中访问我的 firebase/firecloud 数据。我得到:无法访问 Cloud Firestore 后端。连接失败 1 次

如何通过在 Firestore 中的查询从索引中获取多个文档到其他索引