Created
November 29, 2018 07:02
-
-
Save JaldeepAsodariya/c7565e9edf69566ed2ad023b163e030a to your computer and use it in GitHub Desktop.
Authenticate with Firebase
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
apply plugin: 'com.android.application' | |
android { | |
compileSdkVersion 27 | |
defaultConfig { | |
applicationId "com.jbs.jbsfirebaseapps" | |
minSdkVersion 16 | |
targetSdkVersion 27 | |
versionCode 1 | |
versionName "1.0" | |
} | |
buildTypes { | |
release { | |
minifyEnabled false | |
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' | |
} | |
} | |
} | |
repositories { | |
flatDir { | |
dirs 'libs' | |
} | |
} | |
dependencies { | |
implementation fileTree(include: ['*.jar'], dir: 'libs') | |
testImplementation 'junit:junit:4.12' | |
implementation 'com.android.support:appcompat-v7:27.1.1' | |
implementation 'com.android.support:recyclerview-v7:27.1.1' | |
implementation 'com.android.support:cardview-v7:27.1.1' | |
implementation 'com.android.support:design:27.1.1' | |
implementation 'com.google.android.gms:play-services-auth:15.0.1' | |
implementation 'com.google.firebase:firebase-core:15.0.2' | |
implementation 'com.google.firebase:firebase-crash:15.0.2' | |
implementation 'com.google.firebase:firebase-auth:15.1.0' | |
implementation 'com.google.firebase:firebase-messaging:15.0.2' | |
implementation 'com.google.firebase:firebase-database:15.0.1' | |
implementation 'com.google.firebase:firebase-config:15.0.2' | |
implementation 'com.facebook.android:facebook-android-sdk:4.11.0' | |
implementation 'com.mikepenz:iconics-core:2.5.11@aar' | |
// implementation 'com.mikepenz:material-design-iconic-typeface:2.2.0.1@aar' // Material Design Iconic Font(gmi) | |
implementation 'com.mikepenz:community-material-typeface:1.3.41.1@aar' // Community Material(cmd) | |
implementation 'com.squareup.picasso:picasso:2.5.2' | |
implementation(name: 'jalotsav-app-init-110', ext: 'aar') | |
} | |
apply plugin: 'com.google.gms.google-services' |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.jbs.jbsfirebaseapps.fireauth; | |
import android.content.Intent; | |
import android.content.pm.PackageInfo; | |
import android.content.pm.PackageManager; | |
import android.content.pm.Signature; | |
import android.os.Bundle; | |
import android.support.annotation.NonNull; | |
import android.support.annotation.Nullable; | |
import android.support.design.widget.CoordinatorLayout; | |
import android.support.design.widget.Snackbar; | |
import android.support.design.widget.TextInputEditText; | |
import android.support.design.widget.TextInputLayout; | |
import android.support.v4.view.LayoutInflaterCompat; | |
import android.support.v7.app.AppCompatActivity; | |
import android.support.v7.widget.AppCompatButton; | |
import android.util.Base64; | |
import android.util.Log; | |
import android.view.View; | |
import android.view.WindowManager; | |
import android.widget.ImageView; | |
import android.widget.ProgressBar; | |
import android.widget.TextView; | |
import com.facebook.AccessToken; | |
import com.facebook.CallbackManager; | |
import com.facebook.FacebookCallback; | |
import com.facebook.FacebookException; | |
import com.facebook.FacebookSdk; | |
import com.facebook.login.LoginManager; | |
import com.facebook.login.LoginResult; | |
import com.google.android.gms.auth.api.Auth; | |
import com.google.android.gms.auth.api.signin.GoogleSignInAccount; | |
import com.google.android.gms.auth.api.signin.GoogleSignInOptions; | |
import com.google.android.gms.auth.api.signin.GoogleSignInResult; | |
import com.google.android.gms.common.ConnectionResult; | |
import com.google.android.gms.common.api.GoogleApiClient; | |
import com.google.android.gms.tasks.OnCompleteListener; | |
import com.google.android.gms.tasks.Task; | |
import com.google.firebase.auth.AuthCredential; | |
import com.google.firebase.auth.AuthResult; | |
import com.google.firebase.auth.FacebookAuthProvider; | |
import com.google.firebase.auth.FirebaseAuth; | |
import com.google.firebase.auth.FirebaseUser; | |
import com.google.firebase.auth.GoogleAuthProvider; | |
import com.google.firebase.database.DatabaseReference; | |
import com.google.firebase.database.FirebaseDatabase; | |
import com.jbs.jbsfirebaseapps.R; | |
import com.jbs.jbsfirebaseapps.common.AppConstants; | |
import com.jbs.jbsfirebaseapps.common.GeneralFunctions; | |
import com.jbs.jbsfirebaseapps.common.LogManager; | |
import com.jbs.jbsfirebaseapps.model.MdlUsers; | |
import com.mikepenz.iconics.context.IconicsLayoutInflater; | |
import java.security.MessageDigest; | |
import java.security.NoSuchAlgorithmException; | |
import java.util.Arrays; | |
/** | |
* Created by Jalotsav on 9/16/2016. | |
*/ | |
public class FireAuth extends AppCompatActivity implements AppConstants, View.OnClickListener, | |
GoogleApiClient.OnConnectionFailedListener { | |
CoordinatorLayout mCrdntrlyot; | |
TextInputLayout mTxtinptlyotEmail, mTxtinptlyotPaswrd; | |
TextInputEditText mTxtinptEtEmail, mTxtinptEtPaswrd; | |
AppCompatButton mAppcmptbtnSignin; | |
TextView mTvFrgtPaswrd; | |
ImageView mImgvwFirebase, mImgvwGp, mImgvwFb, mImgvwTwtr; | |
ProgressBar mPrgrsbrMain; | |
FirebaseAuth mFireAuth; | |
FirebaseAuth.AuthStateListener mAuthListener; | |
FirebaseDatabase mFireDB; | |
GoogleApiClient mGoogleApiClient; | |
CallbackManager mCallbackManager; | |
@Override | |
protected void onCreate(@Nullable Bundle savedInstanceState) { | |
LayoutInflaterCompat.setFactory(getLayoutInflater(), new IconicsLayoutInflater(getDelegate())); | |
FacebookSdk.sdkInitialize(getApplicationContext()); | |
mCallbackManager = CallbackManager.Factory.create(); | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.lo_fire_auth); | |
mCrdntrlyot = (CoordinatorLayout) findViewById(R.id.cordntrlyot_fireauth); | |
mTxtinptlyotEmail = (TextInputLayout) findViewById(R.id.txtinputlyot_fireauth_email); | |
mTxtinptlyotPaswrd = (TextInputLayout) findViewById(R.id.txtinputlyot_fireauth_password); | |
mTxtinptEtEmail = (TextInputEditText) findViewById(R.id.txtinptet_fireauth_email); | |
mTxtinptEtPaswrd = (TextInputEditText) findViewById(R.id.txtinptet_fireauth_password); | |
mAppcmptbtnSignin = (AppCompatButton) findViewById(R.id.appcmptbtn_fireauth_signin); | |
mTvFrgtPaswrd = (TextView) findViewById(R.id.tv_fireauth_frgtpaswrd); | |
mImgvwFirebase = (ImageView) findViewById(R.id.imgvw_fireauth_firebase); | |
mImgvwGp = (ImageView) findViewById(R.id.imgvw_fireauth_social_gp); | |
mImgvwFb = (ImageView) findViewById(R.id.imgvw_fireauth_social_fb); | |
mImgvwTwtr= (ImageView) findViewById(R.id.imgvw_fireauth_social_twtr); | |
mPrgrsbrMain = (ProgressBar) findViewById(R.id.prgrsbr_fireauth); | |
mFireAuth = FirebaseAuth.getInstance(); | |
mFireDB = FirebaseDatabase.getInstance(); | |
FirebaseAuth.getInstance().signOut(); | |
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) | |
.requestIdToken(getString(R.string.default_web_client_id)) | |
.requestEmail() | |
.build(); | |
mGoogleApiClient = new GoogleApiClient.Builder(this) | |
.enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) | |
.addApi(Auth.GOOGLE_SIGN_IN_API, gso) | |
.build(); | |
mAppcmptbtnSignin.setOnClickListener(this); | |
mTvFrgtPaswrd.setOnClickListener(this); | |
mImgvwFirebase.setOnClickListener(this); | |
mImgvwGp.setOnClickListener(this); | |
mImgvwFb.setOnClickListener(this); | |
mTxtinptEtEmail.setText("[email protected]"); | |
mTxtinptEtPaswrd.setText("Jd@Patel"); | |
} | |
@Override | |
public void onClick(View view) { | |
switch (view.getId()) { | |
case R.id.appcmptbtn_fireauth_signin: | |
signInFirebase(); | |
break; | |
case R.id.tv_fireauth_frgtpaswrd: | |
startActivity(new Intent(FireAuth.this, FireResetPassword.class)); | |
break; | |
case R.id.imgvw_fireauth_firebase: | |
startActivity(new Intent(FireAuth.this, FireSignup.class)); | |
break; | |
case R.id.imgvw_fireauth_social_gp: | |
signInGoogle(); | |
break; | |
case R.id.imgvw_fireauth_social_fb: | |
signInFacebook(); | |
break; | |
case R.id.imgvw_fireauth_social_twtr: | |
break; | |
} | |
} | |
// Check all field Validation and Signin Firebase | |
private void signInFirebase() { | |
// TODO Auto-generated method stub | |
if (!validateEmail()) { | |
return; | |
} | |
if (!validatePassword()) { | |
return; | |
} | |
String emailVal = mTxtinptEtEmail.getText().toString().trim(); | |
String passwordVal = mTxtinptEtPaswrd.getText().toString().trim(); | |
mPrgrsbrMain.setVisibility(View.VISIBLE); | |
mFireAuth.signInWithEmailAndPassword(emailVal, passwordVal) | |
.addOnCompleteListener(FireAuth.this, new OnCompleteListener<AuthResult>() { | |
@Override | |
public void onComplete(@NonNull Task<AuthResult> task) { | |
if(!task.isSuccessful()) { | |
mPrgrsbrMain.setVisibility(View.GONE); | |
Log.w(LOG_TAG, "signInWithFirebase", task.getException()); | |
Snackbar.make(mCrdntrlyot, "Authentication failed.\n" + task.getException().getMessage(), | |
Snackbar.LENGTH_LONG).show(); | |
} else | |
successLoginGetData(task); | |
} | |
}); | |
} | |
// Check validation for Email | |
private boolean validateEmail() { | |
if (mTxtinptEtEmail.getText().toString().trim().isEmpty()) { | |
mTxtinptlyotEmail.setErrorEnabled(true); | |
mTxtinptlyotEmail.setError(getString(R.string.email_entr_sml)); | |
requestFocus(mTxtinptEtEmail); | |
return false; | |
} else if (!GeneralFunctions.isvalidEmailFormat(mTxtinptEtEmail.getText().toString().trim())) { | |
mTxtinptlyotEmail.setErrorEnabled(true); | |
mTxtinptlyotEmail.setError(getString(R.string.email_invalid)); | |
requestFocus(mTxtinptEtEmail); | |
return false; | |
} else { | |
mTxtinptlyotEmail.setError(null); | |
mTxtinptlyotEmail.setErrorEnabled(false); | |
return true; | |
} | |
} | |
// Check validation for Password | |
private boolean validatePassword() { | |
if (mTxtinptEtPaswrd.getText().toString().trim().isEmpty()) { | |
mTxtinptlyotPaswrd.setErrorEnabled(true); | |
mTxtinptlyotPaswrd.setError(getString(R.string.password_entr_sml)); | |
requestFocus(mTxtinptEtPaswrd); | |
return false; | |
} else { | |
mTxtinptlyotPaswrd.setError(null); | |
mTxtinptlyotPaswrd.setErrorEnabled(false); | |
return true; | |
} | |
} | |
private void requestFocus(View view) { | |
if (view.requestFocus()) { | |
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); | |
} | |
} | |
private void signInGoogle() { | |
mPrgrsbrMain.setVisibility(View.VISIBLE); | |
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); | |
startActivityForResult(signInIntent, REQUESTCODE_SIGN_IN_GOOGLE); | |
} | |
private void signInFacebook() { | |
mPrgrsbrMain.setVisibility(View.VISIBLE); | |
LoginManager.getInstance().logInWithReadPermissions(this, Arrays.asList("public_profile", "email")); | |
LoginManager.getInstance().registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() { | |
@Override | |
public void onSuccess(LoginResult loginResult) { | |
// Facebook Sign In was successful, authenticate with Firebase | |
firebaseAuthWithFacebook(loginResult.getAccessToken()); | |
} | |
@Override | |
public void onCancel() { | |
LogManager.printLog(LOGTYPE_DEBUG, "facebook:onCancel"); | |
mPrgrsbrMain.setVisibility(View.GONE); | |
} | |
@Override | |
public void onError(FacebookException error) { | |
Log.d(LOG_TAG, "facebook:onError", error); | |
mPrgrsbrMain.setVisibility(View.GONE); | |
} | |
}); | |
} | |
@Override | |
public void onActivityResult(int requestCode, int resultCode, Intent data) { | |
super.onActivityResult(requestCode, resultCode, data); | |
mCallbackManager.onActivityResult(requestCode, resultCode, data); | |
if (requestCode == REQUESTCODE_SIGN_IN_GOOGLE) { | |
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); | |
if (result.isSuccess()) { | |
// Google Sign In was successful, authenticate with Firebase | |
GoogleSignInAccount account = result.getSignInAccount(); | |
firebaseAuthWithGoogle(account); | |
} else { | |
mPrgrsbrMain.setVisibility(View.GONE); | |
Snackbar.make(mCrdntrlyot, "Google authentication failed.", Snackbar.LENGTH_LONG).show(); | |
} | |
} | |
} | |
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) { | |
mPrgrsbrMain.setVisibility(View.VISIBLE); | |
LogManager.printLog(LOGTYPE_INFO, "signInWithGoogleId: " + acct.getId()); | |
AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null); | |
mFireAuth.signInWithCredential(credential) | |
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { | |
@Override | |
public void onComplete(@NonNull Task<AuthResult> task) { | |
LogManager.printLog(LOGTYPE_DEBUG, "signInWithCredential:onComplete:" + task.isSuccessful()); | |
if (!task.isSuccessful()) { | |
mPrgrsbrMain.setVisibility(View.GONE); | |
Log.w(LOG_TAG, "signInWithCredential", task.getException()); | |
Snackbar.make(mCrdntrlyot, "Authentication failed.\n" + task.getException().getMessage(), | |
Snackbar.LENGTH_LONG).show(); | |
} else | |
successLoginGetData(task); | |
} | |
}); | |
} | |
private void firebaseAuthWithFacebook(AccessToken accessToken) { | |
mPrgrsbrMain.setVisibility(View.VISIBLE); | |
LogManager.printLog(LOGTYPE_INFO, "signInWithFacebookToken: " + accessToken); | |
AuthCredential credential = FacebookAuthProvider.getCredential(accessToken.getToken()); | |
mFireAuth.signInWithCredential(credential) | |
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { | |
@Override | |
public void onComplete(@NonNull Task<AuthResult> task) { | |
LogManager.printLog(LOGTYPE_DEBUG, "signInWithCredential:onComplete:" + task.isSuccessful()); | |
if (!task.isSuccessful()) { | |
mPrgrsbrMain.setVisibility(View.GONE); | |
Log.w(LOG_TAG, "signInWithCredential", task.getException()); | |
Snackbar.make(mCrdntrlyot, "Authentication failed.\n" + task.getException().getMessage(), | |
Snackbar.LENGTH_LONG).show(); | |
} else | |
successLoginGetData(task); | |
} | |
}); | |
} | |
private void successLoginGetData(Task<AuthResult> task) { | |
FirebaseUser fireUser = task.getResult().getUser(); | |
DatabaseReference mDBUsersRef = mFireDB.getReference("ColUsers"); | |
String photoUrl = ""; | |
try { | |
photoUrl = fireUser.getPhotoUrl().getEncodedSchemeSpecificPart(); | |
} catch (NullPointerException e) { | |
e.printStackTrace(); | |
} | |
mDBUsersRef.child(fireUser.getUid()).setValue( | |
new MdlUsers(fireUser.getDisplayName(), fireUser.getEmail(), photoUrl)); | |
mPrgrsbrMain.setVisibility(View.GONE); | |
startActivity(new Intent(this, FireHome.class)); | |
} | |
@Override | |
protected void onResume() { | |
super.onResume(); | |
if(mFireAuth == null) | |
mPrgrsbrMain.setVisibility(View.GONE); | |
} | |
@Override | |
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { | |
LogManager.printLog(LOGTYPE_DEBUG, "onConnectionFailed:" + connectionResult); | |
} | |
// Get Key Hashes for FacebookIntegration | |
private void getKeyHashes() { | |
PackageInfo info; | |
try { | |
info = getPackageManager().getPackageInfo( | |
this.getPackageName(), PackageManager.GET_SIGNATURES); | |
for (Signature signature : info.signatures) { | |
MessageDigest md; | |
md = MessageDigest.getInstance("SHA"); | |
md.update(signature.toByteArray()); | |
String something = new String(Base64.encode(md.digest(), 0)); | |
LogManager.printLog(LOGTYPE_INFO, "Hash key: " + something); | |
} | |
} catch (PackageManager.NameNotFoundException e1) { | |
LogManager.printLog(LOGTYPE_INFO, "name not found: " + e1.toString()); | |
} catch (NoSuchAlgorithmException e) { | |
LogManager.printLog(LOGTYPE_INFO, "no such an algorithm: " + e.toString()); | |
} catch (Exception e) { | |
LogManager.printLog(LOGTYPE_INFO, "exception: " + e.toString()); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment