Swift - Firebase使用相同的密钥添加多个值

时间:2017-09-26 08:52:57

标签: swift firebase firebase-realtime-database add onesignal

我正在尝试收集用户的OneSignalID。 以下代码为每个用户添加一个playerID。 当同一用户使用其他设备登录时,将更新播放器ID。

    let status : OSPermissionSubscriptionState = OneSignal.getPermissionSubscriptionState()
    let oneSignalUser = status.subscriptionStatus.userId

    if oneSignalUser != nil {
        let aUser = Auth.auth().currentUser!

        let post = ["playerID": oneSignalUser!] as [String: Any]
        Database.database().reference().child("usersToOneSignal").child(aUser.uid).setValue(post)
    }

enter image description here

我希望每个用户都能添加到每个设备中。 所以我想在键“kwvZPH ......”下面有多个playerID(这是FireBase UserKey)。 我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

您可以通过将OneSignal ID保存为键而不是值来实现您的目的。然后,playerID在登录新设备时不会被覆盖。价值并不重要,只要它存在(我会将其设置为true)。

let status : OSPermissionSubscriptionState = OneSignal.getPermissionSubscriptionState()
let oneSignalUserID = status.subscriptionStatus.userId

if oneSignalUser != nil {
    let aUser = Auth.auth().currentUser!

    // get the original path you were using
    let originalPath = Database.database().reference().child("usersToOneSignal").child(aUser.uid)
    // set `true` at the OneSignal key in the database
    originalPath.child(oneSignalUserID!).setValue(true)
}

将提供数据库:

- usersToOneSignal
     |
     | - kwzphiusgdfoiaudbksdhf763truygi
       |
       | - 4e762345-76654afedc-65342287fc-57635472: true
       | - 7645736-efcab873465-7635476823f-ab62354: true 

显然,您需要更改检索值的方式。