2017-09-26 1 views
2

사용자의 OneSignalID를 수집하려고합니다. 다음 코드는 각 사용자마다 하나의 playerID를 추가합니다. 동일한 사용자가 다른 장치로 로그인하면 playerID가 업데이트됩니다. Swift - Firebase가 동일한 키로 여러 값 추가

enter image description here

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) 
    } 

나는 모든 사용자가 모든 장치에 추가 할 수 있습니다. 그래서 "kwvZPH ......"키 아래에 하나 이상의 playerID가 필요합니다 (이것은 FireBase UserKey입니다). 어떻게해야합니까?

+0

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

답변

2

값 대신 키로 OneSignal ID를 저장하여 원하는 것을 얻을 수 있습니다. 그러면 playerID은 새 장치에 로그인 할 때 무시되지 않습니다. 값이 존재하는 한 값은 중요하지 않습니다 (이것을 true으로 설정합니다).

- usersToOneSignal 
    | 
    | - kwzphiusgdfoiaudbksdhf763truygi 
     | 
     | - 4e762345-76654afedc-65342287fc-57635472: true 
     | - 7645736-efcab873465-7635476823f-ab62354: 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) 
} 

데이터베이스를 제공 할 것입니다.

+0

에 표시된대로 updateChildValues ​​()를 사용하십시오. UIDevice ... Uuidstring에서 ChildKey를 만들려고했습니다. 그러나 당신의 방법은 훨씬 더 유용합니다. – Zebedee

관련 문제