如何从android上的firebase获取用户uid?

Posted

技术标签:

【中文标题】如何从android上的firebase获取用户uid?【英文标题】:How to get user uid from firebase on android? 【发布时间】:2016-09-30 17:14:14 【问题描述】:

我想将数据保存到 Firebase。这是我的活动代码:

private Firebase firebaseRef;
Firebase.setandroidContext(this);

try 
    mUserId = firebaseRef.getAuth().getUid();
 catch (Exception e) 
    //  loginWithMailView();

itemsUrl = Constants.FIREBASE_URL + "/Person/" + mUserId +"/Information/";

//Person + null (?) + the other information

这是我的按钮代码:

buttonSave = (Button) findViewById(R.id.btnKaydolKayit);
buttonSave.setOnClickListener(new View.OnClickListener() 

    @Override
    public void onClick(View v) 
        firebaseRef = new Firebase(Constants.FIREBASE_URL);
        String name = editTextName.getText().toString().trim();
        String surname = editTextSurname.getText().toString().trim();
        String gender = final_result.getText().toString();
        String mail = editTextMail.getText().toString();
        String pass = editTextPass.getText().toString().trim();
        String phone = editTextPhone.getText().toString().trim();
        String trom = final_resultT.getText().toString();
        String bloodGroup = spinnerBlood.getSelectedItem().toString();
        String dateBlood = dateTextViewBlood.getText().toString();
        String dateTrombo = dateTextViewTrom.getText().toString();

        if (pass.isEmpty() || mail.isEmpty()) 
            AlertDialog.Builder builder = new AlertDialog.Builder(KaydolActivity.this);
            builder.setMessage(R.string.signup_error_message)
                    .setTitle(R.string.signup_error_title)
                    .setPositiveButton(android.R.string.ok, null);
            AlertDialog dialog = builder.create();
            dialog.show();
         else 
            firebaseRef.createUser(mail, pass, new Firebase.ResultHandler()

                @Override
                public void onSuccess() 
                    firebaseRef = new Firebase(Constants.FIREBASE_URL);
                    //  firebaseRef.setValue();
                    AlertDialog.Builder builder = new AlertDialog.Builder(KaydolActivity.this);
                    builder.setMessage("Hesap başarılı bir şekilde oluşturuldu!").setPositiveButton(R.string.login_button_label, new DialogInterface.OnClickListener() 
                        @Override
                        public void onClick(DialogInterface dialogInterface, int i) 
                            Intent intent = new Intent(KaydolActivity.this, loginWithMail.class);
                            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                            intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
                            startActivity(intent);
                        
                    );
                    AlertDialog dialog = builder.create();
                    dialog.show();
                

                @Override
                public void onError(FirebaseError firebaseError) 
                    AlertDialog.Builder builder = new AlertDialog.Builder(KaydolActivity.this);
                    builder.setMessage(firebaseError.getMessage())
                            .setTitle(R.string.signup_error_title)
                            .setPositiveButton(android.R.string.ok, null);
                    AlertDialog dialog = builder.create();
                    dialog.show();
                
            );
        

        new Firebase(itemsUrl).push().child("name").setValue(name);
        new Firebase(itemsUrl).push().child("surname").setValue(surname);
        new Firebase(itemsUrl).push().child("gender").setValue(gender);
        new Firebase(itemsUrl).push().child("mail").setValue(mail);
        new Firebase(itemsUrl).push().child("pass").setValue(pass);
        new Firebase(itemsUrl).push().child("phone").setValue(phone);
        new Firebase(itemsUrl).push().child("trom").setValue(trom);
        new Firebase(itemsUrl).push().child("bloodGroup").setValue(bloodGroup);
        new Firebase(itemsUrl).push().child("trom").setValue(trom);
        new Firebase(itemsUrl).push().child("dateBlood").setValue(dateBlood);
        new Firebase(itemsUrl).push().child("dateTrombo").setValue(dateTrombo);
    
);

我的源代码(用于帮助/例如):https://www.sitepoint.com/creating-a-cloud-backend-for-your-android-app-using-firebase/

当我将数据保存到 firebase 时,如下图所示( Login&Auth )

但 mUserId 为空。所以当我查看数据库时 mUserid 为空(如照片)

【问题讨论】:

Firebase 最近进行了一次重大的 API 更改。所以最好升级你的 Firebase API。请参阅本指南以获取帮助:firebase.google.com/support/guides/firebase-android 你能在最初的try 块中Log 你的mUserId 看看有没有任何价值? 如果user没有登录Firebase会返回一个nulluserid 但我可以添加用户。只是我想获得用户ID。那么我该如何更改此代码:mUserId = firebaseRef.getAuth().getUid() (new google.firebase) @TalhaMir 您必须登录用户才能使用firebaseRef.getAuth().getUid()。否则,如果不完全下载节点 Person 并循环遍历它,您将无法知道特定用户的 UID 【参考方案1】:

您可以使用这些代码行通过 Android Firebase 框架获取当前用户 Uid

FirebaseUser currentFirebaseUser = FirebaseAuth.getInstance().getCurrentUser() ;
Toast.makeText(this, "" + currentFirebaseUser.getUid(), Toast.LENGTH_SHORT).show();

【讨论】:

【参考方案2】:

要获取当前用户 UID,只需要这行代码:

String currentuser = FirebaseAuth.getInstance().getCurrentUser().getUid();

【讨论】:

这是返回空值【参考方案3】:

问题在于,在 firebase 中,当您创建用户时,它不会登录该用户。这是来自文档:

使用提供的凭据创建新的电子邮件/密码用户。此方法不对用户进行身份验证。创建帐户后,可以使用 authWithPassword() 对用户进行身份验证。 https://www.firebase.com/docs/web/api/firebase/createuser.html

Firebase ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com");
    ref.authWithPassword(mail, pass, new Firebase.AuthResultHandler() 
        @Override
        public void onAuthenticated(AuthData authData) 
            System.out.println("User ID: " + authData.getUid() + ", Provider: " + authData.getProvider());
        
        @Override
        public void onAuthenticationError(FirebaseError firebaseError) 
            // there was an error
        
    );

因此,一旦创建了用户,就调用 authWithPassword 函数。希望对您有所帮助!

【讨论】:

使用 authObject.signInWithEmailAndPassword(EMAIL, PASSWORD);【参考方案4】:

在您的代码中,您的 firebaseRef 似乎为 null,因此导致 null uid,从 Firebase 获取用户 ID 的推荐方法是在用户登录后在您应用中的任何位置执行以下操作

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();

【讨论】:

【参考方案5】:

在 REACT NATIVE 中是这样的。

  import firebase as 'firebase';

    HandleGetUserId=()=>
    let userId = firebase.auth().currentUser.uid;
    return userId;
    

只要调用函数HandleGetUserId就可以得到这样的id

this.HandleGetUserId();

【讨论】:

【参考方案6】:

我在获取 uid 时也遇到了同样的问题。 当我将它打印在日志 (Log.i) 上时,我可以看到 uid,但是当尝试将其用作我正在创建的对象之一中的字段之一时,该字段不会被创建。

我在做的事情:String currentUId = FirebaseAuth.getInstance().getCurrentUser().getUid();

这对我来说效果不佳。

我找到的解决方案 - (对我有用 - 试试看)

使用:FirebaseUser currentU = FirebaseAuth.getInstance().getCurrentUser(); String uId = currentU.getUid();

【讨论】:

您试图解释的两种方法没有区别。

以上是关于如何从android上的firebase获取用户uid?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Android 应用程序中删除 Firebase 用户?

Android:从firebase获取当前日期和时间

如何从 Firebase 获取特定用户的用户名?

如何从firebase Android kotlin获取基于userId的数据?

如何从 Firebase android kotlin 获取所有具有特定价值的孩子?

Firebase Android - 如何随机获取一些项目[重复]