GOOGLE аутентификация (silentSignIn) 2018

179
26 октября 2018, 03:10

у меня образовался новый вопрос.
Недавно я сделал аутентификацию с помощью google (firebase).
Так же я узнал, что существует такая переменная, как silentSignIn.
Мне очень нужно грамотно реализовать "тихий" вход в приложение с помощью google.
К вопросу я прилагаю файл xml и java.

xml

  <?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=".WelcomeActivity"
    android:id="@+id/layout_si">
    <com.google.android.gms.common.SignInButton
        android:id="@+id/sign_in_button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentStart="true"/>
</RelativeLayout>

java

  package ru.vergeles.project;
    import android.app.ProgressDialog;
    import android.content.Context;
    import android.content.Intent;
    import android.content.SharedPreferences;
    import android.support.annotation.NonNull;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.TextView;
    import com.google.android.gms.auth.api.Auth;
    import com.google.android.gms.auth.api.signin.GoogleSignIn;
    import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
    import com.google.android.gms.auth.api.signin.GoogleSignInClient;
    import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
    import com.google.android.gms.auth.api.signin.GoogleSignInResult;
    import com.google.android.gms.common.api.ApiException;
    import com.google.android.gms.common.api.GoogleApiClient;
    import com.google.android.gms.common.api.OptionalPendingResult;
    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.FirebaseAuth;
    import com.google.firebase.auth.FirebaseUser;
    import com.google.firebase.auth.GoogleAuthProvider;
    public class WelcomeActivity extends AppCompatActivity implements View.OnClickListener {
        private static final int RC_SIGN_IN = 9001;
        private FirebaseAuth mAuth;
        private GoogleSignInClient mGoogleSignInClient;
        private ProgressDialog mProgressDialog;
        private boolean silentSignIn = true;
        private GoogleApiClient mGoogleApiClient;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_welcome);
            findViewById(R.id.sign_in_button).setOnClickListener(this);
            GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestIdToken(getString(R.string.default_web_client_id))
                    .requestEmail()
                    .build();
            mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
            mAuth = FirebaseAuth.getInstance();
        }
        @Override
        public void onStart() {
            super.onStart();
            FirebaseUser currentUser = mAuth.getCurrentUser();
        }
        @Override
        protected void onResume() {
            super.onResume();
        }
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == RC_SIGN_IN) {
                Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
                try {
                    GoogleSignInAccount account = task.getResult(ApiException.class);
                    firebaseAuthWithGoogle(account);
                } catch (ApiException e) {
                }
            }
        }
        private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
            showProgressDialog();
            AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
            mAuth.signInWithCredential(credential)
                    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            if (task.isSuccessful()) {
                                FirebaseUser user = mAuth.getCurrentUser();
                                Intent intent = new Intent(getApplicationContext(), MainActivity.class);
                                startActivity(intent);
                            } else {
                                //Snackbar.make(findViewById(R.id.layout_si), "Authentication Failed.", Snackbar.LENGTH_SHORT).show();
                            }
                            hideProgressDialog();
                        }
                    });
        }
        private void signIn() {
            Intent signInIntent = mGoogleSignInClient.getSignInIntent();
            startActivityForResult(signInIntent, RC_SIGN_IN);
        }

        @Override
        public void onClick(View view) {
            int i = view.getId();
            if (i == R.id.sign_in_button) {
                signIn();
            }
        }
        public void showProgressDialog() {
            if (mProgressDialog == null) {
                mProgressDialog = new ProgressDialog(this);
                mProgressDialog.setMessage(getString(R.string.loading));
                mProgressDialog.setIndeterminate(true);
            }
            mProgressDialog.show();
        }
        public void hideProgressDialog() {
            if (mProgressDialog != null && mProgressDialog.isShowing()) {
                mProgressDialog.dismiss();
            }
        }
    }
READ ALSO
Как подключиться к websocket серверу используя Socket.IO библиотеку на Java

Как подключиться к websocket серверу используя Socket.IO библиотеку на Java

Моя задача: считывать каждый 'tick' новой информации, присланной от сокет сервера, никакие данные отправлять на сервер я не буду

187
Размер шрифта TextView по размеру экрана

Размер шрифта TextView по размеру экрана

Есть текстУже с разметкой

148
Нажание на Row в TableView

Нажание на Row в TableView

По умолчанию в TableView нажатие на строки происходит с помощью 2-х клавиш мыши - левой и правойКак можно реализовать нажатие на строку исключительно...

165
Возможно ли запретить создание лямбды

Возможно ли запретить создание лямбды

В проекте имеется обычный интерфейс с единственным методОн был создан еще на Java 5 и стал за это время довольно популярным

164