56 : اندرويد : استخدام “واجهة برمجة التطبيقات” API الخاصة بالنسخ الاحتياطي Backup

facebook-group

 

ملاحظة : الموضوع عبارة عن حلقة من حلقات سلسلة برمجة وتطوير اندرويد Android Development

اندرويد :  استخدام واجهة برمجة التطبيقات API الخاصة بالنسبخ الاحتياطي Backup

السلام عليكم ورحمة الله وبركاته

 سوف نتعلم في هذا الدرس مايلي :

  1. تسجيل التطبيق ليصبح متاحا امامه خدمة النسخ الاحتياطي الخاصة باندرويد Register for the Android Backup Service
  2. وضع الاعدادات المناسبة في ملف ال manifest
  3. كتابة كود النسخ الاحتياطي الخاص بك Write Your Backup Agent
  4. طلب نسخ احتياطي Request a Backup
  5. استعادة المعطيات من نسخ احتياطي Restore from a Backup

يفضل ايضا الاطلاع على

Data Backup

عندما يقوم المستخدم بشراء جهاز جديد , او يعييد تهيئة اعداد جهاز موجود لديه مسبقا, فإن المستخدم يتوقع من “Google Play” بان يستعيد اعدادات التطبيق كما كانت من قبل على الجهاز بعد اعادة تهيئته, ويتم ايضا استعادة المعطيات المترافقة مع التطبيق كما كانت من قبل.

بشكل افتراضي, هذا لا يحدث في كل التطبيقات , وتضيع اعدادات المستخدم بشكل عام.

تقدم لنا واجهات برمجة التطبيقات الخاصة بالنسخ الاحتياطي backup API حلا خفيفا وبسيطا لحل هذا الاشكال وذلك في الحالات التي تكون فيها كمية المعطيات قليلة نسبيا (اقل من ميغابايت), – مثل اعدادات المستخدم user’s preferences , او ملاحظاته أو النقاط التي احرزها في لعبة ما , او غير ذلك من الحالات…

سيأخذكم هذا الدرس بجولة حول كيفية دمج وتكامل الواجهات الخاصة بالنسخ الاحتياطي Backup API ضمن تطبيقكم, وكيف يصبح بامكانكم استعادة المعطيات على الاجهزة الجديدة باستخدام Backup API.

تسجيل التطبيق ليصبح متاحا امامه خدمة النسخ الاحتياطي الخاصة باندرويد Register for the Android Backup Service

يتطلب هذا الدرس استخدام Android Backup Service, والذي بدوره يتطلب التسجيل registration.

اذهب إلى التسجيل مباشرة الموجود في الرابط التالي : register here. ما إن تنتهي من عملية التسجيل, حتى تظهر لك الخدمة تاغ xml لتضعها ضمن ملف ال manifest الخاصة بتطبيقك, والتي تبدوا كما يلي :

<meta-data android:name="com.google.android.backup.api_key"
android:value="ABcDe1FGHij2KlmN3oPQRs4TUvW5xYZ" />

لاحظ بان كل مفتاح نسخ احتياطي backup key يعمل فقط لاسم حزمة واحد محدد. في حال كانت لديك تطبيقات متعددة , فإنه يتوجب عليك ان تسجل كل واحد منها على حدى.

 وضع الاعدادات المناسبة في ملف ال manifest

إن استخدام خدمة النسخ الاحتياطي الخاصة باندرويد Android Backup Service  تتطلب خطوتين اخريين يجب القيام بهما في ملف ال manifest.

اولا: يجب التصريح عن اسم الصف class الذي سوف يتصرف على انه العميل المسؤول عن عملية النسخ الاحتياطي backup agent ,

ثانيا : يجب اضافة التاغ اعلاه على انها عنصر ابن لتاغ application.

مثال : بفرض ان الصف المسؤول عن عملية النسخ الاحتياطي له الاسم التالي : TheBackupAgent, في المثال التالي ادناه توضيح لما سيبدو عليه ملف ال Manifest عندما تقوم بتضمين تلك التاغ فيه.

<application android:label="MyApp"
             android:backupAgent="TheBackupAgent">
    ...
    <meta-data android:name="com.google.android.backup.api_key"
    android:value="ABcDe1FGHij2KlmN3oPQRs4TUvW5xYZ" />
    ...
</application>

كتابة كود النسخ الاحتياطي الخاص بك Write Your Backup Agent

الطريقة الاسهل لكتابة صف عبارة مسؤول عن عملية النسخ الاحتياطي تكمن في القيام بتوسعة extending صف موجود سابقا باسم BackupAgentHelperwrapper class .

إن عملية انشاء هذا الصف المساعد هي عبارة عن اجرائية بسيطة جدا.

فقط قم بإنشاء صف بنفس الاسم الذي قمت بتحديده في ملف ال manifest(كما في المثال السابق حيث كان اسم الصف TheBackupAgent), وقم بextend  للصف BackupAgentHelper. ومن ثم يجب عليك القيام ب override  للتابع onCreate().

 ضمن التابع onCreate(), انشأ BackupHelper.  هذا ال helper  عبارة عن صف متخصص في عملية النسخ الاحتياطي لانواع محددة من المعطيات.

يتضمن اطار عمل اندرويد نوعين من المساعدات helpers :

  1. FileBackupHelper
  2. SharedPreferencesBackupHelper

بعد ان تقوم بإنشاء ال helper (المساعد) والاشارة إليه في البيانات التي ترغب باجراء نسخ احتياطي لها , عندها فقط يتوجب عليك اضافته إلى BackupAgentHelper وذلك عبر استخدام تابع addHelper(), وتتم ايضا اضافة مفتاح Key يستخدم لاحقا لاستعادة المعطيات.

في معظم الحالات لا يتجاوز تنجيز وتحقيق الموضوع اكثر من 10 سطور.

فيما يلي مثال على عملية النسخ الاحتياطي لملف يحوي على النقاط التي احرزها المستخدم في التطبيق.

 import android.app.backup.BackupAgentHelper;
 import android.app.backup.FileBackupHelper;

 public class TheBackupAgent extends BackupAgentHelper {
    // The name of the SharedPreferences file
    static final String HIGH_SCORES_FILENAME = "scores";

    // A key to uniquely identify the set of backup data
    static final String FILES_BACKUP_KEY = "myfiles";

    // Allocate a helper and add it to the backup agent
    @Override
    void onCreate() {
        FileBackupHelper helper = new FileBackupHelper(this, HIGH_SCORES_FILENAME);
        addHelper(FILES_BACKUP_KEY, helper);
    }
}

لمزيد من المرونة, فإن الباني للصف FileBackupHelper يستطيع ان يتقبل عدد متغير من اسماء الملفات.

وبذلك يكون باستطاعتك بسهولة ان تقوم بنسخ احتياطي لكل من ملف scores ولملف لعبة اخرى على سبيل المثال , فقط عبر اضافة معاملات اضافية للباني كما يلي :

@Override
    void onCreate() {
        FileBackupHelper helper = new FileBackupHelper(this, HIGH_SCORES_FILENAME, PROGRESS_FILENAME);
        addHelper(FILES_BACKUP_KEY, helper);
    }

النسخ الاحتياطي لاعدادات وتفضيلات المستخدم preferences  سهل جدا.

أنشأ SharedPreferencesBackupHelper  بطريقة مماثلة لتلك التي قمت بها مع FileBackupHelper. في هذه الحالة, بدل من اضافة اسماء الملفات إلى الباني, نضيف اسماء ال shared preference groups المستخدمة ضمن التطبيق.

فيما يلي مثال يبين كيف يبدوا صف ال Backup agent في حال كانت معلومات النقط المحرزة في التطبيق قد تم تخزينها ضمن preferences  بدل من ملف عادي:

 import android.app.backup.BackupAgentHelper;
 import android.app.backup.SharedPreferencesBackupHelper;

 public class TheBackupAgent extends BackupAgentHelper {
     // The names of the SharedPreferences groups that the application maintains.  These
     // are the same strings that are passed to getSharedPreferences(String, int).
     static final String PREFS_DISPLAY = "displayprefs";
     static final String PREFS_SCORES = "highscores";

     // An arbitrary string used within the BackupAgentHelper implementation to
     // identify the SharedPreferencesBackupHelper's data.
     static final String MY_PREFS_BACKUP_KEY = "myprefs";

     // Simply allocate a helper and install it
     void onCreate() {
         SharedPreferencesBackupHelper helper =
                 new SharedPreferencesBackupHelper(this, PREFS_DISPLAY, PREFS_SCORES);
         addHelper(MY_PREFS_BACKUP_KEY, helper);
     }
 }

بإمكانك اضافة العدد الذي تريد من مستنسخات backup helper  إلى صف العميل المسؤول عن النسخ الاحتياطي في حال رغبت في ذلك .

FileBackupHelper تتعامل مع كل الملفات التي ترغب باجراء نسخ احتياي لها, اما SharedPreferencesBackupHelper فإنها تتعامل مع كل shared preferencegroups  التي ترغب باجراء نسخ احتياطي لها.

طلب نسخ احتياطي Request a Backup

لكي تطلب نسخ احتياطي, فقط بإنشاء مستنسخ من BackupManager, ومن ثم استدعي التابع الخاص به dataChanged().

 import android.app.backup.BackupManager;
 ...

 public void requestBackup() {
   BackupManager bm = new BackupManager(this);
   bm.dataChanged();
 }

يقوم هذا الاستدعاء بتنبيه ” مدير النسخ الاحتياطي” backup manager بان هنالك معطيات جاهزة لان يتم اخذ نسخة احتياطية لها ورفعها إلى السحابة الالكترونية.

عند نقطة ما في المستقبل, يقوم مدير النسخ الاحتياطي back up manager باستدعاء التابع onBackup()الخاص بعميل النسخ الاحتياطي لبرنامجك app backup agent.

لمزيد من المعلومات حول onBackup() and onRestore() من الرابط التالي : android Backup Service

بإمكانك القيام بهذا الاستدعاء عند كل مرة تتغير فيها معطياتك, بدون الخوف من ان تتسبب بنشاط زائد على الشبكة.

في حال قمت بطلب النسخ الاحتياطي مرتين قبل ان يحدث النسخ الاحتياطي, فإن النسخ الاحتياطي سوف يحدث مرة واحدة.

استعادة المعطيات من نسخ احتياطي Restore from a Backup

بشكل عام , لا يتوجب عليك ابدا ان تقوم بدويا بطلب استعادة المعطيات من نسخ احتياطي, وذلك لان هذه العملية تتم بشكل اوتوماتيكي عندما يتم تنصيب تطبيقك على جهاز.

على كل الاحوال, في حال كان ذلك ضروريا , وكنت في حالة تضطر فيها إلى طلب النسخ الاحتياطي يدويا, فقط قم باستدعاء التابع requestRestore().

وإلى لقاء قريب في الدرس القادم

وإلى ذلك الحين استودعكم الله والسلام عليكم ورحمة الله وبركاته

, , , ,

  1. أضف تعليقاً

أضف تعليقاً

Please log in using one of these methods to post your comment:

WordPress.com Logo

أنت تعلق بإستخدام حساب WordPress.com. تسجيل خروج   / تغيير )

صورة تويتر

أنت تعلق بإستخدام حساب Twitter. تسجيل خروج   / تغيير )

Facebook photo

أنت تعلق بإستخدام حساب Facebook. تسجيل خروج   / تغيير )

Google+ photo

أنت تعلق بإستخدام حساب Google+. تسجيل خروج   / تغيير )

Connecting to %s

%d مدونون معجبون بهذه: