有没有办法在没有应用程序组的情况下将 Firebase 与共享扩展一起使用

Is there a way to use Firebase with a ShareExtension without AppGroups

我正在 iOS 中设置一个 shareExtension 并希望使用 FirebaseSDK 直接上传数据而不是使用 AppGroups。这按预期工作,但 1 小时后 UserToken 失效,我无法再访问 Firestore 后端。

我正在使用 FirebaseSDK (6.2.0) 并启用钥匙串共享以访问当前登录用户。我在 MainApp 和 shareExtension 中有相同的 Google-Plist。数据也从 shareExtension 正确上传,并通过 MainApp 中的 snapshotListener 更新。

MainApp中的相关代码

    lazy var db = Firestore.firestore()
    //TEAMID form the Apple Developer Portal
    let accessGroup = "TEAMID.de.debug.fireAuthExample"

    override func viewDidLoad() {
        super.viewDidLoad()
        do {
            try Auth.auth().useUserAccessGroup("\(accessGroup)")
        } catch let error as NSError {
            print("Error changing user access group: %@", error)
        }
        guard let user = Auth.auth().currentUser else {
            self.statusLabel.text = "user get's lost"
            return
        }
        statusLabel.text = "UserID: \(user.uid)"
        // Do any additional setup after loading the view.
        db.collection("DummyCollection").addSnapshotListener { (querySnapshot, error) in
            if let err = error {
                print(err.localizedDescription)
            }
            guard let snapshot = querySnapshot else {
                return
            }
            DispatchQueue.main.async {
                self.dbCountLabel.text = "\(snapshot.count)"
            }
        }

    }

        func signIN(){
        // https://firebase.google.com/docs/auth/ios/single-sign-on
        do {
            try Auth.auth().useUserAccessGroup("\(accessGroup)")
        } catch let error as NSError {
            print("Error changing user access group: %@", error)
        }
        Auth.auth().signInAnonymously { (result, error) in
            if let err = error{
                print(err.localizedDescription)
                return
            }
            print("UserID: \(Auth.auth().currentUser!.uid)")
            }
        }
    }
 }  

shareExtension 中的代码:

override func viewDidLoad() {
        super.viewDidLoad()

        if FirebaseApp.app() == nil {
            FirebaseApp.configure()
        }
        do {
            try Auth.auth().useUserAccessGroup(accessGroup)
        } catch let error as NSError {
            print("Error changing user access group: %@", error)
        }
        tempUser = Auth.auth().currentUser

        if tempUser != nil {
            userIDLabel.text = "UserID: \(tempUser!.uid)"
            doneButton.isEnabled = true

            db.collection("DummyCollection").addSnapshotListener { (querySnapshot, error) in
                if let err = error {
                    print(err.localizedDescription)
                }
                guard let snapshot = querySnapshot else {
                    return
                }
                DispatchQueue.main.async {
                    self.dataCountLabel.text = "\(snapshot.count)"
                }
            }
        } else {
            // No user exists in the access group
            self.navigationItem.title = "No User"
        }
    }

我希望这应该是可能的,但令牌在 MainApp 中变得无效,我无法访问 Firestore 后端。

6.2.0 - [Firebase/Auth][I-AUT000003] 由于上次刷新尝试出错,令牌自动刷新已在 01:00 中重新安排。

6.2.0 - [Firebase/Firestore][I-FST000001] 无法访问 Cloud Firestore 后端。连接失败 1 次。最近的错误:发生内部错误,打印并检查错误详细信息以获取更多信息。

回答我自己的问题:这应该在下一个版本 (Firebase 6.4.0) 中得到修复 Details can be found in this PR 3239