Auth con Google en Android Studio

 


1 Agregar las dependencias:

Archivo: buid.gralalde (Module:app)

plugins {
    //bajo los demas
    id("com.google.gms.google-services")
}


dependencies {

    implementation("com.google.android.gms:play-services-auth:20.7.0")

}


Archivo: buid.gralalde (Proyect)


plugins {
    //bajo los demas
    id("com.google.gms.google-services") version "4.4.0" apply false
}


El Archivo LoginActivity:

package app.myapp.preubaloginaapp;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;

import com.google.android.gms.auth.api.Auth;
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.GoogleApi;
import com.google.android.gms.common.api.GoogleApiClient;

public class LoginActivity extends AppCompatActivity
implements GoogleApiClient.OnConnectionFailedListener {

    public static final int SIGN_IN_CODE = 2;
    private GoogleApiClient googleApi;
    SignInButton signInButton;


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

        GoogleSignInOptions gso = new GoogleSignInOptions
        .Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestEmail()
                .build();

        googleApi = new GoogleApiClient.Builder(this)
                .enableAutoManage(this,this)
                .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                .build();

        signInButton = findViewById(R.id.signinbutton);

        signInButton.setOnClickListener(view -> {
            Intent intent = Auth.GoogleSignInApi
.getSignInIntent(googleApi);
            startActivityForResult(intent, SIGN_IN_CODE);
        });


    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if(requestCode == SIGN_IN_CODE){

            GoogleSignInResult result = Auth.GoogleSignInApi
.getSignInResultFromIntent(data);
            HandleSignInResult(result);

        }


    }

    private void HandleSignInResult(GoogleSignInResult result) {

        if(result.isSuccess()){
            GoHome();
        }

    }

    private void GoHome(){
        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }

    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

    }
}

El Archivo activity_login.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
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=".LoginActivity">

    <com.google.android.gms.common.SignInButton
        android:id="@+id/signinbutton"
        android:layout_marginStart="20dp"
        android:layout_marginEnd="20dp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

El archivo MainActivity:


package app.myapp.preubaloginaapp;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.bumptech.glide.Glide;
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.common.api.OptionalPendingResult;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.common.api.Status;

public class MainActivity extends AppCompatActivity implements
 GoogleApiClient.OnConnectionFailedListener {

    ImageView imagen_usuario;

    TextView nombre_usuario, correo_usuario, id_usuario;

    Button logout, revoke;

    private GoogleApiClient googleApi;

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

        imagen_usuario = findViewById(R.id.imagen_usuario);
        nombre_usuario = findViewById(R.id.nombre_usuario);
        correo_usuario = findViewById(R.id.correo_usuario);
        id_usuario = findViewById(R.id.id_usuario);

        logout = findViewById(R.id.logout);
        revoke = findViewById(R.id.revoke);


        logout.setOnClickListener(view -> Logout());
        revoke.setOnClickListener(view -> Revoke());


        GoogleSignInOptions gso = new GoogleSignInOptions
        .Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestEmail()
                .build();

        googleApi = new GoogleApiClient.Builder(this)
                .enableAutoManage(this,this)
                .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                .build();



    }

    @Override
    protected void onStart() {
        super.onStart();

        OptionalPendingResult<GoogleSignInResult> opr = Auth.GoogleSignInApi
        .silentSignIn(googleApi);


        if(opr.isDone()){
            GoogleSignInResult gsr = opr.get();
            HandleSignResult(gsr);

        }else{
            opr.setResultCallback(new ResultCallback<GoogleSignInResult>() {
                @Override
                public void onResult(@NonNull GoogleSignInResult googleSignInResult) {
                    HandleSignResult(googleSignInResult);
                }
            });
        }



    }

    private void HandleSignResult(GoogleSignInResult gsr) {
        if(gsr.isSuccess()){

            GoogleSignInAccount account = gsr.getSignInAccount();
            assert account != null;
            nombre_usuario.setText(account.getDisplayName());
            correo_usuario.setText(account.getEmail());
            id_usuario.setText(account.getId());

            Glide.with(this).load(account.getPhotoUrl()).into(imagen_usuario);

        }else{
            GoLoginScreen();
        }
    }

    private void GoLoginScreen(){
        Intent intent = new Intent(this, LoginActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
        Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
    }

    private void Logout(){
        Auth.GoogleSignInApi.signOut(googleApi).setResultCallback(status -> {
            if(status.isSuccess()){
                GoLoginScreen();
            }else{
                Toast.makeText(getApplicationContext(),
                "Error al cerrar sesión", Toast.LENGTH_SHORT).show();
            }
        });

    }

    private void Revoke(){
        Auth.GoogleSignInApi.revokeAccess(googleApi).setResultCallback(status -> {
            if(status.isSuccess()){
                GoLoginScreen();
            }else{
                Toast.makeText(getApplicationContext(),
                 "Error al revocar sesión", Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    public void onConnectionFailed(@NonNull
    ConnectionResult connectionResult) {

    }
}


El archivo activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"

    android:orientation="vertical"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_weight="1"
        android:gravity="center_vertical|center_horizontal"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <ImageView
            android:id="@+id/imagen_usuario"
            android:layout_width="100dp"
            android:layout_height="100dp"/>

        <TextView
            android:textStyle="bold"
            android:textSize="18sp"
            android:id="@+id/nombre_usuario"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/app_name" />

        <TextView
            android:textSize="16sp"
            android:id="@+id/correo_usuario"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/app_name" />

        <TextView
            android:textSize="12sp"
            android:id="@+id/id_usuario"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/app_name" />

    </LinearLayout>

    <Button
        android:id="@+id/logout"
        android:textColor="#c54f43"
        android:text="Logout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        style="@style/Widget.AppCompat.Button.Borderless.Colored"/>

    <Button
        android:id="@+id/revoke"
        android:textColor="@color/black"
        android:text="Revoke"
        style="@style/Widget.AppCompat.Button.Borderless.Colored"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>




Publicar un comentario

Artículo Anterior Artículo Siguiente

jueves, 16 de noviembre de 2023


No hay comentarios:

Publicar un comentario