为个人用户组织Firebase数据库,想法?

时间:2018-02-16 17:15:45

标签: android firebase firebase-realtime-database firebase-authentication

在我的Android应用中,我已使用Firebase Auth程序实施了Google登录。 为:

private void signIn() {
    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
    startActivityForResult(signInIntent, SIGNIN_CODE);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == SIGNIN_CODE) {
        Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
        try {
            // Authenicate with my Firebase
            GoogleSignInAccount account = task.getResult(ApiException.class);
            ProgressDialog dialog = new ProgressDialog(this); //ProgressDialog.show(this, null, "Please wait while we load sign in..", true);
            dialog.setMessage("Please wait while we load sign in..");
            dialog.setIndeterminate(true);
            Drawable drawable = new ProgressBar(this).getIndeterminateDrawable().mutate();
            drawable.setColorFilter(ContextCompat.getColor(this, R.color.progress),
                                    PorterDuff.Mode.SRC_IN);
            dialog.setIndeterminateDrawable(drawable);
            dialog.show();

            firebaseAuthWithGoogle(account);
        } catch (ApiException e) {
            // Google Sign In failed?
            Log.w(TAG, "Google sign in failed", e);
        }
    }
} //A lot more stuffs etc etc..

我已经有了一个SQlite离线数据库。现在只有登录用户,我希望用户可以将SQlite数据库的内容与firebase数据库同步,用户可以在线访问/同步。

但是如何为具有UID等的个人登录用户组织单个firebase数据库。?

更具体的建议/教程会很好:)

2 个答案:

答案 0 :(得分:1)

可以这样做,您需要限制对数据的访问,以便每个用户只能通过定义如下的firebase安全规则来访问他/她的数据。

service cloud.firestore {
  match /databases/{database}/documents {
    match /yourrootnode/{uid} {
      allow read, write: if request.auth.uid == uid;
    }
}

保存来自app的用户特定数据,如下所示,此处dataModelObj对象应包含uid字段,您需要从用户对象填充它,如dataModelObj .setUid(user.getUid());

  firestoreDB.collection("yourrootnode")
            .add(dataModelObj)
            .addOnSuccessListener(new OnSuccessListener<DocumentReference>() {

.....

然后你就可以在app中只读取用户数据了。

 firestoreDB.collection("yourrootnode")
                .whereEqualTo("uid", user.getUid())
                .get()
                .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
            ....
        } 

有关详细信息,请查看http://www.zoftino.com/android-firebase-email-password-authentication

答案 1 :(得分:0)

您无法为每个用户创建单独的数据库,但您可以为多个用户组织单个数据库。为用户预留数据库节点是常规的,并使用Firebase身份验证中的UID为每个用户创建一个空间。

例如,用户的数据库部分可以这样组织:

/users
    /uid1
        /name
    /uid2
        /name

然后,您需要使用user based security rules保护每用户数据。