2017-09-26 1 views
2

J'essaie de collecter les OneSignalID des utilisateurs. Le code suivant ajoute un ID de lecteur pour chaque utilisateur. Lorsque le même utilisateur se connecte avec un autre périphérique, le lecteur est mis à jour.Swift - Firebase ajouter plusieurs valeurs avec la même clé

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

Je veux que chaque utilisateur à ajouter à chaque appareil. Je veux donc plus d'un playerID sous la clé "kwvZPH ......" (c'est la clé utilisateur de FireBase). Comment puis-je faire cela?

+0

Utilisez updateChildValues ​​() comme indiqué dans [documentation] (https://firebase.google.com/docs/database/ios/read-and-write): =) – matiastofteby

Répondre

2

Vous pouvez réaliser ce que vous voulez en enregistrant l'ID OneSignal comme clé au lieu de la valeur. Ensuite, le playerID ne sera pas remplacé lors de la connexion à un nouvel appareil. La valeur n'a pas d'importance, tant qu'elle existe (je la définirai à 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) 
} 

donnera une base de données:

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

Il est évident que vous aurez besoin de changer la façon dont vous récupérez les valeurs.

+0

Merci. J'ai essayé de créer un ChildKey à partir du UIDevice ... uuidstring. Mais votre méthode est beaucoup plus utile. – Zebedee