يفترض إطار عمل محوّل المزامنة أن محوّل المزامنة ينقل البيانات بين مساحة تخزين الجهاز. المرتبطة بمساحة تخزين على الحساب والخادم تتطلب تسجيل الدخول. لهذا السبب، أن تقدم مكونًا يُسمى برنامج المصادقة كجزء من عملية المزامنة محوّل. يتم توصيل هذا المكوّن بحسابات Android وإطار عمل المصادقة توفّر واجهة قياسية للتعامل مع بيانات اعتماد المستخدم مثل معلومات تسجيل الدخول.
حتى إذا كان تطبيقك لا يستخدم حسابات، سيظل عليك توفير مكوّن برنامج مصادقة.
إذا كنت لا تستخدم الحسابات أو تسجيل الدخول إلى الخادم، سيتم التعامل مع المعلومات التي يعالجها برنامج المصادقة
بحيث يمكنك توفير مكون مصادقة يحتوي على طريقة كعب
وعمليات التنفيذ. وعليك أيضًا تقديم قيمة Service
مرتبطة.
يسمح لإطار عمل محول المزامنة باستدعاء طرق المصادقة.
يشرح هذا الدرس كيفية تعريف جميع أجزاء برنامج المصادقة عبر بروتوكول التوزُّع القصير
تلبية متطلبات إطار عمل محوّلات المزامنة. إذا كنت بحاجة إلى تقديم وصف
برنامج المصادقة الذي يتعامل مع حسابات المستخدمين، اطلع على المستندات المرجعية
AbstractAccountAuthenticator
إضافة مكوِّن مصادقة كعب
لإضافة أحد مكوّنات المصادقة البديلة إلى تطبيقك، عليك إنشاء فئة تمتد
AbstractAccountAuthenticator
، ثم تخلّص من الطرق المطلوبة،
إما من خلال عرض null
أو طرح استثناء.
يعرض المقتطف التالي مثالاً على فئة مصادقة التشعّب:
Kotlin
/* * Implement AbstractAccountAuthenticator and stub out all * of its methods */ class Authenticator(context: Context) // Simple constructor : AbstractAccountAuthenticator(context) { // Editing properties is not supported override fun editProperties(r: AccountAuthenticatorResponse, s: String): Bundle { throw UnsupportedOperationException() } // Don't add additional accounts @Throws(NetworkErrorException::class) override fun addAccount( r: AccountAuthenticatorResponse, s: String, s2: String, strings: Array<String>, bundle: Bundle ): Bundle? = null // Ignore attempts to confirm credentials @Throws(NetworkErrorException::class) override fun confirmCredentials( r: AccountAuthenticatorResponse, account: Account, bundle: Bundle ): Bundle? = null // Getting an authentication token is not supported @Throws(NetworkErrorException::class) override fun getAuthToken( r: AccountAuthenticatorResponse, account: Account, s: String, bundle: Bundle ): Bundle { throw UnsupportedOperationException() } // Getting a label for the auth token is not supported override fun getAuthTokenLabel(s: String): String { throw UnsupportedOperationException() } // Updating user credentials is not supported @Throws(NetworkErrorException::class) override fun updateCredentials( r: AccountAuthenticatorResponse, account: Account, s: String, bundle: Bundle ): Bundle { throw UnsupportedOperationException() } // Checking features for the account is not supported @Throws(NetworkErrorException::class) override fun hasFeatures( r: AccountAuthenticatorResponse, account: Account, strings: Array<String> ): Bundle { throw UnsupportedOperationException() } }
Java
/* * Implement AbstractAccountAuthenticator and stub out all * of its methods */ public class Authenticator extends AbstractAccountAuthenticator { // Simple constructor public Authenticator(Context context) { super(context); } // Editing properties is not supported @Override public Bundle editProperties( AccountAuthenticatorResponse r, String s) { throw new UnsupportedOperationException(); } // Don't add additional accounts @Override public Bundle addAccount( AccountAuthenticatorResponse r, String s, String s2, String[] strings, Bundle bundle) throws NetworkErrorException { return null; } // Ignore attempts to confirm credentials @Override public Bundle confirmCredentials( AccountAuthenticatorResponse r, Account account, Bundle bundle) throws NetworkErrorException { return null; } // Getting an authentication token is not supported @Override public Bundle getAuthToken( AccountAuthenticatorResponse r, Account account, String s, Bundle bundle) throws NetworkErrorException { throw new UnsupportedOperationException(); } // Getting a label for the auth token is not supported @Override public String getAuthTokenLabel(String s) { throw new UnsupportedOperationException(); } // Updating user credentials is not supported @Override public Bundle updateCredentials( AccountAuthenticatorResponse r, Account account, String s, Bundle bundle) throws NetworkErrorException { throw new UnsupportedOperationException(); } // Checking features for the account is not supported @Override public Bundle hasFeatures( AccountAuthenticatorResponse r, Account account, String[] strings) throws NetworkErrorException { throw new UnsupportedOperationException(); } }
ربط برنامج المصادقة بإطار العمل
لوصول إطار عمل محول المزامنة إلى تطبيق المصادقة، يجب إنشاء حد الخدمة المناسبة لذلك توفّر هذه الخدمة كائن ربط Android يتيح إنشاء إطار العمل. الاتصال بالمصادق وتمرير البيانات بين برنامج المصادقة وإطار العمل
يوضِّح لك المقتطف التالي كيفية تحديد قيمة Service
المحدّدة:
Kotlin
/** * A bound Service that instantiates the authenticator * when started. */ class AuthenticatorService : Service() { // Instance field that stores the authenticator object private lateinit var mAuthenticator: Authenticator override fun onCreate() { // Create a new authenticator object mAuthenticator = Authenticator(getApplicationContext()) } /* * When the system binds to this Service to make the RPC call * return the authenticator's IBinder. */ override fun onBind(intent: Intent?): IBinder = mAuthenticator.iBinder }
Java
/** * A bound Service that instantiates the authenticator * when started. */ public class AuthenticatorService extends Service { ... // Instance field that stores the authenticator object private Authenticator mAuthenticator; @Override public void onCreate() { // Create a new authenticator object mAuthenticator = new Authenticator(getApplicationContext()); } /* * When the system binds to this Service to make the RPC call * return the authenticator's IBinder. */ @Override public IBinder onBind(Intent intent) { return mAuthenticator.getIBinder(); } }
أضِف ملف البيانات الوصفية للمصادقة.
لتوصيل مكوّن المصادقة بمحوّل المزامنة وأُطر عمل الحساب، يجب
وتوفر إطار العمل هذا ببيانات تعريف تصف المكون. توضح هذه البيانات الوصفية
نوع الحساب الذي أنشأته لمحوّل المزامنة مع توضيح عناصر واجهة المستخدم
التي يعرضها النظام إذا كنت تريد إظهار نوع حسابك للمستخدم. الإفصاح عن هذا المحتوى
البيانات الوصفية في ملف XML مخزَّن في دليل /res/xml/
ضمن مشروع تطبيقك.
يمكنك تسمية الملف، على الرغم من أنه يطلق عليه عادةً authenticator.xml
.
يحتوي ملف XML هذا على عنصر واحد <account-authenticator>
بالسمات التالية:
-
android:accountType
-
يتطلب إطار عمل محوّل المزامنة أن يكون لكل محوّل مزامنة نوع حساب، في النموذج
لاسم المجال. ويستخدم إطار العمل نوع الحساب كجزء من محوّل المزامنة
تحديد الهوية الداخلي. بالنسبة للخوادم التي تتطلب تسجيل الدخول، نوع الحساب مع
يتم إرسال حساب المستخدم إلى الخادم كجزء من بيانات اعتماد تسجيل الدخول.
إذا كان الخادم الذي تستخدمه لا يتطلب تسجيل الدخول، عليك أيضًا تقديم نوع الحساب. بالنسبة إلى ، استخدم اسم مجال تتحكم فيه. وبينما يستخدمه إطار العمل لإدارة المزامنة، فلن يتم إرسال القيمة إلى الخادم.
-
android:icon
-
الإشارة إلى قابل للرسم
مورد يحتوي على رمز. إذا جعلت محول المزامنة مرئيًا من خلال تحديد
السمة
android:userVisible="true"
فيres/xml/syncadapter.xml
، فيجب عليك تقديم مورد الرمز هذا. ويظهر في قسم الحسابات من تطبيق الإعدادات على النظام. -
android:smallIcon
-
الإشارة إلى قابل للرسم
مورد يحتوي على نسخة صغيرة من الرمز. يمكن استخدام هذا المورد بدلاً من
android:icon
في قسم الحسابات ضمن تطبيق "الإعدادات" على النظام، اعتمادًا على حجم الشاشة. -
android:label
-
سلسلة قابلة للترجمة تحدد نوع الحساب للمستخدمين. إذا أعددت محول المزامنة
مرئيًا من خلال تحديد السمة
android:userVisible="true"
فيres/xml/syncadapter.xml
، فعليك تقديم هذه السلسلة. يظهر الإعلان في قسم قسم الحسابات من تطبيق إعدادات النظام، بجانب الرمز الذي تحدده برنامج المصادقة.
يعرض المقتطف التالي ملف XML الخاص ببرنامج المصادقة الذي أنشأته سابقًا:
<?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"/>
يُرجى تعريف برنامج المصادقة في البيان.
في خطوة سابقة، أنشأت علامة Service
مرتبطة تربط تطبيق المصادقة.
إلى إطار عمل محول المزامنة. لتعريف النظام بهذه الخدمة، يُرجى تعريفها في تطبيقك.
عن طريق إضافة ما يلي
<service>
كعنصر ثانوي في
<application>
:
<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>
إعداد فلتر يتم تشغيله بواسطة إجراء intent
android.accounts.AccountAuthenticator
، الذي يرسله النظام لتشغيل
برنامج المصادقة. عند تشغيل الفلتر، يبدأ النظام في AuthenticatorService
،
ملف Service
المرتبط الذي قدّمته من أجل التفاف برنامج المصادقة.
تشير رسالة الأشكال البيانية
<meta-data>
يُعلِن عن البيانات الوصفية لأداة المصادقة. تشير رسالة الأشكال البيانية
android:name
البيانات الوصفية بإطار عمل المصادقة. تشير رسالة الأشكال البيانية
android:resource
اسم ملف البيانات الوصفية المصادق الذي قمت بإنشائه مسبقًا.
بالإضافة إلى برنامج مصادقة، يتطلب محوّل المزامنة أيضًا موفّر محتوى. وإذا لم تستخدم أحد موفّري المحتوى حاليًا، انتقِل إلى الدرس التالي لتعلّم كيفية إنشاء نص بديل. وإلا، فانتقل إلى الدرس إنشاء محوّل مزامنة.