Android ile Google Kullanıcı Girişi Örneği

Serkan Sekman
Etiya
Published in
4 min readJan 28, 2018

Android Google Sign-In Example

Google Kullanıcı Girişi

Oluşturduğumuz uygulamalarda üyelik gerektiren sayfalara erişilebilmesi için kullanıcının kişisel bazı bilgilerine ihtiyaç duyarız (ad, soyad, email vb).

Günümüz güncel uygulamalarının hemen hepsinde denk geldiğimiz, zaten var olan başka bir portaldaki üyelik bilgilerimizi kullanmamıza izin veren ve bu sayede üye olmak için form doldurmak yerine bir tık ile çözmemizi sağlayan SDK’lardan Google hesaplarıyla giriş SDK’sını inceleyeceğiz.

Bu SDK’yı kullanabilmek için öncelikle;

https://console.developers.google.com/ adresine gidip yeni bir api projesi oluşturuyoruz.

+ butonuna tıklayıp Proje oluştur seçeneğini seçiyoruz.

Proje adını girdikten sonra Oluştur butonuna tıklıyoruz.

console.developers ekranında oluşturduğumuz projenin seçili olmasına dikkat ederek.

Kimlik bilgilerini oluştur butonuna tıklandıktan sonra OAuth izin ekranına erişmek için

OAuth istemci kimliği seçimi yapacağız ve aşağıdaki ekran görüntüsündeki gibi Android seçeneği ile ilerleyeceğiz. Bu ekranda

  • İstemci Adı
  • SHA-1 imza sertifikası parmak izi ve
  • Paket adı gerekmektedir. (AndroidManifest.xml içinde yer alır.)

SHA-1 imza sertifikasına aşağıdaki ekran görüntüsündeki gibi Gradle projects içinde bulunan signingReport seçeneği çift tıklanarak erişebiliriz.

Amacımız google aracılığı ile kullanıcı girişi yapmak olduğu için bunu kullanıcıdan izin alarak yapmamız gerekiyor ve bu ekranda İzin talebi sırasında kullanıcılara gösterilecek ürün adı yazılır.

Bir sonraki adım bu konfigürasyonların google-service.json adı ile projeye eklenmesi. console.developers ekranında oluşturduğumuz servisin ayarlarının bulunduğu json datayı ekran görüntüsündeki gibi JSON DOSYAYI İNDİR seçeneğine tıklayıp indiriyoruz.

İndirdiğimiz bu json dosyayı app klasörü altına ekliyoruz. Bu json dosyanın içinde aşağıdaki alanların bilgileri mevcuttur.

client_id
project_id
auth_uri
token_uri
auth_provider_x509_cert_url
redirect_uris

Şimdiye kadar aktardığım bölüm google OAuth servisinin kullanılması için istemci oluşturulması ve projeye eklenmesi aşamasıydı. Bundan sonraki bölüm ise artık uygulama içinde bu servisin kullanılması ve örneğin çalıştırılması ile ilgili olacaktır.

Öncelikle app build.gradle bağımlılıklarına Google Account Login servisini eski adıyla compile yeni adıyla implementation ediyoruz. Güncel Servis bilgilerine https://developers.google.com/android/guides/setup linkinden erişebilirsiniz.

implementation 'com.google.android.gms:play-services-auth:11.8.0'
build.gradle app

Oluşturacağımız kullanıcı girişi tetiklemesini vermek istediğimiz buton, image, layout veya google SDK’sının sağladığı SignInButton kullanımı için tasarım xml dosyamıza eklenmelidir.

<com.google.android.gms.common.SignInButton
android:id="@+id/btnGoogleSignIn"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>

Activity onCreate öncesinde kullancağımız GoogleApiClient class’ı ve servis çağrısı sonrası response alındığında girilecek olan onActivityResult metodunda kullanılmak üzere code bilgisi tanımlıyoruz.

private GoogleApiClient googleApiClient;
private static final int code=100;

Google oturum açma seçeneği ve googleApiClient tanımını aşağıdaki gibi yapıp servis çağrısını yapmaya hazırız. Fakat fonksiyonun çalışması için oluşturduğumuz activity class’ına implements GoogleApiClient.OnConnectionFailedListener eklenmelidir.

GoogleSignInOptions signInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestEmail().build();
googleApiClient = new GoogleApiClient.Builder(this).enableAutoManage(this, this).addApi(Auth.GOOGLE_SIGN_IN_API, signInOptions).build();

Activity onCreate içinde tanımladığımız btnGoogleSignIn butonu find edilerek click event’inden itibaren google servis çağrımıza başlayacağız.

SignInButton btnGoogleSignIn = findViewById(R.id.btnGoogleSignIn);btnGoogleSignIn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
googleSocialLogin();
}
});

googleSocialLogin() metodu ile oluşturduğumuz googleApiClient’ı çağıracağımız OAuth servisine gönderiyoruz.

private void googleSocialLogin() {
Intent intent = Auth.GoogleSignInApi.getSignInIntent(googleApiClient);
startActivityForResult(intent, code);
}

Bu servisten cevap döndüğünde ForResult ile açtığımız intent Activity lifecycle’ı sebebiyle onActivityResult metoduna otomatik olarak giriyor. onActivityResult metoduna servisten aldığımız response bilgisini alıp handleResultGoogleSignIn metoduna gönderiyoruz.

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == code) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
handleResultGoogleSignIn(result);
}
}

ve artık kullanıcı bilgileri bir butona tıklanması ile elimizde

private void handleResultGoogleSignIn(GoogleSignInResult result) {
if (result.isSuccess()) {
GoogleSignInAccount account = result.getSignInAccount();
String socialFirstName = account.getGivenName();
String socialLastName = account.getFamilyName();
String socialEmail = account.getEmail();
String socialUserId = account.getId();

}
}

peki kullanıcı logout olmak isterse? Auth.GoogleSignInApi.signOut metodu çağırılarak kullanıcı google oturumu sonlandırılabilir.

private void googleLogout() {
Auth.GoogleSignInApi.signOut(googleApiClient).setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(@NonNull Status status) {

}
});
}

ve son hali ile Google kullanıcı girişi örneği oluşturulmuştur.

google sign-in

Proje kaynak kodlarına Github hesabımdan erişebilirsiniz.

Yararlı olması dileğiyle :)

--

--