├── .gitignore ├── .idea ├── caches │ └── build_file_checksums.ser ├── codeStyles │ └── Project.xml ├── gradle.xml ├── misc.xml ├── runConfigurations.xml └── vcs.xml ├── app ├── .gitignore ├── build.gradle ├── google-services.json ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── net │ │ └── simplifiedcoding │ │ └── firebasephoneauth │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── net │ │ │ └── simplifiedcoding │ │ │ └── firebasephoneauth │ │ │ ├── CountryData.java │ │ │ ├── MainActivity.java │ │ │ ├── ProfileActivity.java │ │ │ └── VerifyPhoneActivity.java │ └── res │ │ ├── drawable-v24 │ │ └── ic_launcher_foreground.xml │ │ ├── drawable │ │ ├── ic_launcher_background.xml │ │ ├── ic_logo.xml │ │ ├── ic_phone.xml │ │ └── waves.png │ │ ├── layout │ │ ├── activity_main.xml │ │ ├── activity_profile.xml │ │ └── activity_verify_phone.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ └── values │ │ ├── colors.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── test │ └── java │ └── net │ └── simplifiedcoding │ └── firebasephoneauth │ └── ExampleUnitTest.java ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/libraries 5 | /.idea/modules.xml 6 | /.idea/workspace.xml 7 | .DS_Store 8 | /build 9 | /captures 10 | .externalNativeBuild 11 | -------------------------------------------------------------------------------- /.idea/caches/build_file_checksums.ser: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/probelalkhan/firebase-phone-authentication/23ac70865b3c5178decafcbc660ce0950fba2ef3/.idea/caches/build_file_checksums.ser -------------------------------------------------------------------------------- /.idea/codeStyles/Project.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 15 | 16 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 17 | 18 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 17 | 27 | 28 | 29 | 30 | 31 | 32 | 34 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 27 5 | defaultConfig { 6 | applicationId "net.simplifiedcoding.firebasephoneauth" 7 | minSdkVersion 15 8 | targetSdkVersion 27 9 | versionCode 1 10 | versionName "1.0" 11 | testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" 12 | } 13 | buildTypes { 14 | release { 15 | minifyEnabled false 16 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 17 | } 18 | } 19 | } 20 | 21 | dependencies { 22 | implementation fileTree(dir: 'libs', include: ['*.jar']) 23 | implementation 'com.android.support:appcompat-v7:27.1.1' 24 | implementation 'com.android.support.constraint:constraint-layout:1.1.1' 25 | implementation 'com.googlecode.libphonenumber:libphonenumber:8.9.7' 26 | implementation 'com.google.firebase:firebase-auth:11.6.0' 27 | testImplementation 'junit:junit:4.12' 28 | androidTestImplementation 'com.android.support.test:runner:1.0.2' 29 | androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' 30 | } 31 | 32 | apply plugin: 'com.google.gms.google-services' 33 | -------------------------------------------------------------------------------- /app/google-services.json: -------------------------------------------------------------------------------- 1 | { 2 | "project_info": { 3 | "project_number": "1093675965929", 4 | "firebase_url": "https://mywallpaperapp-4d06e.firebaseio.com", 5 | "project_id": "mywallpaperapp-4d06e", 6 | "storage_bucket": "mywallpaperapp-4d06e.appspot.com" 7 | }, 8 | "client": [ 9 | { 10 | "client_info": { 11 | "mobilesdk_app_id": "1:1093675965929:android:02a45889c4721757", 12 | "android_client_info": { 13 | "package_name": "net.simplifiedcoding.firebasephoneauth" 14 | } 15 | }, 16 | "oauth_client": [ 17 | { 18 | "client_id": "1093675965929-kpim5k3rj79ksc8fobr2d60qv225iffb.apps.googleusercontent.com", 19 | "client_type": 1, 20 | "android_info": { 21 | "package_name": "net.simplifiedcoding.firebasephoneauth", 22 | "certificate_hash": "77dc894b24bbb0b1a0244af0b95a1e730ef6ba90" 23 | } 24 | }, 25 | { 26 | "client_id": "1093675965929-ho3c3u8i7dt0mk7mflis2e835tb072p6.apps.googleusercontent.com", 27 | "client_type": 3 28 | }, 29 | { 30 | "client_id": "1093675965929-ho3c3u8i7dt0mk7mflis2e835tb072p6.apps.googleusercontent.com", 31 | "client_type": 3 32 | } 33 | ], 34 | "api_key": [ 35 | { 36 | "current_key": "AIzaSyARB7fVNPjO_A4cowwykBDaZSu3lcfxwSk" 37 | } 38 | ], 39 | "services": { 40 | "analytics_service": { 41 | "status": 1 42 | }, 43 | "appinvite_service": { 44 | "status": 2, 45 | "other_platform_oauth_client": [ 46 | { 47 | "client_id": "1093675965929-ho3c3u8i7dt0mk7mflis2e835tb072p6.apps.googleusercontent.com", 48 | "client_type": 3 49 | } 50 | ] 51 | }, 52 | "ads_service": { 53 | "status": 2 54 | } 55 | } 56 | }, 57 | { 58 | "client_info": { 59 | "mobilesdk_app_id": "1:1093675965929:android:b4cb09feaf6c0e6b", 60 | "android_client_info": { 61 | "package_name": "net.simplifiedcoding.wallpaperhub" 62 | } 63 | }, 64 | "oauth_client": [ 65 | { 66 | "client_id": "1093675965929-ohs9nlp8ong4hs1vaeus9s0na4pv16ou.apps.googleusercontent.com", 67 | "client_type": 1, 68 | "android_info": { 69 | "package_name": "net.simplifiedcoding.wallpaperhub", 70 | "certificate_hash": "633176df9be57e8e7020d935394ba298e3f1540b" 71 | } 72 | }, 73 | { 74 | "client_id": "1093675965929-tp3497fqgsitn6dar8v4hpar8a56ako0.apps.googleusercontent.com", 75 | "client_type": 1, 76 | "android_info": { 77 | "package_name": "net.simplifiedcoding.wallpaperhub", 78 | "certificate_hash": "d9439c55c0627e0de0c60d8604e7cac1a04dd93c" 79 | } 80 | }, 81 | { 82 | "client_id": "1093675965929-cu6mv8p3tk6i380tn6c53a06jbj0f4p6.apps.googleusercontent.com", 83 | "client_type": 1, 84 | "android_info": { 85 | "package_name": "net.simplifiedcoding.wallpaperhub", 86 | "certificate_hash": "a6aac7f0f764e608e85adfd2aad65b32814710b0" 87 | } 88 | }, 89 | { 90 | "client_id": "1093675965929-o80i05e8s0otbolcvoavsl76ql5nrl70.apps.googleusercontent.com", 91 | "client_type": 1, 92 | "android_info": { 93 | "package_name": "net.simplifiedcoding.wallpaperhub", 94 | "certificate_hash": "77dc894b24bbb0b1a0244af0b95a1e730ef6ba90" 95 | } 96 | }, 97 | { 98 | "client_id": "1093675965929-ho3c3u8i7dt0mk7mflis2e835tb072p6.apps.googleusercontent.com", 99 | "client_type": 3 100 | }, 101 | { 102 | "client_id": "1093675965929-ho3c3u8i7dt0mk7mflis2e835tb072p6.apps.googleusercontent.com", 103 | "client_type": 3 104 | } 105 | ], 106 | "api_key": [ 107 | { 108 | "current_key": "AIzaSyARB7fVNPjO_A4cowwykBDaZSu3lcfxwSk" 109 | } 110 | ], 111 | "services": { 112 | "analytics_service": { 113 | "status": 1 114 | }, 115 | "appinvite_service": { 116 | "status": 2, 117 | "other_platform_oauth_client": [ 118 | { 119 | "client_id": "1093675965929-ho3c3u8i7dt0mk7mflis2e835tb072p6.apps.googleusercontent.com", 120 | "client_type": 3 121 | } 122 | ] 123 | }, 124 | "ads_service": { 125 | "status": 2 126 | } 127 | } 128 | } 129 | ], 130 | "configuration_version": "1" 131 | } -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /app/src/androidTest/java/net/simplifiedcoding/firebasephoneauth/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package net.simplifiedcoding.firebasephoneauth; 2 | 3 | import android.content.Context; 4 | import android.support.test.InstrumentationRegistry; 5 | import android.support.test.runner.AndroidJUnit4; 6 | 7 | import org.junit.Test; 8 | import org.junit.runner.RunWith; 9 | 10 | import static org.junit.Assert.*; 11 | 12 | /** 13 | * Instrumented test, which will execute on an Android device. 14 | * 15 | * @see Testing documentation 16 | */ 17 | @RunWith(AndroidJUnit4.class) 18 | public class ExampleInstrumentedTest { 19 | @Test 20 | public void useAppContext() { 21 | // Context of the app under test. 22 | Context appContext = InstrumentationRegistry.getTargetContext(); 23 | 24 | assertEquals("net.simplifiedcoding.firebasephoneauth", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/java/net/simplifiedcoding/firebasephoneauth/CountryData.java: -------------------------------------------------------------------------------- 1 | package net.simplifiedcoding.firebasephoneauth; 2 | 3 | public class CountryData { 4 | public static final String[] countryNames = {"Afghanistan", "Albania", 5 | "Algeria", "Andorra", "Angola", "Antarctica", "Argentina", 6 | "Armenia", "Aruba", "Australia", "Austria", "Azerbaijan", 7 | "Bahrain", "Bangladesh", "Belarus", "Belgium", "Belize", "Benin", 8 | "Bhutan", "Bolivia", "Bosnia And Herzegovina", "Botswana", 9 | "Brazil", "Brunei Darussalam", "Bulgaria", "Burkina Faso", 10 | "Myanmar", "Burundi", "Cambodia", "Cameroon", "Canada", 11 | "Cape Verde", "Central African Republic", "Chad", "Chile", "China", 12 | "Christmas Island", "Cocos (keeling) Islands", "Colombia", 13 | "Comoros", "Congo", "Cook Islands", "Costa Rica", "Croatia", 14 | "Cuba", "Cyprus", "Czech Republic", "Denmark", "Djibouti", 15 | "Timor-leste", "Ecuador", "Egypt", "El Salvador", 16 | "Equatorial Guinea", "Eritrea", "Estonia", "Ethiopia", 17 | "Falkland Islands (malvinas)", "Faroe Islands", "Fiji", "Finland", 18 | "France", "French Polynesia", "Gabon", "Gambia", "Georgia", 19 | "Germany", "Ghana", "Gibraltar", "Greece", "Greenland", 20 | "Guatemala", "Guinea", "Guinea-bissau", "Guyana", "Haiti", 21 | "Honduras", "Hong Kong", "Hungary", "India", "Indonesia", "Iran", 22 | "Iraq", "Ireland", "Isle Of Man", "Israel", "Italy", "Ivory Coast", 23 | "Jamaica", "Japan", "Jordan", "Kazakhstan", "Kenya", "Kiribati", 24 | "Kuwait", "Kyrgyzstan", "Laos", "Latvia", "Lebanon", "Lesotho", 25 | "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg", 26 | "Macao", "Macedonia", "Madagascar", "Malawi", "Malaysia", 27 | "Maldives", "Mali", "Malta", "Marshall Islands", "Mauritania", 28 | "Mauritius", "Mayotte", "Mexico", "Micronesia", "Moldova", 29 | "Monaco", "Mongolia", "Montenegro", "Morocco", "Mozambique", 30 | "Namibia", "Nauru", "Nepal", "Netherlands", "New Caledonia", 31 | "New Zealand", "Nicaragua", "Niger", "Nigeria", "Niue", "Korea", 32 | "Norway", "Oman", "Pakistan", "Palau", "Panama", 33 | "Papua New Guinea", "Paraguay", "Peru", "Philippines", "Pitcairn", 34 | "Poland", "Portugal", "Puerto Rico", "Qatar", "Romania", 35 | "Russian Federation", "Rwanda", "Saint Barthélemy", "Samoa", 36 | "San Marino", "Sao Tome And Principe", "Saudi Arabia", "Senegal", 37 | "Serbia", "Seychelles", "Sierra Leone", "Singapore", "Slovakia", 38 | "Slovenia", "Solomon Islands", "Somalia", "South Africa", 39 | "Korea, Republic Of", "Spain", "Sri Lanka", "Saint Helena", 40 | "Saint Pierre And Miquelon", "Sudan", "Suriname", "Swaziland", 41 | "Sweden", "Switzerland", "Syrian Arab Republic", "Taiwan", 42 | "Tajikistan", "Tanzania", "Thailand", "Togo", "Tokelau", "Tonga", 43 | "Tunisia", "Turkey", "Turkmenistan", "Tuvalu", 44 | "United Arab Emirates", "Uganda", "United Kingdom", "Ukraine", 45 | "Uruguay", "United States", "Uzbekistan", "Vanuatu", 46 | "Holy See (vatican City State)", "Venezuela", "Viet Nam", 47 | "Wallis And Futuna", "Yemen", "Zambia", "Zimbabwe"}; 48 | 49 | public static final String[] countryAreaCodes = {"93", "355", "213", 50 | "376", "244", "672", "54", "374", "297", "61", "43", "994", "973", 51 | "880", "375", "32", "501", "229", "975", "591", "387", "267", "55", 52 | "673", "359", "226", "95", "257", "855", "237", "1", "238", "236", 53 | "235", "56", "86", "61", "61", "57", "269", "242", "682", "506", 54 | "385", "53", "357", "420", "45", "253", "670", "593", "20", "503", 55 | "240", "291", "372", "251", "500", "298", "679", "358", "33", 56 | "689", "241", "220", "995", "49", "233", "350", "30", "299", "502", 57 | "224", "245", "592", "509", "504", "852", "36", "91", "62", "98", 58 | "964", "353", "44", "972", "39", "225", "1876", "81", "962", "7", 59 | "254", "686", "965", "996", "856", "371", "961", "266", "231", 60 | "218", "423", "370", "352", "853", "389", "261", "265", "60", 61 | "960", "223", "356", "692", "222", "230", "262", "52", "691", 62 | "373", "377", "976", "382", "212", "258", "264", "674", "977", 63 | "31", "687", "64", "505", "227", "234", "683", "850", "47", "968", 64 | "92", "680", "507", "675", "595", "51", "63", "870", "48", "351", 65 | "1", "974", "40", "7", "250", "590", "685", "378", "239", "966", 66 | "221", "381", "248", "232", "65", "421", "386", "677", "252", "27", 67 | "82", "34", "94", "290", "508", "249", "597", "268", "46", "41", 68 | "963", "886", "992", "255", "66", "228", "690", "676", "216", "90", 69 | "993", "688", "971", "256", "44", "380", "598", "1", "998", "678", 70 | "39", "58", "84", "681", "967", "260", "263"}; 71 | } 72 | -------------------------------------------------------------------------------- /app/src/main/java/net/simplifiedcoding/firebasephoneauth/MainActivity.java: -------------------------------------------------------------------------------- 1 | package net.simplifiedcoding.firebasephoneauth; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | import android.support.v7.app.AppCompatActivity; 6 | import android.view.View; 7 | import android.widget.ArrayAdapter; 8 | import android.widget.EditText; 9 | import android.widget.Spinner; 10 | 11 | import com.google.firebase.auth.FirebaseAuth; 12 | 13 | public class MainActivity extends AppCompatActivity { 14 | 15 | 16 | private Spinner spinner; 17 | private EditText editText; 18 | 19 | @Override 20 | protected void onCreate(Bundle savedInstanceState) { 21 | super.onCreate(savedInstanceState); 22 | setContentView(R.layout.activity_main); 23 | 24 | spinner = findViewById(R.id.spinnerCountries); 25 | spinner.setAdapter(new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, CountryData.countryNames)); 26 | 27 | editText = findViewById(R.id.editTextPhone); 28 | 29 | findViewById(R.id.buttonContinue).setOnClickListener(new View.OnClickListener() { 30 | @Override 31 | public void onClick(View v) { 32 | String code = CountryData.countryAreaCodes[spinner.getSelectedItemPosition()]; 33 | 34 | String number = editText.getText().toString().trim(); 35 | 36 | if (number.isEmpty() || number.length() < 10) { 37 | editText.setError("Valid number is required"); 38 | editText.requestFocus(); 39 | return; 40 | } 41 | 42 | String phoneNumber = "+" + code + number; 43 | 44 | Intent intent = new Intent(MainActivity.this, VerifyPhoneActivity.class); 45 | intent.putExtra("phonenumber", phoneNumber); 46 | startActivity(intent); 47 | 48 | } 49 | }); 50 | } 51 | 52 | @Override 53 | protected void onStart() { 54 | super.onStart(); 55 | 56 | if (FirebaseAuth.getInstance().getCurrentUser() != null) { 57 | Intent intent = new Intent(this, ProfileActivity.class); 58 | intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 59 | 60 | startActivity(intent); 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /app/src/main/java/net/simplifiedcoding/firebasephoneauth/ProfileActivity.java: -------------------------------------------------------------------------------- 1 | package net.simplifiedcoding.firebasephoneauth; 2 | 3 | import android.content.Intent; 4 | import android.support.v7.app.AppCompatActivity; 5 | import android.os.Bundle; 6 | import android.view.View; 7 | 8 | import com.google.firebase.auth.FirebaseAuth; 9 | 10 | public class ProfileActivity extends AppCompatActivity { 11 | 12 | @Override 13 | protected void onCreate(Bundle savedInstanceState) { 14 | super.onCreate(savedInstanceState); 15 | setContentView(R.layout.activity_profile); 16 | 17 | findViewById(R.id.buttonLogout).setOnClickListener(new View.OnClickListener() { 18 | @Override 19 | public void onClick(View v) { 20 | FirebaseAuth.getInstance().signOut(); 21 | 22 | Intent intent = new Intent(ProfileActivity.this, MainActivity.class); 23 | intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 24 | 25 | startActivity(intent); 26 | } 27 | }); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/net/simplifiedcoding/firebasephoneauth/VerifyPhoneActivity.java: -------------------------------------------------------------------------------- 1 | package net.simplifiedcoding.firebasephoneauth; 2 | 3 | import android.content.Intent; 4 | import android.support.annotation.NonNull; 5 | import android.support.v7.app.AppCompatActivity; 6 | import android.os.Bundle; 7 | import android.view.View; 8 | import android.widget.EditText; 9 | import android.widget.ProgressBar; 10 | import android.widget.Toast; 11 | 12 | import com.google.android.gms.tasks.OnCompleteListener; 13 | import com.google.android.gms.tasks.Task; 14 | import com.google.android.gms.tasks.TaskExecutors; 15 | import com.google.firebase.FirebaseException; 16 | import com.google.firebase.auth.AuthResult; 17 | import com.google.firebase.auth.FirebaseAuth; 18 | import com.google.firebase.auth.PhoneAuthCredential; 19 | import com.google.firebase.auth.PhoneAuthProvider; 20 | 21 | import java.util.concurrent.TimeUnit; 22 | 23 | public class VerifyPhoneActivity extends AppCompatActivity { 24 | 25 | 26 | private String verificationId; 27 | private FirebaseAuth mAuth; 28 | private ProgressBar progressBar; 29 | private EditText editText; 30 | 31 | @Override 32 | protected void onCreate(Bundle savedInstanceState) { 33 | super.onCreate(savedInstanceState); 34 | setContentView(R.layout.activity_verify_phone); 35 | 36 | mAuth = FirebaseAuth.getInstance(); 37 | 38 | progressBar = findViewById(R.id.progressbar); 39 | editText = findViewById(R.id.editTextCode); 40 | 41 | String phonenumber = getIntent().getStringExtra("phonenumber"); 42 | sendVerificationCode(phonenumber); 43 | 44 | findViewById(R.id.buttonSignIn).setOnClickListener(new View.OnClickListener() { 45 | @Override 46 | public void onClick(View v) { 47 | 48 | String code = editText.getText().toString().trim(); 49 | 50 | if (code.isEmpty() || code.length() < 6) { 51 | 52 | editText.setError("Enter code..."); 53 | editText.requestFocus(); 54 | return; 55 | } 56 | verifyCode(code); 57 | } 58 | }); 59 | 60 | } 61 | 62 | private void verifyCode(String code) { 63 | PhoneAuthCredential credential = PhoneAuthProvider.getCredential(verificationId, code); 64 | signInWithCredential(credential); 65 | } 66 | 67 | private void signInWithCredential(PhoneAuthCredential credential) { 68 | mAuth.signInWithCredential(credential) 69 | .addOnCompleteListener(new OnCompleteListener() { 70 | @Override 71 | public void onComplete(@NonNull Task task) { 72 | if (task.isSuccessful()) { 73 | 74 | Intent intent = new Intent(VerifyPhoneActivity.this, ProfileActivity.class); 75 | intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 76 | 77 | startActivity(intent); 78 | 79 | } else { 80 | Toast.makeText(VerifyPhoneActivity.this, task.getException().getMessage(), Toast.LENGTH_LONG).show(); 81 | } 82 | } 83 | }); 84 | } 85 | 86 | private void sendVerificationCode(String number) { 87 | progressBar.setVisibility(View.VISIBLE); 88 | PhoneAuthProvider.getInstance().verifyPhoneNumber( 89 | number, 90 | 60, 91 | TimeUnit.SECONDS, 92 | TaskExecutors.MAIN_THREAD, 93 | mCallBack 94 | ); 95 | 96 | } 97 | 98 | private PhoneAuthProvider.OnVerificationStateChangedCallbacks 99 | mCallBack = new PhoneAuthProvider.OnVerificationStateChangedCallbacks() { 100 | 101 | @Override 102 | public void onCodeSent(String s, PhoneAuthProvider.ForceResendingToken forceResendingToken) { 103 | super.onCodeSent(s, forceResendingToken); 104 | verificationId = s; 105 | } 106 | 107 | @Override 108 | public void onVerificationCompleted(PhoneAuthCredential phoneAuthCredential) { 109 | String code = phoneAuthCredential.getSmsCode(); 110 | if (code != null) { 111 | editText.setText(code); 112 | verifyCode(code); 113 | } 114 | } 115 | 116 | @Override 117 | public void onVerificationFailed(FirebaseException e) { 118 | Toast.makeText(VerifyPhoneActivity.this, e.getMessage(), Toast.LENGTH_LONG).show(); 119 | } 120 | }; 121 | } 122 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 12 | 13 | 19 | 22 | 25 | 26 | 27 | 28 | 34 | 35 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 | 50 | 55 | 60 | 65 | 70 | 75 | 80 | 85 | 90 | 95 | 100 | 105 | 110 | 115 | 120 | 125 | 130 | 135 | 140 | 145 | 150 | 155 | 160 | 165 | 170 | 171 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_logo.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_phone.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/waves.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/probelalkhan/firebase-phone-authentication/23ac70865b3c5178decafcbc660ce0950fba2ef3/app/src/main/res/drawable/waves.png -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 14 | 15 | 21 | 22 | 23 | 24 | 31 | 32 | 42 | 43 | 50 | 51 | 55 | 56 | 64 | 65 | 66 | 67 |