- Get link
- X
- Other Apps
- Get link
- X
- Other Apps
In this blog, I am going to provide you source code for the Phone Authentication App using Firebase in Android Studio. The Youtube video link to the tutorial is below:
There are two activities MainActivity.class and HomeActivity.class.
build.gradle (App level) dependencies
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test:runner:1.3.0'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
implementation 'com.google.android.gms:play-services-auth:19.0.0'
implementation 'com.github.bumptech.glide:glide:4.12.0'
annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'
}
The code snippet for MainActivity.class is below
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.FirebaseException;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.PhoneAuthCredential;
import com.google.firebase.auth.PhoneAuthOptions;
import com.google.firebase.auth.PhoneAuthProvider;
import java.lang.annotation.Native;
import java.util.concurrent.TimeUnit;
public class MainActivity extends AppCompatActivity {
EditText phone, otp;
Button btngenOTP, btnverify;
FirebaseAuth mAuth;
String verificationID;
ProgressBar bar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
phone = findViewById(R.id.phone);
otp = findViewById(R.id.otp);
btngenOTP = findViewById(R.id.btngenerateOTP);
btnverify =findViewById(R.id.btnverifyOTP);
mAuth = FirebaseAuth.getInstance();
bar = findViewById(R.id.bar);
btngenOTP.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
if(TextUtils.isEmpty(phone.getText().toString()))
{
Toast.makeText(MainActivity.this, "Enter Valid Phone No.", Toast.LENGTH_SHORT).show();
}
else {
String number = phone.getText().toString();
bar.setVisibility(View.VISIBLE);
sendverificationcode(number);
}
}
});
btnverify.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
if(TextUtils.isEmpty(otp.getText().toString()))
{
Toast.makeText(MainActivity.this, "Wrong OTP Entered", Toast.LENGTH_SHORT).show();
}
else
verifycode(otp.getText().toString());
}
});
}
private void sendverificationcode(String phoneNumber)
{
PhoneAuthOptions options =
PhoneAuthOptions.newBuilder(mAuth)
.setPhoneNumber("+91"+phoneNumber) // Phone number to verify
.setTimeout(60L, TimeUnit.SECONDS) // Timeout and unit
.setActivity(this) // Activity (for callback binding)
.setCallbacks(mCallbacks) // OnVerificationStateChangedCallbacks
.build();
PhoneAuthProvider.verifyPhoneNumber(options);
}
private PhoneAuthProvider.OnVerificationStateChangedCallbacks
mCallbacks = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
@Override
public void onVerificationCompleted(@NonNull PhoneAuthCredential credential)
{
final String code = credential.getSmsCode();
if(code!=null)
{
verifycode(code);
}
}
@Override
public void onVerificationFailed(@NonNull FirebaseException e) {
Toast.makeText(MainActivity.this, "Verification Failed", Toast.LENGTH_SHORT).show();
}
@Override
public void onCodeSent(@NonNull String s,
@NonNull PhoneAuthProvider.ForceResendingToken token)
{
super.onCodeSent(s, token);
verificationID = s;
Toast.makeText(MainActivity.this, "Code sent", Toast.LENGTH_SHORT).show();
btnverify.setEnabled(true);
bar.setVisibility(View.INVISIBLE);
}};
private void verifycode(String Code)
{
PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationID,Code);
signinbyCredentials(credential);
}
private void signinbyCredentials(PhoneAuthCredential credential)
{
FirebaseAuth firebaseAuth = FirebaseAuth.getInstance();
firebaseAuth.signInWithCredential(credential)
.addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task)
{
if(task.isSuccessful())
{
Toast.makeText(MainActivity.this, "Login Successfull", Toast.LENGTH_SHORT).show();
startActivity(new Intent(MainActivity.this, HomeActivity.class));
}
}
});}
@Override
protected void onStart() {
super.onStart();
FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
if(currentUser!=null)
{
startActivity(new Intent(MainActivity.this, HomeActivity.class));
finish();
}}}
The code snippet for HomeActivity.class is below:
package com.example.firebasephoneactivity;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import com.google.firebase.auth.FirebaseAuth;
public class HomeActivity extends AppCompatActivity {
FirebaseAuth mAuth;
Button logout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
mAuth = FirebaseAuth.getInstance();
logout = findViewById(R.id.logout);
logout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mAuth.signOut();
startActivity(new Intent(HomeActivity.this, MainActivity.class));
finish();
}
});}}
The code snippet for activity_main.xml is below
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:layout_margin="10dp">
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Enter Your Phone No."
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
android:textSize="20dp"
android:layout_centerHorizontal="true"/>
<EditText
android:id="@+id/phone"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Phone No."
android:inputType="phone"
android:layout_marginBottom="20dp"
android:layout_below="@id/text"/>
<Button
android:id="@+id/btngenerateOTP"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/phone"
android:layout_marginBottom="20dp"
android:text="Generate OTP"
android:textSize="20dp"/>
<EditText
android:id="@+id/otp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="OTP"
android:inputType="number"
android:layout_marginBottom="20dp"
android:layout_below="@id/btngenerateOTP"/>
<Button
android:id="@+id/btnverifyOTP"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/otp"
android:layout_marginBottom="20dp"
android:text="Verify OTP"
android:textSize="20dp"
android:enabled="false"/>
<ProgressBar
android:id="@+id/bar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/btnverifyOTP"
android:layout_centerHorizontal="true"
android:visibility="invisible"/>
</RelativeLayout>
The code snippet for activity_home.xml is below
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".HomeActivity"
android:layout_margin="10dp">
<TextView
android:id="@+id/textwelcome"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20dp"
android:text="Welcome to the Dashboard"
android:gravity="center"
android:layout_marginTop="20dp"
android:layout_marginBottom="20dp"
/>
<Button
android:id="@+id/logout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/textwelcome"
android:text="Logout"
/>
</RelativeLayout>
Comments
Post a Comment