2017-09-26 21 views
2

ユーザのOneSignalIDを収集しようとしています。 次のコードは、各ユーザーに対して1つのplayerIDを追加します。 同じユーザーが別のデバイスにログインすると、playerIDが更新されます。Swift - Firebaseが同じキーで複数の値を加算する

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です)。 どうすればいいですか?

+0

[documentation](https://firebase.google.com/docs/database/ios/read-and-write):=) – matiastofteby

答えて

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 

明らかにあなたが値を取得する方法を変更する必要があります。

+0

に示されているように、updateChildValues()を使用してください。私はUIDeviceからChildKeyを作成しようとしました... uuidstring。しかし、あなたの方法はずっと便利です。 – Zebedee

関連する問題