使用Firebase进行Android应用注册和登录的最佳方法是什么?

时间:2016-03-14 15:29:55

标签: java android firebase firebase-authentication firebase-realtime-database

首先,我单独尝试为我的应用程序制作一个简单的注册码,它起作用了:

public class MainActivity extends AppCompatActivity {
private static final String FIREBASE_URL="https://***.firebaseio.com/";
private Firebase firebaseRef;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Firebase.setAndroidContext(this);
    firebaseRef = new Firebase(FIREBASE_URL);





    findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {


        @Override
        public void onClick(View view) {
            EditText fullname=(EditText)findViewById(R.id.full_name);
            EditText email=(EditText)findViewById(R.id.mail);
            EditText restname=(EditText)findViewById(R.id.rest_name);
            EditText phonenum=(EditText)findViewById(R.id.phone_num);
            EditText userpass=(EditText)findViewById(R.id.user_pass);
            EditText personalcode=(EditText)findViewById(R.id.personal_code);
            String full_name=fullname.getText().toString();
            String mail=email.getText().toString();
            String rest_name=restname.getText().toString();
            String phone_num=phonenum.getText().toString();
            String user_pass=userpass.getText().toString();
            String personal_code=personalcode.getText().toString();

           if(full_name!=""&&mail!=""&&rest_name!=""&&phone_num!=""&&user_pass!=""&&personal_code!="")
            {
               UserClass user= new UserClass(full_name,mail,rest_name,phone_num,user_pass,personal_code);
                firebaseRef.push().setValue(user);
                fullname.setText("");
                email.setText("");
                clubname.setText("");
                phonenum.setText("");
                userpass.setText("");
                personalcode.setText("");
                Toast.makeText(MainActivity.this,"Account Inserted",Toast.LENGTH_LONG).show();
            }

        }
    });

}

正如我所说,它运作良好,并且信息已经很好地插入到Firebase数据库中。

但我发现登录部分存在问题。我无法找到任何指南,说明如何使用我在上面编写的注册码插入到Firebase数据库中的信息进行登录。

你建议我做什么?我是否建议使用注册码的方式? 如果是 - 我应该如何编写登录页面? 如果不是 - 使用Firebase进行注册或登录Android应用程序的最佳方法是什么?

非常感谢!

2 个答案:

答案 0 :(得分:1)

日志和商店用户数据之间存在差异。您可以在使用创建用户Firebase的方法后立即保存用户数据。

ref.createUser(email, pass, new Firebase.ValueResultHandler<Map<String, Object>>() {
     @Override
     public void onSuccess(Map<String, Object> result) {
         System.out.println("Successfully created user account with uid: " + result.get("uid"));


        // read data ...

        // save user data
        Map<String, String> map = new HashMap<String, String>();
        map.put("provider", authData.getProvider());
        map.put("genre", genre);
        map.put("birthDate", birthDate);
        map.put("name", name);

        ref.child("users").child(result.get("uid")).setValue(map);
     }

     @Override
     public void onError(FirebaseError firebaseError) {
         // there was an error
     }
});

然后您可以使用以下功能Firebase登录。

ref.authWithPassword(email, pass, authResultHandler);

答案 1 :(得分:0)

对于你来说,我有一个最好的方法:

  1. 第一步:您仍然按上述代码插入用户信息。
  2. 同时(在插入用户infor之后)你必须使用firebaseRef.createUser(..)来传递用户名和密码以将你的用户帐户注册到firebase客户经理
  3. 前:

    firebaseRef.createUser("username or email here", "user password here", new Firebase.ValueResultHandler<Map<String, Object>>() {
        @Override
        public void onSuccess(Map<String, Object> result) {
            System.out.println("Successfully created user account with uid: " + result.get("uid"));
           //You can push(...) your user informaton here (which same username or email as primerykey)
        }
        @Override
        public void onError(FirebaseError firebaseError) {
            // there was an error
        }
    });
    

    然后您可以使用以下代码帮助用户登录:

    firebaseRef.authWithPassword("username or email registered", "registerd password", 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
        }
    });