Cách turn of tính năng Auto Backup (Storage data). Khi thay đổi loại device, không muốn cho migrate nội dung của storage lúc khôi phục từ backup.
1. Turn off auto backup Android
Edit android/app/src/main/AndroidManifest.xml
<application
android:allowBackup="false"
android:fullBackupContent="false"
android:dataExtractionRules="@xml/data_extraction_rules"
...
Create new file android/app/src/main/res/xml/data_extraction_rules.xml
<?xml version="1.0" encoding="utf-8"?>
<data-extraction-rules>
<cloud-backup>
<exclude domain="root" />
<exclude domain="file" />
<exclude domain="database" />
<exclude domain="sharedpref" />
<exclude domain="external" />
</cloud-backup>
<device-transfer>
<exclude domain="root" />
<exclude domain="file" />
<exclude domain="database" />
<exclude domain="sharedpref" />
<exclude domain="external" />
</device-transfer>
</data-extraction-rules>
2. Turn off auto backup iOS
Edit ios/Runner/AppDelegate.swift
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
override func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
...
// Disable iCloud backup
disableICloudBackup()
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
private func disableICloudBackup() {
do {
try setExcludeFromICloudBackup(filePath: NSHomeDirectory() + "/Library")
try setExcludeFromICloudBackup(filePath: NSHomeDirectory() + "/Documents")
} catch {
print("Couldn't disable iCloud Backup")
}
}
private func setExcludeFromICloudBackup(filePath: String) throws {
let url = NSURL.fileURL(withPath: filePath) as NSURL
try url.setResourceValue(true, forKey: URLResourceKey.isExcludedFromBackupKey)
}
}
3. How to test auto backup
- Chuẩn bị 2 device iphone (Device A và device B). Lưu ý device A phải có version iOS thấp hơn hoặc bằng version iOS của device B.
- Đăng nhập iCloud vào device A, sau đó cài app qua TestFlight.
- Reset factory device B và login vào cùng iCloud với device A (đối với setup manual). Hoặc để device B cạnh device A để auto setup.
- Chọn khôi phục từ device gần bên hoặc khôi phục từ iCloud.
- Ở device B, sau khi khôi phục xong thì cài lại app từ TestFlight
Ps:
■ Về iOS cách backup Transfer directly from iPhone Device A → Device B thì sẽ có 3 loại như sau:
- ① Backup thông qua iCloud
- ② Transfer trực tiếp từ iPhone sang iPhone
- ③ Backup thông qua Mac
■ Về cách ①②, có thể chặn không cho migrate app data theo đối ứng Turn off auto backup iOS ở trên.
■ Về cách ③ app data vẫn bị transfer・・・・・・・A
=> Nếu bạn dùng flutter_secure_storage
thì cần config thêm option này:
IOSOptions _getIOSOptions() => const IOSOptions(accessibility: KeychainAccessibility.first_unlock_this_device);
Cách test case ③: