java - 尝试检查首次 Firebase 登录
问题描述
我的应用使用 Firebase 的 AuthUi 对用户进行身份验证。因为我希望他们拥有唯一的用户名,所以我试图创建第二个活动,允许他们创建唯一的 ID,但前提是这是他们第一次登录应用程序。我正在尝试对照 getLastSignInTimestamp 检查 getCreationTimeStamp 以实现此目的。无论他们是否是第一次登录,以下代码都会将他们发送到用户名创建屏幕:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == FB_AUTH_SIGN_IN) {
IdpResponse response = IdpResponse.fromResultIntent(data);
if (resultCode == RESULT_OK) {
FirebaseUserMetadata metadata = user.getMetadata();
if (metadata.getCreationTimestamp() == metadata.getLastSignInTimestamp()) {
Intent intent = new Intent(ChatListActivity.this, ChooseUsername.class);
startActivity(intent);
} else {
launchPlacePicker();
}
我对这些元数据方法有误解吗?有没有更好的方法来实现我想要做的事情?
解决方案
您可以使用这段代码来确认应用程序首次在设备上运行。
但是,每次用户卸载然后重新安装应用程序以启动时,都会执行此操作。
boolean firstRun = getSharedPreferences("PREFERENCE", MODE_PRIVATE).getBoolean("firstrun", true);
if (firstRun){
// do what you want to do for the first time user interacting with your app
getSharedPreferences("PREFERENCE", MODE_PRIVATE).edit().putBoolean("firstrun", false).apply();
}
而且,如果您想为用户提供永久的东西。我建议您在您的 Firebase 数据库中为此在您的用户字段中创建一个特殊节点。
您可以将其设置为true
仅当用户创建新 ID 时,然后删除节点或将值设置为false
之后永远。
推荐阅读
- http - 如何通过 xbee 3g 调制解调器发送/接收 POST 请求,通过串口用 arduino 控制
- asterisk - Asterisk - 使用铃声在会议内拨打电话
- angular - 在 Angular api 服务中安全处理深度嵌套和复杂的 json 对象
- css - CSS根据文本宽度定位文本
- javascript - 如何正确实现带id的路由?
- django - Heroku-postgress 中与数据库的连接太多
- javascript - React Javascript - 复制的对象不包含任何更改
- azure - 如何以编程方式确定 Azure DSC 扩展的设置字符串
- php - 从函数返回特定的数组形式
- android - 我对响应式布局使用 ConstraintLayout 有问题