私はソーシャルアプリを作成しています。そのソーシャルアプリの一般的な側面は、ユーザーが投稿した投稿のタブを維持することです。私は、このためのバックエンドとしてFirebaseを使用して、ここで私のスキーマがFirebaseの 'users'の 'posts' referenceを保持できません
だSocialApp
posts
-KGsBG5TPYBtzRivZnbf
users
facebook:10154108240254134
cachedProfile
displayName: "Karthik Kannan"
imageURL: "https://scontent.xx.fbcdn.net/v/t1.0-1/p100x100..."
posts
-KGsBG5TPYBtzRivZnbf: true
provider: "facebook"
私は先に行くと1台のデバイス(またはシミュレータ)からの投稿を追加すると予定通り、これは動作しますが、ときに私は、デバイスからアプリを削除して再インストールしていますユーザー辞書の投稿関係が消えます。私はそれがデバイス間で存続し、関係を損なわないようにしたいので、ユーザが他のiDeviceを使って自分の投稿を孤立させないようにすることを決めた場合。
Firebaseに投稿を追加するために書いたコードと、現在どのようにユーザーを追跡しているのですか?
func postToFirebase(imgUrl: String) {
var gift: Dictionary<String, AnyObject> = [
"giftName": giftName.text!,
"giftDescription":giftDescription.text!,
"giftAvailableAt": giftAvailableAt.text!,
"giftPrice": Int(giftPrice.text!)!,
"username": NSUserDefaults.standardUserDefaults().valueForKey("uid")!,
"giftImage":imgUrl,
]
let firebasePost = DataService.ds.REF_POSTS.childByAutoId()
firebasePost.setValue(gift)
firebasePost.observeSingleEventOfType(.Value, withBlock: { snapshot in
if let postID = snapshot.key {
DataService.ds.REF_USER_CURRENT.childByAppendingPath("posts").childByAppendingPath(postID).setValue(true)
}
})
}
これは私が現在のユーザー設定する方法である:
var REF_USER_CURRENT:Firebase {
if let uid = NSUserDefaults.standardUserDefaults().valueForKey("uid") as? String {
let user = Firebase(url:"\(BASE_URL)").childByAppendingPath("users").childByAppendingPath(did){
return user!
} else {
return Firebase()
}
}
func createFirebaseUser(uid:String, user:Dictionary<String, AnyObject>) {
REF_USERS.childByAppendingPath(uid).setValue(user)
}
を、これは私のログインコントローラのコードです。
NSUserDefaults.standardUserDefaults().setValue(authData.uid, forKey: "uid")
let user = ["provider":authData.provider!,"displayName":authData.providerData["displayName"]!,"cachedProfile":authData.providerData["cachedUserProfile"]!, "imageURL":authData.providerData["profileImageURL"]!]
DataService.ds.createFirebaseUser(authData.uid, user: user)
self.performSegueWithIdentifier("loggedIn", sender: nil)
これはすべて私が書いたコードです。私はそれがNSUserDefaultsと関係があると考えています。どんな助けもこの初心者から高く評価されます。
Firebaseに投稿を書くとき、Firebaseダッシュボードにログインして、データが実際にそこにあることを確認しましたか?次に、FireBaschの任意のノードにonDisconnectオブザーバーを接続しましたか?最後に、ユーザがログアウトしたり、接続を解除したりすると、Firebaseに何か書き込むことができますか?そして...ログインコントローラでは、既存のユーザを認証するためにcreateFirebaseUserを使用する必要があるのはなぜですか? – Jay
あなたは実際にあなたのユーザーをどこで認証しますか?また、明確にするために、デバイス間でデータが保持されるわけではありません。 Firebaseにデータが存在し、FirebaseはFirebaseデータを監視するデバイス間でデータを有効にして同期化します。 – Jay
ちょっと@Jay、私はダッシュボードにログインし、データの存在を確認しました。ユーザーと投稿の関係は「リセット」されているだけです。そして、私のcreateFirebaseUserはログインコントローラではありませんが、Firebase Data Servicesに使用する別のファイルにあります。 –