android - 用户注册 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 = ????;
}
}
解决方案
要解决这个问题,您需要更改以下代码行:
//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);
最后,在您的数据库中,用户对象还将包含设备型号和操作系统。
推荐阅读
- javascript - 如何把它变成一个承诺?
- https - AWS CloudFormation Application Load Balancer - 如何将 HTTP 侦听器重定向到 HTTPS 侦听器?
- python-3.x - 如何在没有语法形式的情况下获取 nltk 树的节点?
- javascript - 遍历多级数组
- javascript - Chrome:你能打印出最小化的堆栈跟踪吗?
- vba - 如何按单元格值创建文件夹?
- c# - Regedit 表达式特殊字符
- ssh - ssh 公钥指纹不匹配。中间人攻击?
- sql - 如何从特定时间范围查询更改跟踪
- gmail - 如何向我的 300 多个用户大量添加 Gmail API 权限?