Я настраиваю shareExtension
в iOS и хочу использовать FirebaseSDK
для прямой загрузки данных вместо использования AppGroups
. Это работает, как и ожидалось, но через 1 час UserToken get становится недействительным, и я больше не могу получить Firestore
Backend.
Я использую FirebaseSDK (6.2.0)
и включил общий доступ к связке ключей для доступа к текущему подписанному пользователю. У меня такие же Google-Plist
в MainApp и shareExtension
. Данные также правильно загружаются из shareExtension
и также обновляются через snapshotListener
в MainApp.
Соответствующий код в 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 раз. Самая последняя ошибка: произошла внутренняя ошибка, распечатайте и проверьте подробности ошибки для получения дополнительной информации.