الحل النهائي لمشاكل التخزين: كيف تبدأ تطبيقك من الصفر بعد الحذف على Android وiOS
عند تطوير التطبيقات باستخدام Flutter، قد تواجه مشكلة شائعة جدًا: عند حذف التطبيق من الهاتف وإعادة تثبيته، تجد أن بعض البيانات ما زالت موجودة! هذا الأمر قد يُسبب مشاكل كبيرة في بعض أنواع التطبيقات مثل:
- - التطبيقات المالية أو البنكية
- - التطبيقات التي تعتمد على حساب مستخدم واحد
- - التطبيقات التي تحتوي على بيانات حساسة
في هذا المقال، سنشرح لك لطريقة الصحيحة للتخلص من جميع البيانات المخزنة بعد حذف التطبيق، سواء على نظام Android أو iOS، مع ضمان عدم استرجاع أي بيانات محفوظة سابقًا من النسخ الاحتياطي (Backup).
تعطيل النسخ الاحتياطي في Android
نظام Android يسمح لك بسهولة بمنع النسخ الاحتياطي لبيانات التطبيق من خلال ملف `AndroidManifest.xml`.
🔧 الخطوات:
افتح ملف `AndroidManifest.xml` وأضف السطرين التاليين داخل وسم `<application>`:
android:allowBackup="false"
android:fullBackupContent="false"
بهذه الطريقة، تمنع Android من أخذ نسخة احتياطية من بيانات التطبيق على Google Drive أو أي خدمة أخرى. وبالتالي، عند حذف التطبيق وإعادة تثبيته، سيبدأ التطبيق من جديد بدون أي بيانات قديمة.
مسح التخزين الآمن في iOS عند أول تشغيل
نظام iOS يحتفظ بالبيانات في iCloud، مما يعني أن حذف التطبيق لا يمحو بالضرورة كل البيانات المخزنة. لذلك، نحتاج إلى كود يقوم بمسح التخزين عند أول تشغيل للتطبيق.
أضف الكود التالي داخل ملف `main.dart` أو في الصفحة التي تُفتح أولًا بعد التشغيل:
try {
const String key = "isFirstRun";
final SharedPreferences prefs = await SharedPreferences.getInstance();
const storage = FlutterSecureStorage();
final bool isFirstRun = prefs.getBool(key) ?? true;
if (isFirstRun) {
await storage.deleteAll();
prefs.clear();
await prefs.setBool(key, false);
}
} catch (e) {
Logger().e("Error clearing secure storage: $e");
}
منع ملفات Hive من النسخ الاحتياطي على iOS
منع نسخ ملفات Hive إلى iCloud
if (Platform.isIOS) {
final dir = await getApplicationDocumentsDirectory();
final hiveDir = Directory(dir.path);
if (await hiveDir.exists()) {
try {
await Process.run('xattr', [
'-w',
'com.apple.MobileBackup',
'1',
hiveDir.path,
]);
} catch (e) {
Logger().e("Error setting xattr for iOS: $e");
}
}
}
