有没有办法在没有应用程序组的情况下将 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。
我正在 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。