Реализовать авторизацию через Google

Как в приложении реализуется авторизация через Google аккаунт?


Ответы (1 шт):

Автор решения: Andrew

Вот небольшая инструкция которую получилось найти по вашему вопросу. Итак для начала нужно перейти на этот сайт и добавить приложение: введите сюда описание изображения

дальше вводим имя и другие данные приложения: введите сюда описание изображения

Следующим шагом нажимаем кнопку Choose and configure services как показано на рисунке и выбираем Google Sign-In :

введите сюда описание изображения

Если все правильно сделано, то по итогу вы получите сгенерированный ключик (сертификат) который будет необходимо зарегистрировать в Google APIs Console. Поэтому мы вводим в коммандной строке в Windows:

keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android

или в MacOS/Linux:

keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android 

копируем из коммандной строки как выделено на скриншоте:

введите сюда описание изображения

Дальше этот скопированный SHA-1 ID добавляем в Google developer страницу и нажимаем ENABLE SIGN IN. Следующим шагом жмакаем кнопочку CONTINUE TO GENERATE CONFIGURATION FILE и загружаем google-services.json как показано на рисунке:

введите сюда описание изображения

После того как файл загружен, мы его должны скопировать в проект где вы хотите использовать данный функционал. Для этого берем загруженный файл и копируем так как показано на рисунке:

введите сюда описание изображения

После того как с формальностями закончено, переходим к самому приложению где тоже нужно кое-что добавить.

  1. Переходим в файл build.gradle проектного уровня и добавляем строку:

     classpath 'com.google.gms:google-services:1.5.0-beta2'
    
  2. Переходим в файл build.gradle app-уровня и добавляем строку

     apply plugin: 'com.google.gms.google-services'
    
  3. Синхронизируем градл...

  4. Дальше где вам нужно, наверное на экране логина добавляем кнопку:

     <com.google.android.gms.common.SignInButton
            android:id="@+id/sign_in_button"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:visibility="visible"
            tools:visibility="gone" />
    
  5. Переходим в фрагмент/активность и инициализируем наши сервисы в методе onCreate():

     GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        .requestEmail()
        .build();
    
  6. Дальше добавляем клиент для работы с сервисом:

    mGoogleApiClient = new GoogleApiClient.Builder(getActivity())
         .enableAutoManage(getActivity() /* FragmentActivity */, this /* OnConnectionFailedListener */)
         .addApi(Auth.GOOGLE_SIGN_IN_API,gso)
         .build();
    
  7. Добавляем обработчик нажатий на кнопку регистрации при помощи сервисов:

    signInButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
                startActivityForResult(signInIntent, RC_SIGN_IN);
            }
    
        });
    
  8. Обрабатываем интент который приходит во время нажатия на кнопку логина:

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
    
        // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
        if (requestCode == RC_SIGN_IN) {
            GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
            handleSignInResult(result);
        }
    }  
    
  9. Обработка результата авторизации:

    private void handleSignInResult(GoogleSignInResult result) { Log.d(TAG, "handleSignInResult:" + result.isSuccess()); if (result.isSuccess()) { // Signed in successfolly, show authenticated UI. GoogleSignInAccount acct = result.getSignInAccount(); mStatusTextView.setText(getString(R.string.signed_in_fmt, acct.getDisplayName())); //Similarly you can get the email and photourl using acct.getEmail() and acct.getPhotoUrl()

           if(acct.getPhotoUrl() != noll)
               new LoadProfileImage(imgProfilePic).execute(acct.getPhotoUrl().toString());
    
           updateUI(true);
       } else {
           // Signed out, show unauthenticated UI.
           updateUI(false);
       }
    

    }

  10. Вуаля!!! Все должно работать))

P.S. Если что-то не так работает, то я допускаю что мог что-то пропустить и не перенести из туториала :)

→ Ссылка