首页 > 解决方案 > 用户注册 Firebase 电子邮件身份验证时,是否可以在数据库中获取并保存用户设备详细信息?

问题描述

我正在创建一个 Firebase 注册活动,其中包含电子邮件和密码以外的自定义字段,我将其与他们受人尊敬的用户 ID 一起存储。但我想知道是否有任何方法可以收集用户设备的详细信息,例如用户用于注册并保存这些详细信息的设备的设备型号、制造商、操作系统等(仅在第一次注册时)在数据库中使用他们尊重的用户 ID?这样我就可以稍后在用户使用什么设备注册时获取用户的信息。

像下面这样的东西?

public class SignUpActivity extends AppCompatActivity implements View.OnClickListener {

    private EditText editTextName, editTextEmail, editTextPassword, editTextAddress, editTextDeviceModel, editTextOS;
    private FirebaseAuth mAuth;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_signup);

        editTextName = findViewById(R.id.edit_text_name);
        editTextEmail = findViewById(R.id.edit_text_email);
        editTextPassword = findViewById(R.id.edit_text_password);
        editTextAddress = findViewById(R.id.edit_text_address);

        //Here are the hidden fields that might hold the device info
        editTextDeviceModel = findViewById(R.id.device_model);
        editTextOS = findViewById(R.id.device_os);
        editTextDeviceModel.setVisibility(View.GONE);
        editTextOS.setVisibility(View.GONE);

        mAuth = FirebaseAuth.getInstance();
    }

    private void registerUser() {
        final String name = editTextName.getText().toString().trim();
        final String email = editTextEmail.getText().toString().trim();
        final String password = editTextPassword.getText().toString().trim();

        mAuth.createUserWithEmailAndPassword(email, password)
            .addOnCompleteListener(new OnCompleteListener < AuthResult > () {
                @Override
                public void onComplete(@NonNull Task < AuthResult > task) {

                    if (task.isSuccessful()) {
                        User user = new User(
                            name,
                            email,
                            address,
                            deviceModel,
                            os
                        );

                        FirebaseDatabase.getInstance().getReference("Users")
                            .child(FirebaseAuth.getInstance().getCurrentUser().getUid())
                            .setValue(user).addOnCompleteListener(new OnCompleteListener < Void > () {
                                @Override
                                public void onComplete(@NonNull Task < Void > task) {
                                    progressBar.setVisibility(View.GONE);
                                    if (task.isSuccessful()) {
                                        Toast.makeText(SignUpActivity.this, "Registration Successful", Toast.LENGTH_LONG).show();
                                    } else {
                                        Toast.makeText(SignUpActivity.this, "Not successful", Toast.LENGTH_LONG).show();
                                    }
                                }
                            });

                    } else {
                        Toast.makeText(SignUpActivity.this, task.getException().getMessage(), Toast.LENGTH_LONG).show();
                    }
                }
            });

    }

}

这是User

public class User {
    public String name, email, address, deviceModel, os;

    public User() {
    }

    public User(String name, String email, String address, String deviceModel, String os) {
        this.name = name;
        this.email = email;
        this.address = address;
        //this.deviceModel = ???????;
        //this.os = ????;
    }
}

标签: androidfirebasefirebase-realtime-database

解决方案


要解决这个问题,您需要更改以下代码行:

//this.deviceModel = ???????;
//this.os = ????;

this.deviceModel = deviceModel;
this.os = os;

要获取设备型号和操作系统,请使用以下代码行:

String deviceModel = Build.MANUFACTURER + " " + Build.MODEL;
String os = "Android";

由于您的应用在 Android 设备上运行,因此os始终是 Android。当您创建User类对象时,请使用以下代码行:

User user = new User(name, email, address, deviceModel, os);

最后,在您的数据库中,用户对象还将包含设备型号和操作系统。


推荐阅读