Uyarı: Bu doküman kullanımdan kaldırıldı. OAuth 2.0 kullanarak Android uygulamalarını yetkilendirme hakkında bilgi edinmek için lütfen şuraya bakın: Android Play Hizmetleri Yetkilendirmesi belgeleri.
Bu dokümanda, Android'de OAuth 2.0 ile Tasks API'nin nasıl kullanılacağı açıklanmaktadır. Bu makalede, kullanıcıların Google Görevler'e erişmek için kullanabileceği yetkilendirme mekanizmaları ve Android uygulamanızda kullanıma hazır bir Görevler API hizmeti Nesnesi'ne nasıl sahip olabileceğiniz açıklanmaktadır.
Android uygulamanızın Görevler API'sini kullanabilmesi için şu adımları uygulamanız gerekir:
- Kullanıcının Google Hesabı'nı seçin
- Görev API için AccountManager'dan OAuth 2.0 erişim jetonu alın
- Projenizi belirleyin ve Görevler hizmet nesnesini ayarlayın
- Görevler API'sine çağrı yapma
Google'ın istemci kitaplığını içe aktarma
Bu belgede bulacağınız örnekler, Java için Google API'leri istemci kitaplığını kullanır. Aşağıdaki jar'ları Android uygulamanıza eklemeniz gerekiyor. Bunu yapmak için aşağıda listelenen jar'ları Android uygulamanızın kök kısmındaki /assets klasörüne yerleştirin. Ayrıca, bu doküman eskidikçe yeni sürümleri de kontrol edin.
Google API'leri istemci kitaplığı jar'larını ve Android uzantılarını (tümü google-api-java-client-1.4.1-beta.zip kısmı) içe aktarın:
- google-api-client-1.4.1-beta.jar
- google-api-client-extensions-android2-1.4.1-beta.jar
- google-api-client-googleapis-1.4.1-beta.jar
- google-api-client-googleapis-extensions-android2-1.4.1-beta.jar
Görevler'e özgü jar dosyasını içe aktarın:
Bağımlılıkları içe aktarın (tümü google-api-java-client-1.4.1-beta.zip bölümünün parçasıdır):
- commons-codec-1.3.jar
- gson-1.6.jar
- guava-r09.jar
- httpclient-4.0.3.jar
- httpcore-4.0.1.jar
- jackson-core-asl-1.6.7.jar
- jsr305-1.3.9.jar
Android'deki Google hesapları
Android 2.0'dan itibaren AccountManager, ortamınıza kaydettiğiniz, Ayarlar > Hesaplar ve senkronizasyonu. Özellikle yetkilendirme akışını yönetir ve API'leri kullanarak verilere erişmek için gereken yetkilendirme jetonlarını oluşturabilir.

AccountManager kullanarak hesap almak ve yetkilendirme jetonları istemek için Android uygulamanızın manifest dosyasına aşağıdaki izinleri eklemeniz gerekir:
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
Görevler'e erişmek istediğiniz Google hesabını almak için AccountManager'ı (Hesap Yöneticisi) kullanabilirsiniz. AccountManager yalnızca Google hesaplarını değil, diğer tedarikçi firmaların hesaplarını da yönetir. Bu nedenle, aşağıdaki kodu kullanarak özel olarak Google hesaplarını istemeniz gerekir:
AccountManager accountManager = AccountManager.get(activity);
Account[] accounts = accountManager.getAccountsByType("com.google");
Alternatif olarak, Java için Google API'leri istemci kitaplığı, yalnızca Google hesaplarını işleyen bir GoogleAccountManager ile birlikte gelir:
GoogleAccountManager googleAccountManager = new GoogleAccountManager(activity);
Account[] accounts = googleAccountManager.getAccounts();
Android cihazda birden fazla Google Hesabı varsa, aşağıdaki gibi bir iletişim kutusuyla kullanıcıya kullanmak istediği hesabı sormalısınız:

Etkinliğinizin onCreateDialog yönteminde aşağıdaki Switch/case kodunu kullanarak böyle bir iletişim kutusu oluşturabilirsiniz:
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_ACCOUNTS:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Select a Google account");
final Account[] accounts = accountManager.getAccountsByType("com.google");
final int size = accounts.length;
String[] names = new String[[]size];
for (int i = 0; i < size; i++) {
names[[]i] = accounts[[]i].name;
}
builder.setItems(names, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// Stuff to do when the account is selected by the user
gotAccount(accounts[[]which]);
}
});
return builder.create();
}
return null;
}
showDialog(DIALOG_ACCOUNTS) çağrıldığında hesap seçici iletişim kutusu görüntülenir.
Android'de Google API'leri yetkilendirme akışı
Kullanıcı bir hesap seçtiğine göre artık AccountManager'dan Task API için bir OAuth 2.0 erişim jetonu vermesini isteyebiliriz. Bu, AccountManager.getAuthToken() yöntemi çağrılır. AccountManager.getAuthToken() çağrısı sırasında, AccountManager Google API'leri yetkilendirme uç noktasıyla iletişime geçer. AccountManager yetkilendirme jetonunu aldığında, yöntem çağrısında tanımladığınız AccountManagerCallback'i çalıştırır:
manager.getAuthToken(account, AUTH_TOKEN_TYPE, null, activity, new AccountManagerCallback<Bundle>() {
public void run(AccountManagerFuture<Bundle> future) {
try {
// If the user has authorized your application to use the tasks API
// a token is available.
String token = future.getResult().getString(AccountManager.KEY_AUTHTOKEN);
// Now you can use the Tasks API...
useTasksAPI(token);
} catch (OperationCanceledException e) {
// TODO: The user has denied you access to the API, you should handle that
} catch (Exception e) {
handleException(e);
}
}
}, null);
Bildiğiniz gibi Android AccountManager, OAuth 2.0 için deneysel destek sunmaktadır. AUTH_TOKEN_TYPE değerini ayarlarken, erişmek istediğiniz API'nin kapsamının önüne oauth2: ifadesini eklemeniz yeterlidir. Görevler API'si için şunları kullanabilirsiniz:
String AUTH_TOKEN_TYPE = "oauth2:https://www.googleapis.com/auth/tasks";
Yukarıdaki değer AUTH_TOKEN_TYPE olarak kullanılırken sorun, yetkilendirme iletişim kutusunda, erişmek istediğiniz Google ürününün adı olarak oauth2:https://www.googleapis.com/auth/tasks dizesinin görüntülenmesidir. Bu sorunu çözmek amacıyla, Görevler API'si için kullanıcıların okuyabileceği özel AUTH_TOKEN_TYPE takma adları sunulmuştur. Bunlar, OAuth 2.0 kapsamını kullanmaya eşdeğerdir. Örneğin:
String AUTH_TOKEN_TYPE = "Manage your tasks";
AUTH_TOKEN_TYPE takma adını da kullanabilirsiniz Tasks API salt okunur'a eşdeğer görevlerinizi görüntüleme kapsam: oauth2:https://www.googleapis.com/auth/tasks.readonly.
AccountManager.getAuthToken() çağrısı sırasında, AccountManager uygulamanızın Görevler API'sine erişme yetkisi olup olmadığını kontrol eder. Uygulamanız henüz yetkilendirilmemişse AccountManager, kullanıcıya bir yetkilendirme iletişim kutusu gösterir. Bu iletişim kutusunda uygulamanızın Görevleri API'sini kullanmasına izin verebilmesi veya reddetebilmesi için kullanıcıya bir yetkilendirme iletişim kutusu gösterilir.

Kullanıcı, uygulamanızın Görevler API'sine erişimini reddederse future.getResult() çağrısı sırasında bir OperationCanceledException oluşturulur. Bunu incelikle ele almanız gerekir. Örneğin, hesabı tekrar seçmenizi isteyebilir veya erişimi yeniden yetkilendirmenin düğmesini içeren bir mesaj görüntüleyebilirsiniz.
Uygulamanızı tanımlama ve Tasks API hizmeti nesnesini ayarlama
Artık uygulamanıza Tasks API'ye erişim yetkisi verildiğine ve kendisine bir erişim jetonu verildiğine göre, Google API'leri Konsolu'ndaki bir projeden almanız gereken bir API Anahtarı'na da ihtiyacınız vardır. Bu anahtar, Görevler API'si çağrıları yapmak için zorunludur. Bunun için aşağıdaki adımları uygulayın:
- Proje oluşturun veya mevcut bir projeyi kullanın
- Görevler API'sini AÇIK duruma getirerek projenizde Tasks API'yi etkinleştirin
- API Anahtarı, API Erişimi > Basit API Erişimi > API Anahtarı

API Anahtarı, uygulamanızı tanımladığı için zorunludur. Bu nedenle, API'nin kotadan düşmesine ve projeniz için tanımlanmış kota kurallarını kullanmasına olanak tanır. Görevler hizmet Nesnenizde API Anahtarını belirtmeniz gerekir:
useTasksAPI(String accessToken) {
// Setting up the Tasks API Service
HttpTransport transport = AndroidHttp.newCompatibleTransport();
AccessProtectedResource accessProtectedResource = new GoogleAccessProtectedResource(accessToken);
Tasks service = new Tasks(transport, accessProtectedResource, new JacksonFactory());
service.accessKey = INSERT_YOUR_API_KEY;
service.setApplicationName("Google-TasksSample/1.0");
// TODO: now use the service to query the Tasks API
}
accessToken yalnızca belirli bir süre için geçerlidir. Bu nedenle, süresi dolduğunda yeni bir tane almanız gerekir. Bunu yönetmenin 2 yolu vardır:
- API üzerinden her istek gönderdiğinizde AccountManager'a bir accessToken isteğinde bulunun. AccountManager jetonu önbelleğe aldığından bu çözüm kabul edilebilir.
- 403 hatası alana kadar accessToken'ı kullanmaya devam edin. Bu hatada AccountManager'a yeni bir jeton gönderilmesini isteyin.
Görevleri API Kullanarak Manipüle Etme
Bu noktada, Görevler API'si Geliştirici Kılavuzu'na göre API'yi sorgulamak için kullanabileceğiniz, eksiksiz bir Görevler API hizmeti nesnesiniz olmalıdır. Örneğin:
// Getting all the Task lists
List
Android uygulamanızın manifest dosyasına internete erişim iznini eklemeyi unutmayın. Aksi takdirde, Görevler API'si uç noktalarına yapılan yukarıdaki istekler başarısız olur:
<uses-permission android:name="android.permission.INTERNET" />
Örnek uygulama
Android'de Görevler API'sini ve OAuth 2.0'ı kullanmaya başlamanıza yardımcı olmak amacıyla kısa süre önce Java için Google API'leri İstemci Kitaplığı'nın örnek deposuna yeni bir örnek ekledik. Örnek, Tasks API'yi kullanmak için yetkilendirme isteyen ve varsayılan görev listesinin görevlerini ListView'da görüntüleyen basit ancak tam olarak çalışan bir Android uygulamasıdır.

Örneği çalıştırmaya başlamak için bu talimatları uygulayın ve geri bildirimlerinizi veya sorularınızı Google Tasks API Forumu'nda yayınlamaktan çekinmeyin.