Android Uygulamalarına Google Plus Entegrasyonu

Uygulamanıza Google+ entegrasyonunu nasıl yapacağınızı, biliyor musunuz?

plus2

Mobil uygulama geliştiricileri sosyal medya ağlarının (Facebook, Twitter, Google+ vb.) API’lerini kendi mobil uygulamalarına entegre ederek, kullanıcıya kolaylıklar sağlamaktadır. Kullanıcı, mobil uygulama üzerinden sosyal medya hesaplarıyla giriş yaptığında, uygulama için ayrı bir kayıt formu doldurmadan,  kendi sosyal medya hesabı ile kolayca giriş yapabilmesi, kullanıcının profil bilgilerini gösterme, duvarına yazı gönderme gibi birçok işlevi mobil uygulama üzerinden yapabilmektedir.

Android Uygulamasında Facebook Entegrasyonu başlıklı blog yazımda, bir Android uygulamasına Facebook API’sini entegre ederek, kullanıcının; Facebook hesabına giriş, duvarına yazı gönderme ve profil bilgilerini gösterme işlemlerini aktarmıştım. Bu makalemde ise bir Android uygulamasına Google Plus API’sini entegre ederek, kullanıcının Google Plus hesabına giriş ve kullanıcı bilgilerinin uygulama içinde gösterilmesini anlatacağım.

İsterseniz ilk önce örneğimizin nasıl bir sonuçlandığına bakalım.Örneğin görünümü aşağıdaki gibidir….
31
Örnek projemizi kodlamaya başlamadan önce bazı işlemler yapmamız gerekmektedir.Bu işlemleri sırayla yapmaya başlayalım.

1- Google Play Services Yükleme
Google haritayla ilgili bir geliştirme yapacağımızdan dolayı, Google Play Services yüklememiz gerekmektedir. Bunun için Sdk manager’ı açıp Extras bölümünden Google Play Services işaretleyip, yükleme işlemini gerçekleştirin.
googleplayservices

2-Google+API’yi Console’da Aktif Etme

Google+ API’yi Console’da aktif etme işlemini aşağıdaki video eğitimimi izleyerek öğrenebilirsiniz.

Şimdi ise projenin kodlarını yazmaya başlayalım…

Android Uygulamada Yapılacak İlgili Ayarlar ve Kod Yazımı

1-Oluşturduğumuz Android Projeye İlgili Kütüphaneleri Yükleme
Android Studio Ide ile oluşturduğum projemin app dizinin altındaki build.gradle dosyasını açıyoruz. Dependencies kod bloklarının arasına aşağıdaki kodları yerleştirerek Google Account Login ve Picasso kütüphanelerini yüklüyoruz.

compile 'com.google.android.gms:play-services-auth:8.4.0'
compile 'com.squareup.picasso:picasso:2.5.2'

2-AndroidManifest Dosyasına İlgili Ayarları Ekleme

AndroidManifest dosyasına, kullanıcının resmini gösterebilmek için internet iznimizi eklemeliyiz.

<uses-permission android:name="android.permission.INTERNET" />

3-Xml Kodları

activity_main.xml kodları:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/blue_grey_700"
android:orientation="vertical"
android:weightSum="4"
tools:context=".legacy.MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="3"
android:gravity="center_horizontal"
android:orientation="vertical">
<TextView
android:id="@+id/title_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:text="@string/title_text"
android:gravity="center"
android:textColor="@android:color/white"
android:textSize="25sp" />
<ImageView
android:id="@+id/imgProfilePic"
android:layout_width="200dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginBottom="10dp"
android:gravity="center" />
<TextView
android:id="@+id/status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/signed_out"
android:textColor="@android:color/white"
android:textSize="14sp" />
<TextView
android:id="@+id/detail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fadeScrollbars="true"
android:gravity="center"
android:maxLines="5"
android:padding="10dp"
android:scrollbars="vertical"
android:textColor="@android:color/white"
android:textSize="14sp" />
</LinearLayout>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@color/blue_grey_900">
<com.google.android.gms.common.SignInButton
android:id="@+id/sign_in_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:visibility="visible"
tools:visibility="gone" />
<LinearLayout
android:id="@+id/sign_out_and_disconnect"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:orientation="horizontal"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:visibility="gone"
tools:visibility="visible">
<Button
android:id="@+id/sign_out_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/sign_out"
android:theme="@style/ThemeOverlay.MyDarkButton" />
<Button
android:id="@+id/disconnect_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/disconnect"
android:theme="@style/ThemeOverlay.MyDarkButton" />
</LinearLayout>
</RelativeLayout>
</LinearLayout>

4-Java Kodları

MainActivity.java kodları:

import android.app.ProgressDialog;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import com.google.android.gms.auth.api.Auth;
import com.google.android.gms.auth.api.signin.*;
import com.google.android.gms.common.*;
import com.google.android.gms.common.api.*;
import com.squareup.picasso.Picasso;
public class MainActivity  extends AppCompatActivity implements
GoogleApiClient.OnConnectionFailedListener,
View.OnClickListener {
private static final String TAG = "MainActivity";
private static final int RC_SIGN_IN = 9001;
private GoogleApiClient mGoogleApiClient;
private TextView mStatusTextView;
private ProgressDialog mProgressDialog;
private ImageView imgProfilePic;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Views
mStatusTextView = (TextView) findViewById(R.id.status);
imgProfilePic = (ImageView) findViewById(R.id.imgProfilePic);
// Button listener tanımladım...
findViewById(R.id.sign_in_button).setOnClickListener(this);
findViewById(R.id.sign_out_button).setOnClickListener(this);
findViewById(R.id.disconnect_button).setOnClickListener(this);
// Kullanıcının ID, email adres, ve basit profil bilgilerini alabilmek için sign-in(oturum açma) ayarı yapıyoruz
// ID ve basit profil bilgileri DEFAULT_SIGN_IN içinde barınmaktadır
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestScopes(new Scope(Scopes.DRIVE_APPFOLDER))
.requestEmail()
.build();
//gso değişkeninde belirtilen seçeneklerle ve Google Sign-In API ile bağlantı kurmak için GoogleApiClient yapılandırdım.
mGoogleApiClient = new GoogleApiClient.Builder(this)
.enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
}
@Override
public void onStart() {
super.onStart();
OptionalPendingResult<GoogleSignInResult> opr = Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient);
if (opr.isDone()) {
//Kullanıcının önbelleğe kimlik bilgileri geçerli ise,  OptionalPendingResult tamamlancak ve
//GoogleSignInResult anında kullanılabilir olacak.
GoogleSignInResult result = opr.get();
handleSignInResult(result);
} else {
//Kullanıcının daha önce telefonunda oturum açık değilse ya da  the otrum açma süresi dolmuş ise,
//bu asekron çalısan bölüm kullanıcı girişini sağlıcaktır
showProgressDialog();
opr.setResultCallback(new ResultCallback<GoogleSignInResult>() {
@Override
public void onResult(GoogleSignInResult googleSignInResult) {
hideProgressDialog();
handleSignInResult(googleSignInResult);
}
});
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
// GoogleSignInApi.getSignInIntent(...); döndüğü sonuc..
if (requestCode == RC_SIGN_IN) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
handleSignInResult(result);
}
}
//Kullanıcın oturum açıp, açamadığını dönen metod
private void handleSignInResult(GoogleSignInResult result) {
if (result.isSuccess()) {
// Oturum açma başarılı..
GoogleSignInAccount acct = result.getSignInAccount();
// Kullanıcının adını textview set ettik..
mStatusTextView.setText(getString(R.string.signed_in_fmt, acct.getDisplayName()));
// Kullanıcının resimin bulunduğu url alıp, bu resmi Picasso kütüphanesi ile imageview'de gösterdik
Uri urldisplay =acct.getPhotoUrl();
Picasso.with(MainActivity.this).load(String.valueOf(urldisplay)).into(imgProfilePic);
//Kimlik denetimi yapıldığını göstermek için updateUI true  yapıldı.
updateUI(true);
} else {
//Oturum açma başarısız...
updateUI(false);
}
}
//Oturum açılcağı zaman çalışan metod
private void signIn() {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, RC_SIGN_IN);
}
//Oturum kapatılcağı zaman çalışan metod
private void signOut() {
Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
new ResultCallback<Status>() {
@Override
public void onResult(Status status) {
updateUI(false);
}
});
}
private void revokeAccess() {
Auth.GoogleSignInApi.revokeAccess(mGoogleApiClient).setResultCallback(
new ResultCallback<Status>() {
@Override
public void onResult(Status status) {
updateUI(false);
}
});
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
Log.d(TAG, "onConnectionFailed:" + connectionResult);
}
private void showProgressDialog() {
if (mProgressDialog == null) {
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setMessage(getString(R.string.loading));
mProgressDialog.setIndeterminate(true);
}
mProgressDialog.show();
}
private void hideProgressDialog() {
if (mProgressDialog != null && mProgressDialog.isShowing()) {
mProgressDialog.hide();
}
}
private void updateUI(boolean signedIn) {
if (signedIn) {
findViewById(R.id.sign_in_button).setVisibility(View.GONE);
findViewById(R.id.sign_out_and_disconnect).setVisibility(View.VISIBLE);
} else {
mStatusTextView.setText(R.string.signed_out);
imgProfilePic.setImageDrawable(null);
findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
findViewById(R.id.sign_out_and_disconnect).setVisibility(View.GONE);
}
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.sign_in_button:
signIn();
break;
case R.id.sign_out_button:
signOut();
break;
case R.id.disconnect_button:
revokeAccess();
break;
}
}
}

Son olarak ufak bir not: Bu yukarıda anlattığım projemin kodlarını indirmek isterseniz; yapmanız gereken tek şey aşağıya koyduğum KODLARI İNDİR resmine tıklamak.

download

Hayatınızın daha da kolaylaşması dileğiyle…

Kaynaklar
1- https://github.com/googlesamples/google-services
2- http://www.androidhive.info/2014/02/android-login-with-google-plus-account-1/

Kategori Genel
Etiketler