ما هي Shared Preferences، وكيف تُستخدم في تطوير التطبيقات؟

Shared Preferences ميزة أساسية في تطوير تطبيقات الهاتف تتيح للمطورين تخزين كميات صغيرة من البيانات واسترجاعها في شكل أزواج من المفاتيح والقيم. وهذه الآلية مفيدة بشكل خاص لتخزين إعدادات المستخدم أو حالات التطبيق أو بيانات الإعداد الأخرى التي يجب الاحتفاظ بها بين جلسات التطبيق. وتُعدّ Shared Preferences جزءًا من منصة Android، وتقدم طريقة بسيطة وفعالة للتعامل مع البيانات الدائمة دون الحاجة إلى إعدادات قواعد بيانات معقدة.

عندما يستخدم تطبيق Shared Preferences، تُخزَّن البيانات في ملف XML في مساحة التخزين الداخلية للتطبيق. وهذا يتيح للتطبيق الوصول إلى البيانات وتحديثها بسرعة، ما يحسّن تجربة المستخدم بإبقاء تفضيلاته وإعداداته متاحة ومحدّثة. وقد صُممت Shared Preferences لتكون خفيفة وخاصة بالتطبيق، لكنها غير مشفرة، ما يجعلها خيارًا مثاليًا للبيانات غير الحساسة في التطبيقات المحسّنة للأداء وسهولة الاستخدام معًا.

Shared Preferences طريقة بسيطة وفعالة لتخزين كميات صغيرة من البيانات في شكل أزواج من المفاتيح والقيم في مساحة التخزين المحلية للجهاز، ما يتيح لتطبيقات الهاتف الاحتفاظ بإعدادات المستخدم وحالات التطبيق بين الجلسات. وهذه الوظيفة مثالية لتخزين تفضيلات المستخدم، مثل إعدادات السمة أو ما إذا كان المستخدم مسجلًا الدخول، إذ تقدم حلًا خفيفًا دون الحاجة إلى قاعدة بيانات. وتظل البيانات متاحة للتطبيق حتى بعد إغلاقه أو إعادة تشغيله، ما يضمن تجربة مستخدم متسقة وشخصية. وتُعدّ Shared Preferences مفيدة بشكل خاص حيث يلزم وصول سريع إلى البيانات الدائمة وتكون متطلبات الأمان معتدلة، إذ إن البيانات غير مشفرة افتراضيًا؛ ولا ينبغي تخزين كلمات المرور والأسرار الأخرى فيها دون تشفير.

More about Shared Preferences

Shared Preferences تقنية أساسية في تطوير تطبيقات الهاتف تتيح تخزينًا بسيطًا وفعالًا لكميات صغيرة من البيانات في شكل أزواج من المفاتيح والقيم. وهذه الطريقة مثالية لتخزين إعدادات المستخدم وتفضيلات التطبيق والبيانات الدائمة الأخرى التي يجب الاحتفاظ بها بين جلسات التطبيق. وتناسب Shared Preferences بشكل خاص الحالات التي يكون فيها الوصول السريع إلى البيانات وسهولة الاستخدام أمرين حاسمين، مثل إعدادات المستخدم وحالة تسجيل الدخول وإعداد التطبيق.

من الناحية التقنية، تخزن Shared Preferences البيانات في ملف XML موجود في مساحة التخزين الداخلية للتطبيق. فعندما يريد تطبيق تخزين البيانات أو استرجاعها، يتفاعل مع هذا الملف من خلال واجهة API تتولى عمليات القراءة والكتابة. وهذا يجعل Shared Preferences فعالة وسهلة التنفيذ معًا، وهي ميزة كبيرة للمطورين الذين يريدون إدارة بيانات خفيفة دون الحاجة إلى التعامل مع عمليات قواعد بيانات معقدة.

يمكن استخدام Shared Preferences في سيناريوهات مختلفة، يدعم كل منها نوعًا مختلفًا من التعامل مع البيانات:

  1. تخزين إعدادات المستخدم: تُستخدم Shared Preferences لتخزين الإعدادات التي يحددها المستخدم، مثل السمة أو تفضيلات الإشعارات أو اختيار اللغة. وهذا يضمن الاحتفاظ بتفضيلات المستخدم حتى عند إغلاق التطبيق وإعادة فتحه.

  2. إدارة الجلسات: يمكن استخدام Shared Preferences لتخزين البيانات المتعلقة بالجلسة، مثل حالة تسجيل الدخول أو معرّف المستخدم، ما يتيح للتطبيق تذكّر المستخدم بين الجلسات دون تكرار تسجيل الدخول. وينبغي تشفير رموز الوصول والأسرار الأخرى قبل تخزينها.

  3. بيانات الإعداد: تستطيع التطبيقات تخزين بيانات الإعداد اللازمة لوظائف التطبيق، مثل إعدادات الميزات أو القيم الافتراضية، ما يسهّل تعديل سلوك التطبيق دون تغيير الشيفرة. ولا مكان لمفاتيح API السرية في Shared Preferences، إذ يمكن استخراج أي شيء مخزن على الجهاز.

ومن أكبر نقاط قوة Shared Preferences بساطتها وكفاءتها. فسهولة الوصول إلى البيانات عبر أزواج المفاتيح والقيم تتيح للمطورين تنفيذ تخزين دائم للبيانات بسرعة دون القلق بشأن عمليات قواعد البيانات المعقدة. كما أن البيانات لا يمكن الوصول إليها إلا من التطبيق المعني، ما يوفر درجة معينة من الأمان والخصوصية.

ويُعدّ انخفاض استهلاك Shared Preferences للموارد ميزة مهمة أخرى. فهذه التقنية تتطلب الحد الأدنى من مساحة التخزين وقدرة المعالجة، ما يجعلها مثالية للأجهزة المحمولة حيث يكون تحسين الموارد أمرًا حاسمًا. وبما أن البيانات مخزنة في مساحة التخزين الداخلية للتطبيق، فهي عادةً محمية أيضًا من الوصول من التطبيقات الأخرى.

عمليًا، ظلت Shared Preferences طويلًا الطريقة القياسية لتخزين بيانات المستخدم البسيطة في تطبيقات Android. فهي تُستخدم لإبقاء تجربة المستخدم متسقة وشخصية بتذكّر تفضيلات المستخدم وحالته. كما تُستخدم لتحسين أداء التطبيق بتقليل الحاجة إلى طلبات البيانات واستدعاءات الشبكة المتكررة.

خلاصة القول، Shared Preferences تقنية تجمع بين البساطة والكفاءة في حل يجعل تخزين البيانات أكثر بداهة وإتاحة للمطورين. وقدرتها على العمل دون إعداد معقد وبأدنى استهلاك للموارد تجعلها أداة مهمة في تطوير التطبيقات الحديث، حيث يُعدّ التعامل السريع والموثوق مع البيانات أمرًا أساسيًا.

Frequently asked questions about Shared Preferences

ما هي Shared Preferences، وكيف تعمل في تطوير Android؟

Shared Preferences في تطوير Android آلية لتخزين البيانات البسيطة في شكل أزواج من المفاتيح والقيم يمكن الوصول إليها عبر مكونات مختلفة من التطبيق. وهذه الطريقة مثالية لتخزين كميات صغيرة من البيانات، مثل إعدادات المستخدم أو إعداد التطبيق، التي لا تتطلب قاعدة بيانات.

عندما يستخدم تطبيق Shared Preferences، يُنشأ ملف يحتوي على البيانات المخزنة، ولا يمكن الوصول إلى هذا الملف إلا من التطبيق الذي أنشأه. وتُخزَّن البيانات في ملف XML في مساحة التخزين الداخلية للتطبيق، ما يحميها من الوصول من التطبيقات الأخرى على جهاز عادي غير مكسور الحماية. ويستطيع المطورون القراءة من هذا الملف والكتابة فيه بسهولة باستخدام توابع مثل getSharedPreferences() و edit() و putString() و commit() أو apply() لحفظ التغييرات.

ومقارنة بحلول التخزين الأكثر تعقيدًا مثل قواعد بيانات SQLite، تُعدّ Shared Preferences أبسط بكثير وأسرع تنفيذًا، لا سيما عندما لا يلزم إلا تخزين بيانات بسيطة لا تتطلب تخزينًا منظمًا أو استعلامات معقدة. وهذا يجعل Shared Preferences خيارًا فعالًا لكثير من التطبيقات التي تحتاج إلى تخزين كميات صغيرة من البيانات واسترجاعها بسرعة وسهولة.

كيف تُخزَّن البيانات وتُسترجع باستخدام Shared Preferences؟

تُخزَّن البيانات في Shared Preferences في شكل أزواج من المفاتيح والقيم. أولًا يُحصل على كائن SharedPreferences، عادةً باستخدام getSharedPreferences واسم ملف. ولتخزين البيانات، يُفتح محرر باستخدام edit()، وتُضاف القيم بتوابع مثل putString أو putBoolean، وتُحفظ التغييرات باستخدام apply()، الذي يكتب بشكل غير متزامن، أو commit()، الذي يكتب فورًا.

وتُسترجع البيانات بتوابع مثل getString أو getInt، مع تحديد المفتاح وقيمة افتراضية تُستخدم إذا لم يكن المفتاح موجودًا. وفي مشاريع Android الأحدث، كثيرًا ما توصي Google بمكتبة DataStore كبديل أحدث، لكن مبدأ المفاتيح والقيم هو نفسه.

ما أنواع البيانات التي يمكن تخزينها في Shared Preferences؟

تدعم Shared Preferences أنواع البيانات البسيطة: السلاسل النصية (String) والأعداد الصحيحة (int) والأعداد الصحيحة الطويلة (long) والأعداد العشرية (float) وقيم الصواب والخطأ (boolean). كما يمكن تخزين مجموعة من السلاسل النصية (Set of String).

ولا يمكن تخزين الكائنات الأكثر تعقيدًا مباشرة. ويمكن تحويلها إلى نص، مثلًا بصيغة JSON، لكن هذا لا يُنصح به إلا للكميات الصغيرة من البيانات. فـ Shared Preferences مخصصة للمعلومات الخفيفة مثل إعدادات المستخدم أو السمة المختارة أو ما إذا كانت مقدمة قد عُرضت. أما البيانات الأكبر أو المنظمة فمكانها قاعدة بيانات مثل Room أو الملفات.

ما الفرق بين Shared Preferences وطرق التخزين الأخرى مثل SQLite؟

تخزن Shared Preferences كميات صغيرة من البيانات في شكل أزواج من المفاتيح والقيم في ملف على الجهاز. وهي بسيطة الاستخدام لكنها لا تناسب كميات البيانات الكبيرة أو المعقدة، ولا تتيح استعلامات حقيقية.

أما SQLite، التي كثيرًا ما تُستخدم عبر Room، فقاعدة بيانات علائقية تستطيع التعامل مع كميات كبيرة من البيانات المنظمة والعلاقات بين الجداول وعمليات البحث المتقدمة. وتناسب الملفات الصور والمستندات والبيانات الأكبر الأخرى. وتُعدّ DataStore البديل الأحدث من Google لـ Shared Preferences مع وصول غير متزامن. ويعتمد الاختيار على كمية البيانات: الإعدادات في Shared Preferences أو DataStore، والبيانات المنظمة في قاعدة بيانات.

كيف تُؤمَّن البيانات المخزنة في Shared Preferences؟

تُخزَّن البيانات في Shared Preferences كنص عادي في المجلد الخاص بالتطبيق. ولا تملك التطبيقات الأخرى عادةً أي وصول إليها، لكن على جهاز مكسور الحماية أو عبر بعض النسخ الاحتياطية يمكن قراءة الملف. لذلك لا ينبغي تخزين كلمات المرور والرموز والمعلومات الحساسة الأخرى دون تشفير.

ويمكن تشفير البيانات الحساسة قبل تخزينها باستخدام مفاتيح محفوظة في Android Keystore، المصمم لحماية مفاتيح التشفير. وكانت مكتبة Jetpack المسماة androidx.security:security-crypto تقدم سابقًا EncryptedSharedPreferences لهذا الغرض، لكن Google وسمت المكتبة بأكملها، بما في ذلك EncryptedSharedPreferences و EncryptedFile و MasterKey، بأنها متقادمة اعتبارًا من الإصدار 1.1.0-alpha07 في أبريل 2025. وتوصي Google بدلًا من ذلك باستخدام واجهات API المعتادة في المنصة، مثل SharedPreferences، مع الاستخدام المباشر لـ Android Keystore، حيث يُولَّد مفتاح باستخدام KeyGenerator ويُستخدم لتشفير القيم قبل تخزينها. وبشكل عام، ينبغي تخزين أقل قدر ممكن من المعلومات الحساسة على الجهاز.

ما القيود التي ينبغي مراعاتها عند استخدام Shared Preferences؟

Shared Preferences مخصصة للكميات الصغيرة من البيانات البسيطة. فالكميات الكبيرة من البيانات قد تبطئ التطبيق، لأن الملف كله يُحمَّل في الذاكرة، والكتابة باستخدام commit() على الخيط الرئيسي قد تجعل واجهة المستخدم تتقطع.

ولا يوجد دعم مدمج للكائنات المعقدة أو العلاقات أو الاستعلامات، ولا تُشفَّر البيانات تلقائيًا. كما لا يوجد أمان للأنواع، فلا يُكتشف المفتاح الخاطئ أو نوع البيانات الخاطئ إلا عند تشغيل التطبيق. ولا يُتعامل بشكل موثوق مع التغييرات التي تُجرى من عدة عمليات في الوقت نفسه. وللاحتياجات الأكثر تقدمًا، يُنصح بـ DataStore أو Room أو التخزين المشفر.

Shared Preferences for dummies

Shared Preferences ميزة ذكية في تطبيقات الهاتف تتيح للتطبيق تذكّر أجزاء صغيرة من المعلومات التي أُعطيت له. فكّروا فيها كدفتر صغير يستطيع التطبيق أن يدوّن فيه أشياء يحتاج إلى تذكّرها لاحقًا. فعلى سبيل المثال، التطبيق الذي يتذكر اسم المستخدم، حتى لا يلزم كتابته في كل مرة يُفتح فيها التطبيق، يستخدم Shared Preferences لتخزين تلك المعلومة. وهي طريقة سهلة وسريعة لتخزين البيانات التي لا تشغل مساحة كبيرة ويجب أن تكون متاحة في المرة التالية التي يُستخدم فيها التطبيق.

أضف تعليق