Mobil Programlama

Android

Stub Authenticator Oluşturmak

Lisans: Creative Commons 26.11.2020 tarihinde güncellendi
Bakabileceğiniz Etiketler: Eğitmen: Geleceği Yazanlar Ekibi

Sync Adapter çatısı, Sync Adapter'ınızın, veri aktarım işini, bir hesapla ilişkilendirilmiş depolama alanı ve giriş için izin gerektiren sunucu arasında yaptığınızı varsayar. Bu nedenle çatı, Sync Adapter'ınızın bir parçası olarak "Authenticator" (Doğrulayıcı) isimli bir bileşeni sağlamanızı bekler. Bu bileşen Android hesaplarını ve kimlik doğrulama çatısını birleştirir ve kullanıcının giriş bilgileri gibi bilgilerini yönetmek için standart bir arayüz sunar.

Uygulamanız kullanıcı hesaplarını (Cihazda kayıtlı olan) kullanmıyorsa bile bir doğrulayıcı bileşeni oluşturmanız gerekiyor. Eğer kullanıcı hesaplarını kullanmıyorsanız veya sunucu girişi yapmıyorsanız, doğrulayıcı tarafından idare edilen bilgi esgeçilir ve bu sayede belli bağlantı işlerini gerçekleştiren ufak tefek metotları olan bir doğrulayıcı sağlayabilirsiniz. Bir yandan da bir Service'e ihtiyacınız var. Bu servis, Sync Adapter'ın doğrulayıcının metotlarını çağırmasını sağlar.

Bu eğitim içeriğinde Sync Adapter uygulama çatısının bütün gereksinimlerini tamamlamak için gerekli olan bir kimlik doğrulama aracısının tüm parçalarını tanımlamayı öğreneceksiniz. Eğer kullanıcı hesaplarını yöneten gerçek bir doğrulayıcı sağlamak zorundaysanız AbstractAccountAuthenticator belgesini okuyabilirsiniz.

 

Bir kimlik doğrulama (authenticator) aracısı bileşeni eklemek

Uygulamanıza bir kimlik doğrulama aracısı bileşeni eklemek için AbstractAccountAuthenticator sınıfından türeyen bir sınıf oluşturun ve bütün gerekli metodları null döndürerek ya da hata fırlatarak devredışı bırakın.

Aşağıdaki kod parçası stub authenticator sınıfının bir örneğini göstermektedir:


public class Authenticator extends AbstractAccountAuthenticator {
    // yapılandırıcı metot
    public Authenticator(Context context) {
        super(context);
    }
    // Özellik değiştirmeyi desteklemiyoruz
    @Override
    public Bundle editProperties(
            AccountAuthenticatorResponse r, String s) {
        throw new UnsupportedOperationException();
    }
    // Ek hesaplar eklemiyoruz
    @Override
    public Bundle addAccount(
            AccountAuthenticatorResponse r,
            String s,
            String s2,
            String[] strings,
            Bundle bundle) throws NetworkErrorException {
        return null;
    }
    // kimlik bilgisi doğrulamak için gelen denemeleri reddet.
    @Override
    public Bundle confirmCredentials(
            AccountAuthenticatorResponse r,
            Account account,
            Bundle bundle) throws NetworkErrorException {
        return null;
    }
    // doğrulayıcı jetonunu desteklemiyoruz
    @Override
    public Bundle getAuthToken(
            AccountAuthenticatorResponse r,
            Account account,
            String s,
            Bundle bundle) throws NetworkErrorException {
        throw new UnsupportedOperationException();
    }
    // doğrulayıcı jetonu için etiketi desteklemiyoruz
    @Override
    public String getAuthTokenLabel(String s) {
        throw new UnsupportedOperationException();
    }
    // Kullanıcı bilgilerini yenilemeyi desteklemiyoruz
    @Override
    public Bundle updateCredentials(
            AccountAuthenticatorResponse r,
            Account account,
            String s, Bundle bundle) throws NetworkErrorException {
        throw new UnsupportedOperationException();
    }
    // kullanıcı hesabı için özellikleri kontrol etmeyi desteklemiyoruz
    @Override
    public Bundle hasFeatures(
        AccountAuthenticatorResponse r,
        Account account, String[] strings) throws NetworkErrorException {
        throw new UnsupportedOperationException();
    }
}

 

Doğrulayıcıyı uygulama çatısına bağlamak (binding)

Sync Adapter çatısının doğrulayıcınıza erişmesini sağlamak için mutlaka bir servis (bound service) yazmalısınız. Bu servis, uygulama çatısının doğrulayıcınıza ulaşmasını ve aralarında veri aktarımı yapmasını sağlayan bir Android bağlayıcı (binder) nesnesi oluşturur.

Uygulama çatısı bu Service'i ilk kez doğrulayıcıya (authenticator) erişim ihtiyacı olduğunda başlattığından dolayı, kendiniz doğrulayıcıyı örneklemek (instantiate) istediğinizde Service.onCreate() metodunun içinde doğrulayıcının (authenticator) yapılandırıcısını çağırabilirsiniz.

Aşağıdaki kod parçası bir Service'i nasıl tanımlayacağınızı gösterir:


//onCreate() metodunda doğrulayıcıyı (authenticator) örnekleyen bir servis
public class AuthenticatorService extends Service {
    ...
    // Doğrulayıcı nesnesini tutan alan.
    private Authenticator mAuthenticator;
    @Override
    public void onCreate() {
        // Yeni bir doğrulayıcı nesnesi oluşturuyoruz
        mAuthenticator = new Authenticator(this);
    }
    /*
     * Sistem Service'e eklemlendiğinde (bind) RPC çağrısı yapabilmek için 
     * doğrulayıcının IBinder'ını döndürüyoruz
     */
    @Override
    public IBinder onBind(Intent intent) {
        return mAuthenticator.getIBinder();
    }
}

 

Doğrulayıcı metadata dosyası eklemek

Doğrulayıcı bileşeninizi Sync Adapter'a ve kullanıcı hesabı çatısına (Account Framework) eklemek için bu çatılara bileşeninizi tanıtan bir metadata koymalısınız. Bu metadata, Sync Adapter için yarattığınız hesabın tipini ve bunu kullanıcıya görünür kılmak için gerekli kullanıcı arayüzü elemanlarını tanımlar. Bu metadatayı /res/xml yolunda bulunan XML dosyası içinde tanımlayın. Dosyaya istediğiniz ismi verebilirsiniz. Varsayılan olarak authenticator.xml olarak tanımlanmıştır.

Bu XML dosyası tek bir <account-authenticator> elementi içerir. Bu element de aşağıdaki değerleri içerir:

android:accountType

Sync adapter çatısı her bir Sync Adapter için alan adı formatında bir hesap adı bilgisine ihtiyaç duyar. Çatı bu hesap tipini Sync Adapter'in dâhili kimliği olarak kullanır. Giriş yapmayı gerektiren sunucular için hesap tipi bir kullanıcı hesabıyla birlikte sunucuya giriş referansı olarak gönderilir.

Sunucunuz giriş yapmayı gerektirmiyorsa da bir hesap tipi yaratmanız gerekir. Değeri içinse kontrolünüzdeki alan adını kullanın. Çatı bu değeri sadece Sync Adapter'inizi yönetmek için kullanacak, sunucuya göndermeyecek.

android:icon

Simge içeren Drawable kaynağını gösterir. Eğer Sync Adapter'ınızı res/xml/syncadapter.xml dosyası içinde android:userVisible="true" şeklinde görülebilir yapıyorsanız, bu simgeyi mutlaka kaynağa koymalısınız. Sistemin Ayarlar sekmesindeki Hesaplar kısmında görünür.

android:smallIcon

Küçük simge içeren Drawable kaynağını gösterir. Bu kaynak ekran büyüklüğüne göre Ayarlar bölümündeki Hesaplar kısmında ofandroid:icon'ın yerine kullanılabilir.

android:label

Hesap tipini kullanıcılara gösteren yerelleştirilebilen string'tir. Eğer Sync Adapter'ınızı res/xml/syncadapter.xml dosyası içinde android:userVisible="true" şeklinde görülebilir yapıyorsanız, bu string'i mutlaka kaynağa koymalısınız. Sistemin Ayarlar sekmesindeki Hesaplar kısmında doğrulayıcı için tanımladığınız simgenin yanında gözükür.

Aşağıdaki kod parçası daha önce doğrulayıcı için yarattığınız XML dosyasını gösterir:



<?xml version="1.0" encoding="utf-8"?>
<account-authenticator
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:accountType="example.com"
        android:icon="@drawable/ic_launcher"
        android:smallIcon="@drawable/ic_launcher"
        android:label="@string/app_name"/>

 

Doğrulayıcıyı manifest içinde belirtmek

Bir önceki adımda, doğrulayıcıyı Sync Adapter çatısına bağlayan Service'i yazdınız. Bu servisi sisteme tanıtmak için app manifest dosyanızda <application> elemanının altına aşağıdaki <service> elemanını ekleyin:



 <service
            android:name="com.example.android.syncadapter.AuthenticatorService">
        <intent-filter>
            <action android:name="android.accounts.AccountAuthenticator"/>
        </intent-filter>
        <meta-data
            android:name="android.accounts.AccountAuthenticator"
            android:resource="@xml/authenticator" />
    </service>

<intent-filter> elemanı, doğrulayıcıyı çalıştırmak için sistem tarafından gönderilen actionandroid.accounts.AccountAuthenticator uyarısı ile kontrol edilen bir filtre tanımlar. Filtre uyarıldığı zaman sistem doğrulayıcıyı sarmak için yarattığınız servis olan AuthenticatorService'i başlatır.

<meta-data> elemanı, doğrulayıcınız için metadatayı tanımlar. android:name özelliği meta-data'yı doğrulayıcı çatısına bağlar. android:resource elemanı daha önce yarattığınız doğrulayıcı metadata dosyasının ismini belirler.

Doğrulayıcının yanında Sync Adapter da bir içerik sağlayıcıya ihtiyaç duyar. Eğer uygulamanız bir içerik sağlayıcı kullanmıyorsa, bir sonraki eğitim içeriğine gidip bir Stub Content Provider nasıl yaratılır, öğrenin. Eğer uygulamanız bir içerik sağlayıcı zaten kullanıyorsa Creating a Sync Adapter eğitim içeriğine gidin.

 

Bu sayfadaki parçalar Android Open Source Project kapsamında oluşturulmuş ve paylaşılmış içeriğin küçük değişiklikler yapılmış halidir ve Creative Commons 2.5 Attribution License'ta belirlenen koşullara göre kullanılmıştır.

Bu eğitim içeriğinin özgün haline buradan ulaşabilirsiniz: Creating a Stub Authenticator

Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.

Orijinal source page: Creating a Stub Authenticator