使用Firebase Swift/Xcode通知用户新登录



我已经看遍了,不知道如何在新设备登录用户帐户时通知用户。我正在使用Firebase身份验证。我想设置某种通知系统或电子邮件,告诉用户有人从不同的设备登录到了他们的帐户,这样他们就可以出于安全原因知道。

想法?

此外,如何监控有关哪些设备已登录到特定帐户的信息?例如,用户可能很好奇他在自己的帐户中登录了多少设备,它们是什么类型的设备,这些设备的名称是什么,以及它们的位置(例如:德克萨斯州圣安东尼奥(。

想法?

是的,在这种情况下可以使用keychain。首先,您应该创建一个uniqueId。之后,您可以保存到数据库uniqueId。如果用户使用其他设备,此值将更改。我正在使用钥匙链服务的第三方框架。您可以使用框架。太完美了。

https://github.com/kishikawakatsumi/KeychainAccess

final class DeviceManager {

static let shared = DeviceManager()

private init() { }

var uniqueDeviceId: String {
get {
let keychain = Keychain(service: KeyManager.keychainServiceName).accessibility(.always)
if let deviceId = keychain[KeyManager.keychainDeviceIdKey] {
return deviceId
}

let vendorId = UIDevice.current.identifierForVendor!.uuidString
keychain[KeyManager.keychainDeviceIdKey] = vendorId

return vendorId
}
}
}

超级简单;在用户文档中有一个字段,用于存储设备名称及其状态。

您的应用程序将观察此用户文档,当某些内容发生更改时,所有用户设备都将收到该更改的通知。

让我来设置一下;这是一个基本的Firestore结构

users
uid_0
userName: "Jay"
devices:
device_0: offline
device_1: offline

当应用程序启动时,它将向该用户文档添加一个观察者(使用uid作为documentId(

func observeUser() {
let usersCollection = self.db.collection("users")
usersCollection.document("uid_0").addSnapshotListener { (documentSnapshot, err) in
guard let document = documentSnapshot else {
print("Error fetching document: (err!)")
return
}
let device = document.get("devices") as! [String: String]
print(device)
}
}

现在,在上面显示的Firestore闭包中,如果用户设备的状态发生变化,例如从脱机变为联机,它会将所有设备输出到控制台。当设备更改状态时,您可以采取任何需要的操作。

请记住,如果添加了一个新设备,则该事件也将触发,因此您可以在UI中显示一条消息";添加了一个新设备">

因此,一些测试代码将设备0的状态从脱机切换到联机。我有一个按钮点击来执行self.status = !self.status,然后调用toggleStatus函数

var status = false
func toggleStatus() {
var isOnline = ""
if self.status == false {
isOnline = "online"
} else {
isOnline = "offline"
}
let userCollection = self.db.collection("users")
let thisDevice = "device_0"
let devicesDict = [
"devices":
[thisDevice: isOnline] //sets device_0 to offline or online
]
let document = usersCollection.document("uid_0").setData(devicesDict, merge: true)
}

简言之,当用户第一次使用设备进行身份验证时,它可能会要求提供设备名称,或者根据设备的mac地址或其他信息制作一个设备名称。该设备名称存储在具有联机状态的用户文档/设备中。

设备名称也将存储在本地,例如用户默认值,因此登录时会自动发送到Firestore。

这里的最终结果是,如果任何用户设备更改状态;脱机到联机,反之亦然,或者添加或删除任何设备,所有设备都会收到该事件的通知。

最新更新