用户只能通过设备

时间:2017-10-04 01:38:32

标签: android firebase firebase-authentication

用户是否只能通过设备创建帐户?如果他尝试从设备创建2个帐户,将显示警告对话框?

我想通过获取设备ID来使用数据库。但任何人都可以详细告诉我吗?

1 个答案:

答案 0 :(得分:0)

您必须选择A& A提供商(身份验证和授权)。 当然,如果你选择的话,你可以自己管理它。

Firebase是一个很好的免费选项。 只需编写屏幕即可收集用户信息并提供登录屏幕。然后使用firebase API注册用户并登录。

另一个不错的选择是AWS上的Cognito,但需要更多地了解AWS然后Firebase,所以我想说对于A& A流程较新的人来说,firebase更容易。

如果您不想管理登录,您可以获取设备广告商ID并将其存储为userId,以便它只注册设备一次,但是如果用户确实想跳过所有设备,则会收到警告箍,他们可以从他们的谷歌设置重置它,但是,任何人都不太可能甚至不知道它是怎么回事。 Android唯一ID不再可以使用设备ID或电话ID。

因此,为了确保他们无法使用相同的电子邮件登录新设备,只需使用用户名或电子邮件存储设备的广告商ID即可。

然后确保在后续登录时始终确认advertiserID以及用户名/密码,然后再继续操作。您可以先验证用户/通行证,然后再继续验证用户/广告客户ID或其他订单。无论你喜欢什么。

AdvertisingIdClient.getAdvertisingIdInfo(getApplicationContext()).getId();

好的,所以你的LoginScreen有一个登录按钮

btnLogin_onClick(){
    validateSingleAccountForDevice(false);

}
btnCreateAccount_onClick(){
    validateSingleAccountForDevice(true);

}
validateSingleAccountForDevice(final boolean isCreatingAccount){
    String id = AdvertisingIdClient.getAdvertisingIdInfo(getApplicationContext()).getId();
    String username = txtEmail.getText.toString();
    new ValidateSingleDeviceForEmailAsyncTask(){
          protected void onPostExecute(successModel model){
               if(model.isSuccess){
                    if(isCreatingAccount){
                        attemptCreateAccount();
                    }else{
                        attemptLogin();
                    }
               }else{
                    showAlertDialogOfAccountAlreadyUsedOnAnotherDevice();
               }
          }   
    };
}
private void attemptLogin(){
    String username = txtEmail.getText.toString();
    String password = txtPassword.getText.toString();
    new LoginWithUserPass(username, password){
          protected void onPostExecute(successModel model){
               if(model.isSuccess){
                    moveToLandingPage();
               }else{
                    showAlertOfFailedLogin();
               }
          }   
    };
}
private void createAccount(){
     String username = txtEmail.getText.toString();
    String password = txtPassword.getText.toString();
    new CreateAccountForUser(username, password){
          protected void onPostExecute(successModel model){
               if(model.isSuccess){
                    moveToLandingPage(); //or MFA if using
               }else{
                    showAlertOfFailedCreate();
               }
          }   
    };
}

这一切都有意义吗?

这些asyncTask是“makeup”让你自己做一个Async调用一个restful API来验证电子邮件与设备和你自己的登录。你的问题不是“我如何编写AsyncTask或如何记录用户,所以我没有提供asyncTasks到那些东西,因为你没有提供足够的信息让我甚至做到这一点,加上这不是目标我的回答。

我只是给出了一个例子,说明如果你编写代码来命中API并返回Asynctask内部会是什么样子。如果您不熟悉异步任务,请做一些研究,这不是您的全功能软件解决方案。