Uygulamanıza Google+ entegrasyonunu nasıl yapacağınızı, biliyor musunuz?
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….
Ö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.
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.
1 2 |
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.
1 |
<uses-permission android:name="android.permission.INTERNET" /> |
3-Xml Kodları
activity_main.xml kodları:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
<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ı:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 |
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 github linkine tıklamak.
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/
tebrikler güzel anlatımınızla faydalı bilgi. devamını dilerim.