【问题标题】:Access Other Projects Firestore Data in iOS在 iOS 中访问其他项目 Firestore 数据
【发布时间】: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 访问它

标签: ios swift firebase google-cloud-firestore firebase-security


【解决方案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
         }
   }
}

【讨论】:

    猜你喜欢
    • 2015-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 2021-07-11
    • 2013-08-18
    • 1970-01-01
    • 2020-06-24
    相关资源
    最近更新 更多