这是“在Android Studio上构建社交媒体应用程序”教程的第1部分,我们将在本文中介绍以下功能:
- 创建启动画面
- 认证部分:
- 注册,以及
- 登录
分步实施
步骤1:创建一个新项目
要在Android Studio中创建新项目,请参阅如何在Android Studio中创建/启动新项目。请注意,选择Java作为编程语言。
第2步:将您的应用连接到Firebase
转到“工具”>“ Firebase”>“身份验证”,然后将您的应用程序连接到Firebase,然后将Firebase身份验证SDK添加到您的应用程序中,如下图所示。
然后转到Firebase控制台>身份验证>登录方法,然后启用电子邮件/密码。
步骤3:建立4个新的空白活动
转到程序包名称>右键单击>新建>活动>空活动,并将活动命名为SpalshScreen , RegistrationActivity , LoginActivity和DashboardActivity 。您也可以参考本文“如何在android studio中创建新的空活动”。
步骤4:使用SpalshScreen活动
导航至应用程序> res>布局> activity_spalsh_screen.xml,然后将以下代码添加到该文件中。以下是activity_spalsh_screen.xml文件的代码。
XML
Java
package com.example.socialmediaapp;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import androidx.appcompat.app.AppCompatActivity;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
public class SpalshScreen extends AppCompatActivity {
FirebaseUser currentUser;
private FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_spalsh_screen);
mAuth = FirebaseAuth.getInstance();
if (mAuth != null) {
currentUser = mAuth.getCurrentUser();
}
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
FirebaseUser user = mAuth.getCurrentUser();
if (user == null) {
Intent intent = new Intent(SpalshScreen.this, LoginActivity.class);
startActivity(intent);
finish();
} else {
Intent mainIntent = new Intent(SpalshScreen.this, DashboardActivity.class);
mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(mainIntent);
finish();
}
}
}, 1000);
}
}
XML
Java
package com.example.socialmediaapp;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.util.Patterns;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import java.util.HashMap;
public class RegistrationActivity extends AppCompatActivity {
private EditText email, password, name;
private Button mRegister;
private TextView existaccount;
private ProgressDialog progressDialog;
private FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_registration);
ActionBar actionBar = getSupportActionBar();
actionBar.setTitle("Create Account");
actionBar.setDisplayShowHomeEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
email = findViewById(R.id.register_email);
name = findViewById(R.id.register_name);
password = findViewById(R.id.register_password);
mRegister = findViewById(R.id.register_button);
existaccount = findViewById(R.id.homepage);
mAuth = FirebaseAuth.getInstance();
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("Register");
mRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String emaill = email.getText().toString().trim();
String uname = name.getText().toString().trim();
String pass = password.getText().toString().trim();
if (!Patterns.EMAIL_ADDRESS.matcher(emaill).matches()) {
email.setError("Invalid Email");
email.setFocusable(true);
} else if (pass.length() < 6) {
password.setError("Length Must be greater than 6 character");
password.setFocusable(true);
} else {
registerUser(emaill, pass, uname);
}
}
});
existaccount.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(RegistrationActivity.this, LoginActivity.class));
}
});
}
private void registerUser(String emaill, final String pass, final String uname) {
progressDialog.show();
mAuth.createUserWithEmailAndPassword(emaill, pass).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()) {
progressDialog.dismiss();
FirebaseUser user = mAuth.getCurrentUser();
String email = user.getEmail();
String uid = user.getUid();
HashMap
XML
Java
package com.example.socialmediaapp;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.text.InputType;
import android.util.Patterns;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import java.util.HashMap;
public class LoginActivity extends AppCompatActivity {
private EditText email, password, name;
private Button mlogin;
private TextView newdnewaccount, reocverpass;
FirebaseUser currentUser;
private ProgressDialog loadingBar;
private FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
ActionBar actionBar = getSupportActionBar();
actionBar.setTitle("Create Account");
actionBar.setDisplayShowHomeEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
// initialising the layout items
email = findViewById(R.id.login_email);
password = findViewById(R.id.login_password);
newdnewaccount = findViewById(R.id.needs_new_account);
reocverpass = findViewById(R.id.forgetp);
mAuth = FirebaseAuth.getInstance();
mlogin = findViewById(R.id.login_button);
loadingBar = new ProgressDialog(this);
mAuth = FirebaseAuth.getInstance();
// checking if user is null or not
if (mAuth != null) {
currentUser = mAuth.getCurrentUser();
}
mlogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String emaill = email.getText().toString().trim();
String pass = password.getText().toString().trim();
// if format of email doesn't matches return null
if (!Patterns.EMAIL_ADDRESS.matcher(emaill).matches()) {
email.setError("Invalid Email");
email.setFocusable(true);
} else {
loginUser(emaill, pass);
}
}
});
// If new account then move to Registration Activity
newdnewaccount.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(LoginActivity.this, RegistrationActivity.class));
}
});
// Recover Your Password using email
reocverpass.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showRecoverPasswordDialog();
}
});
}
private void showRecoverPasswordDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Recover Password");
LinearLayout linearLayout = new LinearLayout(this);
final EditText emailet = new EditText(this);//write your registered email
emailet.setText("Email");
emailet.setMinEms(16);
emailet.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
linearLayout.addView(emailet);
linearLayout.setPadding(10, 10, 10, 10);
builder.setView(linearLayout);
builder.setPositiveButton("Recover", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String emaill = emailet.getText().toString().trim();
beginRecovery(emaill);//send a mail on the mail to recover password
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create().show();
}
private void beginRecovery(String emaill) {
loadingBar.setMessage("Sending Email....");
loadingBar.setCanceledOnTouchOutside(false);
loadingBar.show();
// send reset password email
mAuth.sendPasswordResetEmail(emaill).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
loadingBar.dismiss();
if (task.isSuccessful()) {
Toast.makeText(LoginActivity.this, "Done sent", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(LoginActivity.this, "Error Occured", Toast.LENGTH_LONG).show();
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
loadingBar.dismiss();
Toast.makeText(LoginActivity.this, "Error Failed", Toast.LENGTH_LONG).show();
}
});
}
private void loginUser(String emaill, String pass) {
loadingBar.setMessage("Logging In....");
loadingBar.show();
// sign in with email and password after authenticating
mAuth.signInWithEmailAndPassword(emaill, pass).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()) {
loadingBar.dismiss();
FirebaseUser user = mAuth.getCurrentUser();
if (task.getResult().getAdditionalUserInfo().isNewUser()) {
String email = user.getEmail();
String uid = user.getUid();
HashMap
XML
XML
#CC2E76BE
#CC073D74
#0A527E
#000000
#fff
#F5F1F1
#959595
#f5f0f0
#17581A
#F4511E
#E61313
#2CA7E0
#0a1b97
#2B2C2E
使用SpalshScreen。 Java文件。在这里,我们正在检查用户是否为null,然后转到LoginActivity 。否则,请移至DashboardActivity。
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
FirebaseUser user=mAuth.getCurrentUser();
if(user==null){
Intent intent = new Intent(SpalshScreen.this, LoginActivity.class);
startActivity(intent);
finish();
}
else {
Intent mainIntent= new Intent(SpalshScreen.this, DashboardActivity.class);
mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(mainIntent);
finish();
}
}
},1000);
下面是SpalshScreen的代码。 Java文件。
Java
package com.example.socialmediaapp;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import androidx.appcompat.app.AppCompatActivity;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
public class SpalshScreen extends AppCompatActivity {
FirebaseUser currentUser;
private FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_spalsh_screen);
mAuth = FirebaseAuth.getInstance();
if (mAuth != null) {
currentUser = mAuth.getCurrentUser();
}
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
FirebaseUser user = mAuth.getCurrentUser();
if (user == null) {
Intent intent = new Intent(SpalshScreen.this, LoginActivity.class);
startActivity(intent);
finish();
} else {
Intent mainIntent = new Intent(SpalshScreen.this, DashboardActivity.class);
mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(mainIntent);
finish();
}
}
}, 1000);
}
}
步骤5:使用RegistrationActivity活动
导航到应用程序> res>布局> activity_registration.xml,然后将以下代码添加到该文件中。以下是activity_registration.xml文件的代码。在这里,我们为名称,电子邮件和密码创建了三个EditText,并为注册用户创建了一个Button 。
XML格式
使用RegistrationActivity。 Java文件。使用用户编写的电子邮件和密码创建用户。如果失败,那么我们将显示错误。
mAuth.createUserWithEmailAndPassword(emaill, pass).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()){
progressDialog.dismiss();
}
else {
progressDialog.dismiss();
Toast.makeText(RegistrationActivity.this,"Error",Toast.LENGTH_LONG).show();
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
progressDialog.dismiss();
Toast.makeText(RegistrationActivity.this,"Error Occured",Toast.LENGTH_LONG).show();
}
});
下面是RegistrationActivity的代码。 Java文件。
Java
package com.example.socialmediaapp;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.util.Patterns;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import java.util.HashMap;
public class RegistrationActivity extends AppCompatActivity {
private EditText email, password, name;
private Button mRegister;
private TextView existaccount;
private ProgressDialog progressDialog;
private FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_registration);
ActionBar actionBar = getSupportActionBar();
actionBar.setTitle("Create Account");
actionBar.setDisplayShowHomeEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
email = findViewById(R.id.register_email);
name = findViewById(R.id.register_name);
password = findViewById(R.id.register_password);
mRegister = findViewById(R.id.register_button);
existaccount = findViewById(R.id.homepage);
mAuth = FirebaseAuth.getInstance();
progressDialog = new ProgressDialog(this);
progressDialog.setMessage("Register");
mRegister.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String emaill = email.getText().toString().trim();
String uname = name.getText().toString().trim();
String pass = password.getText().toString().trim();
if (!Patterns.EMAIL_ADDRESS.matcher(emaill).matches()) {
email.setError("Invalid Email");
email.setFocusable(true);
} else if (pass.length() < 6) {
password.setError("Length Must be greater than 6 character");
password.setFocusable(true);
} else {
registerUser(emaill, pass, uname);
}
}
});
existaccount.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(RegistrationActivity.this, LoginActivity.class));
}
});
}
private void registerUser(String emaill, final String pass, final String uname) {
progressDialog.show();
mAuth.createUserWithEmailAndPassword(emaill, pass).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()) {
progressDialog.dismiss();
FirebaseUser user = mAuth.getCurrentUser();
String email = user.getEmail();
String uid = user.getUid();
HashMap
步骤6:使用LoginActivity活动
导航至应用程序> res>布局> activity_login.xml,然后将以下代码添加到该文件中。以下是activity_login.xml文件的代码。在这里,我们为电子邮件和密码创建了两个EditText,并为登录创建了一个按钮。
XML格式
使用LoginActivity。 Java文件。使用用户编写的电子邮件和密码登录用户。如果失败,那么我们将显示错误。
mAuth.signInWithEmailAndPassword(emaill, pass).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()) {
loadingBar.dismiss();
}
else {
loadingBar.dismiss();
Toast.makeText(LoginActivity.this,"Login Failed",Toast.LENGTH_LONG).show();
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
loadingBar.dismiss();
Toast.makeText(LoginActivity.this,"Error Occured",Toast.LENGTH_LONG).show();
}
});
下面是LoginActivity的代码。 Java文件。
Java
package com.example.socialmediaapp;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.text.InputType;
import android.util.Patterns;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import java.util.HashMap;
public class LoginActivity extends AppCompatActivity {
private EditText email, password, name;
private Button mlogin;
private TextView newdnewaccount, reocverpass;
FirebaseUser currentUser;
private ProgressDialog loadingBar;
private FirebaseAuth mAuth;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
ActionBar actionBar = getSupportActionBar();
actionBar.setTitle("Create Account");
actionBar.setDisplayShowHomeEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
// initialising the layout items
email = findViewById(R.id.login_email);
password = findViewById(R.id.login_password);
newdnewaccount = findViewById(R.id.needs_new_account);
reocverpass = findViewById(R.id.forgetp);
mAuth = FirebaseAuth.getInstance();
mlogin = findViewById(R.id.login_button);
loadingBar = new ProgressDialog(this);
mAuth = FirebaseAuth.getInstance();
// checking if user is null or not
if (mAuth != null) {
currentUser = mAuth.getCurrentUser();
}
mlogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String emaill = email.getText().toString().trim();
String pass = password.getText().toString().trim();
// if format of email doesn't matches return null
if (!Patterns.EMAIL_ADDRESS.matcher(emaill).matches()) {
email.setError("Invalid Email");
email.setFocusable(true);
} else {
loginUser(emaill, pass);
}
}
});
// If new account then move to Registration Activity
newdnewaccount.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(LoginActivity.this, RegistrationActivity.class));
}
});
// Recover Your Password using email
reocverpass.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showRecoverPasswordDialog();
}
});
}
private void showRecoverPasswordDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Recover Password");
LinearLayout linearLayout = new LinearLayout(this);
final EditText emailet = new EditText(this);//write your registered email
emailet.setText("Email");
emailet.setMinEms(16);
emailet.setInputType(InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
linearLayout.addView(emailet);
linearLayout.setPadding(10, 10, 10, 10);
builder.setView(linearLayout);
builder.setPositiveButton("Recover", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
String emaill = emailet.getText().toString().trim();
beginRecovery(emaill);//send a mail on the mail to recover password
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create().show();
}
private void beginRecovery(String emaill) {
loadingBar.setMessage("Sending Email....");
loadingBar.setCanceledOnTouchOutside(false);
loadingBar.show();
// send reset password email
mAuth.sendPasswordResetEmail(emaill).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
loadingBar.dismiss();
if (task.isSuccessful()) {
Toast.makeText(LoginActivity.this, "Done sent", Toast.LENGTH_LONG).show();
} else {
Toast.makeText(LoginActivity.this, "Error Occured", Toast.LENGTH_LONG).show();
}
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
loadingBar.dismiss();
Toast.makeText(LoginActivity.this, "Error Failed", Toast.LENGTH_LONG).show();
}
});
}
private void loginUser(String emaill, String pass) {
loadingBar.setMessage("Logging In....");
loadingBar.show();
// sign in with email and password after authenticating
mAuth.signInWithEmailAndPassword(emaill, pass).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()) {
loadingBar.dismiss();
FirebaseUser user = mAuth.getCurrentUser();
if (task.getResult().getAdditionalUserInfo().isNewUser()) {
String email = user.getEmail();
String uid = user.getUid();
HashMap
步骤7:使用AndroidManifest.xml文件
导航到AndroidManifest.xml文件,并添加以下权限以在应用程序中获得Internet权限。
另外,使SpalshScreen Acticty作为欢迎屏幕。参考以下代码
以下是AndroidManifest.xml文件的完整代码。
XML格式
步骤8:使用colors.xml文件
转到应用程序> res>值> colors.xml文件,然后使用以下颜色
XML格式
#CC2E76BE
#CC073D74
#0A527E
#000000
#fff
#F5F1F1
#959595
#f5f0f0
#17581A
#F4511E
#E61313
#2CA7E0
#0a1b97
#2B2C2E
输出:
登记:
登录:
成功通过身份验证后,管理员可以在Firebase控制台中看到用户,如下所示
有关本文中使用的所有可绘制文件,请参考以下链接: https : //drive.google.com/drive/folders/1M_knOH_ugCuwSP5nkYzeD4dRp-Honzbe?usp=sharing
下面是执行这些操作后的文件结构:
Note: In this part, there is nothing to do with the DashboardActivity.