如何解决使用共享的iOS钥匙串启用跨应用Firebase身份验证
我的问题听起来很简单:我有一个App和一个Share Extension。我想做的是检查共享扩展名内部是否有用户登录。为此,我找到了这个documentation。
现在,如果用户登录,我会将登录的用户迁移到共享钥匙串(在主应用程序内部):
Auth.auth().createuser(withEmail: email,password: password) { (result,error) in
if let userId = result?.user.uid { // successfully signed in
let user = Auth.auth().currentUser
do {
try Auth.auth().useUserAccessGroup("teamID.com.example-app.group")
} catch let error as NSError {
print("Error changing user access group: %@",error)
}
Auth.auth().updateCurrentUser(user!) { error in
print(error?.localizedDescription as Any)
}
}
}
这没有给我任何错误,所以我想它正在工作。但目前我面临两个主要问题:
1。主应用程序内部的问题:
就像我说的那样,上面的代码可以正常运行,我还加载了一些数据,这些数据在用户注册后就可以正常运行。但是,如果我重新启动该应用程序,则用户不必再次登录,而应将其定向到主视图,在该视图中我再次为currentUser
检索数据。但这失败了,因为currentUser
是nil
...
static func getWishlists(completion: @escaping (_ success: Bool,_ dataArray: Any?,_ dropDownArray: Any?) -> Void) {
let db = Firestore.firestore()
let userID = Auth.auth().currentUser!.uid // <- throws error
...
在用户登录后(顶部的第一个代码段),该函数也立即被调用,并且工作正常,但只有第一次。
这是我从Firebase获得的error
:
6.21.0-[Firebase / Auth] [I-AUT000001]启动时加载已保存的用户时出错:Error Domain = FIRAuthErrorDomain代码= 17995“访问钥匙串时发生错误。@c中的@c NSLocalizedFailurereasonerrorKey字段NSError.userInfo词典将包含有关遇到的错误的更多信息。“ UserInfo = {FIRAuthErrorUserInfoNameKey = ERROR_KEYCHAIN_ERROR,NSLocalizedFailureReason = SecItemcopyMatching(0),NSLocalizedDescription =访问钥匙串时发生错误。 @c NSError.userInfo字典中的@c NSLocalizedFailurereasonerrorKey字段将包含有关遇到的错误的更多信息}
Share Extension
中的第二个问题:
就像我说的那样,我想检查用户是否登录。为此,我在Share Extension
中进行了尝试:
do {
try Auth.auth().useUserAccessGroup("teamID.com.example-app.group")
} catch let error as NSError {
print("Error changing user access group: %@",error)
}
if Auth.auth().currentUser != nil {
// User is signed in.
print("signed in")
} else {
// No user is signed in.
print("not signed in")
}
但这就是打印not signed in
,即使用户刚刚在主应用程序内部登录。
我不知道我到底在做什么错,在文档中找不到任何内容。也许这是我为用户检索数据的方式。也许我也需要用accessGroup
打电话,但是我被困住了……感谢您的帮助!
解决方法
我不太确定您的问题,但您不应该更改您自己的 userAccessToken 设置
do {
try Auth.auth().useUserAccessGroup("XXXXXXXXXXXXX")
} catch let error as NSError {
print("Error changing user access group: %@",error)
}
if Auth.auth().currentUser != nil {
// User is signed in.
print("signed in")
} else {
// No user is signed in.
print("not signed in")
}
将您的应用 userAccessGroup 替换为我放置 XXXXXXXXXXXXX 占位符的位置。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。