Thursday, 18 February 2021

Gmail Integration In Android | Step By Step.

 Gmail Integration




1)  https://console.developers.google.com/home/dashboard

2)  Create a project  => select country  => input package name => input sha1 key

3) download json file and paste it in the app folder in project (Android View)

4) paste on project level : classpath 'com.google.gms:google-services:3.0.0'

5) paste on app level on top or bottom: apply plugin: 'com.google.gms.google-services' 

6) paste in app level dependencies: compile 'com.google.android.gms:play-services-auth:9.0.0'
compile 'com.mcxiaoke.volley:library-aar:1.0.0'


7) logout: private void signOut() {
   Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
           new ResultCallback<Status>() {
               @Override
               public void onResult(Status status) {
                   // ...
                   textViewName.setText("");
                   textViewEmail.setText("");
                   profilePhoto.setImageBitmap(null);
               }
           });
}


Full Source:
 MainActivity.java

package com.codecube.sociallogin;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.NetworkImageView;
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.SignInButton;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.common.api.Status;

public class MainActivity extends AppCompatActivity implements View.OnClickListener, GoogleApiClient.OnConnectionFailedListener {


   //Signin button
   private SignInButton signInButton;
   private Button btn_signOut;
   private Button signInButtonFB;
   private Button btn_signOutFB;

   //Signing Options
   private GoogleSignInOptions gso;

   //google api client
   private GoogleApiClient mGoogleApiClient;

   //Signin constant to check the activity result
   private int RC_SIGN_IN = 100;

   //TextViews
   private TextView textViewName;
   private TextView textViewEmail;
   private NetworkImageView profilePhoto;

   //Image Loader
   private ImageLoader imageLoader;


   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);

       //Initializing Views
       textViewName = (TextView) findViewById(R.id.textViewName);
       textViewEmail = (TextView) findViewById(R.id.textViewEmail);
       profilePhoto = (NetworkImageView) findViewById(R.id.profileImage);

       //Initializing google signin option
       gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
               .requestEmail()
               .build();

       //Initializing signinbutton
       signInButton = (SignInButton) findViewById(R.id.sign_in_button);
       btn_signOut = (Button) findViewById(R.id.btn_signOut);
       signInButtonFB = (Button) findViewById(R.id.sign_in_buttonFB);
       btn_signOutFB = (Button) findViewById(R.id.btn_signOutFB);
       signInButton.setSize(SignInButton.SIZE_WIDE);
       signInButton.setScopes(gso.getScopeArray());

       //Initializing google api client
       mGoogleApiClient = new GoogleApiClient.Builder(this)
               .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
               .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
               .build();


       //Setting onclick listener to signing button
       signInButton.setOnClickListener(this);
       btn_signOut.setOnClickListener(this);
   }


   //This function will option signing intent
   private void signIn() {
       //Creating an intent
       Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);

       //Starting intent for result
       startActivityForResult(signInIntent, RC_SIGN_IN);
   }

   @Override
   public void onActivityResult(int requestCode, int resultCode, Intent data) {
       super.onActivityResult(requestCode, resultCode, data);
       //If signin
       if (requestCode == RC_SIGN_IN) {
           GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
           //Calling a new function to handle signin
           handleSignInResult(result);
       }
   }


   //After the signing we are calling this function
   private void handleSignInResult(GoogleSignInResult result) {
       //If the login succeed
       if (result.isSuccess()) {
           //Getting google account
           GoogleSignInAccount acct = result.getSignInAccount();

           //Displaying name and email
           textViewName.setText(acct.getDisplayName());
           textViewEmail.setText(acct.getEmail());

           //Initializing image loader
           imageLoader = CustomVolleyRequest.getInstance(this.getApplicationContext()).getImageLoader();

           try {
               imageLoader.get(
                       acct.getPhotoUrl().toString(),              /*1st parameter*/
                       ImageLoader.getImageListener(profilePhoto/*2nd parameter - ImageView*/
                               R.mipmap.ic_launcher,               /*3rd parameter - default image*/
                               R.mipmap.ic_launcher)               /*4th parameter - error image*/
               );
           } catch (Exception e) {
               e.printStackTrace();
           }

           //Loading image
           try {
               profilePhoto.setImageUrl(acct.getPhotoUrl().toString(), imageLoader);
           } catch (Exception e) {
               e.printStackTrace();
           }

       } else {
           //If login fails
           Toast.makeText(this, "Login Failed", Toast.LENGTH_LONG).show();
       }
   }

   @Override
   public void onClick(View v) {
       if (v == signInButton) {
           //Calling signin
           signIn();
       }

       if (v == btn_signOut) {
           signOut();
       }
   }

   private void signOut() {
       Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
               new ResultCallback<Status>() {
                   @Override
                   public void onResult(Status status) {
                       // ...
                       textViewName.setText("");
                       textViewEmail.setText("");
                       profilePhoto.setImageBitmap(null);
                   }
               });
   }

   @Override
   public void onConnectionFailed(ConnectionResult connectionResult) {

   }
}


------------------------------------------------
CustomVolleyRequest.java

package com.codecube.sociallogin;

import android.content.Context;
import android.graphics.Bitmap;
import android.support.v4.util.LruCache;

import com.android.volley.Cache;
import com.android.volley.Network;
import com.android.volley.RequestQueue;
import com.android.volley.toolbox.BasicNetwork;
import com.android.volley.toolbox.DiskBasedCache;
import com.android.volley.toolbox.HurlStack;
import com.android.volley.toolbox.ImageLoader;

/**
* Created by Vinod on 22-04-2017.
*/
public class CustomVolleyRequest {

   private static CustomVolleyRequest customVolleyRequest;
   private static Context context;
   private RequestQueue requestQueue;
   private ImageLoader imageLoader;


   private CustomVolleyRequest(Context context) {
       this.context = context;
       this.requestQueue = getRequestQueue();

       imageLoader = new ImageLoader(requestQueue,
               new ImageLoader.ImageCache() {
                   private final LruCache<String, Bitmap>
                           cache = new LruCache<String, Bitmap>(20);

                   @Override
                   public Bitmap getBitmap(String url) {
                       return cache.get(url);
                   }

                   @Override
                   public void putBitmap(String url, Bitmap bitmap) {
                       cache.put(url, bitmap);
                   }
               });
   }

   public static synchronized CustomVolleyRequest getInstance(Context context) {
       if (customVolleyRequest == null) {
           customVolleyRequest = new CustomVolleyRequest(context);
       }
       return customVolleyRequest;
   }

   public RequestQueue getRequestQueue() {
       if (requestQueue == null) {
           Cache cache = new DiskBasedCache(context.getCacheDir(), 10 * 1024 * 1024);
           Network network = new BasicNetwork(new HurlStack());
           requestQueue = new RequestQueue(cache, network);
           requestQueue.start();
       }
       return requestQueue;
   }

   public ImageLoader getImageLoader() {
       return imageLoader;
   }

}