Zálohování uživatelských dat pomocí funkce Auto Backup

Auto Backup for Apps automaticky zálohuje uživatelská data z aplikací, které jsou určeny pro systém Android 6.0 (úroveň API 23) nebo novější. Systém Android zachovává data aplikací tak, že je nahrává na disk Google uživatele – kde jsou chráněna přihlašovacími údaji k účtu Google uživatele. Množství dat je omezeno na 25 MB na uživatele aplikace a ukládání záložních dat není zpoplatněno. Vaše aplikace si může proces zálohování přizpůsobit nebo se z něj odhlásit zakázáním zálohování.

Přehled možností zálohování systému Android a pokyny, která data byste měli zálohovat a obnovit, naleznete v přehledu zálohování dat.

Soubory, které se zálohují

Ve výchozím nastavení automatické zálohování zahrnuje soubory ve většině adresářů, které systém přiřadil vaší aplikaci:

  • Sdílené soubory předvoleb.
  • Soubory uložené ve vnitřním úložišti vaší aplikace, ke kterým se přistupuje pomocí getFilesDir() nebo getDir(String, int).
  • Soubory v adresáři vráceném pomocí getDatabasePath(String), který zahrnuje také soubory vytvořené pomocí třídy SQLiteOpenHelper.
  • Soubory na externím úložišti v adresáři vráceném pomocí getExternalFilesDir(String).

Automatické zálohování vylučuje soubory v adresářích vrácených třídou getCacheDir()getCodeCacheDir() nebo getNoBackupFilesDir(). Soubory uložené v těchto umístěních jsou potřebné pouze dočasně nebo jsou záměrně vyloučeny z operací zálohování.

Aplikaci můžete nakonfigurovat tak, aby zahrnovala a vylučovala konkrétní soubory. Další informace naleznete v části Zahrnout a vyloučit soubory.

Poznámka: Systém Android nepovažuje konfiguraci komponent za uživatelská data. Pokud vaše aplikace povolí nebo zakáže konkrétní komponenty ve svém manifestu za běhu, neočekávejte, že AutoBackup konfiguraci uloží a obnoví. Chcete-li zachovat stav konfigurace, uložte ji do sdílených předvoleb a při obnovení obnovte sdílené předvolby. Pokud chcete, aby aplikace zachovala svůj stav, uložte stav do Sdílených předvoleb a při obnovení obnovte Sdílené předvolby.

Umístění zálohy

Data zálohy jsou uložena v soukromé složce na uživatelském účtu Google Drive,omezené na 25 MB na aplikaci. Uložená data se nezapočítávají do osobní kvóty Google Drive uživatele. Ukládá se pouze nejnovější záloha. Při vytvoření zálohy se předchozí záloha (pokud existuje) odstraní. Data ze zálohy nelze číst uživatelem ani jinými aplikacemi v zařízení.

Uživatelé mohou v aplikaci Disk GoogleAndroid zobrazit seznam aplikací, které byly zálohovány. V zařízení s operačním systémem Android najdou uživatelé tento seznam v navigační zásuvce aplikace Drive v části Nastavení > Zálohování a obnovení > Data aplikací.

Zálohy z každého zařízení-životnosti jsou uloženy v samostatných sadách dat, jak je uvedeno v následujících příkladech:

  • Pokud uživatel vlastní dvě zařízení, pak pro každé zařízení existuje sada dat záloh.
  • Pokud uživatel resetuje zařízení z výroby a poté nastaví zařízení se stejným účtem, je záloha uložena v nové datové sadě. Zastaralé datové sady se po určité době nečinnosti automaticky odstraní.

Rozvrh zálohování

Zálohování probíhá automaticky, pokud jsou splněny všechny následující podmínky:

  • Uživatel v zařízení povolil zálohování. V systému Android 9 je toto nastavení vNastavení > Systém > Zálohování.
  • Od posledního zálohování uplynulo alespoň 24 hodin.
  • Zařízení je nečinné.
  • Zařízení je připojeno k síti Wi-Fi (pokud se uživatel zařízení nepřipojil k zálohování mobilních dat).

V praxi tyto podmínky nastávají zhruba každou noc, ale zařízení se nemusí nikdy zálohovat (například pokud se nikdy nepřipojí k síti). Kvůli úspoře šířky pásma sítě probíhá nahrávání pouze v případě, že se data aplikace změnila.

Během automatického zálohování systém aplikaci vypne, aby se ujistil, že již nezapisuje do souborového systému. Ve výchozím nastavení systém zálohování ignoruje aplikace spuštěné v popředí, protože uživatelé by si vypnutí svých aplikací všimli. Výchozí chování můžete zrušit nastavením atributu backupInForeground na hodnotu true.

Pro zjednodušení testování obsahuje systém Android nástroje, které umožňují ručně zahájit zálohování aplikace. Další informace naleznete v části Testování zálohování a obnovení.

Rozvrh obnovení

Data se obnoví vždy, když je aplikace nainstalována, a to buď z obchodu Play, během instalace zařízení (když systém instaluje dříve nainstalované aplikace), nebo po spuštění adb install. Operace obnovení probíhá po instalaci APK, ale ještě předtím, než je aplikace k dispozici pro spuštění uživatelem.

Během úvodního průvodce nastavením zařízení se uživateli zobrazí seznam dostupných záložních sad dat a je dotázán, ze které z nich má data obnovit. Kterákoli záložní datová sada je vybrána, se stane původní datovou sadou pro zařízení. Zařízení může obnovit data buď z vlastních záloh, nebo ze sady dat předků. Zařízení upřednostní svou vlastní zálohu, pokud jsou k dispozici zálohy z obou zdrojů. Pokud uživatel neprošel průvodcem nastavením zařízení, může zařízení obnovit pouze z vlastních záloh.

Pro zjednodušení testování obsahuje systém Android nástroje, které umožňují ručně zahájit obnovení aplikace. Další informace naleznete v části Testování zálohování a obnovení.

Povolení a zakázání zálohování

Aplikace, které jsou zaměřeny na systém Android 6.0 (úroveň API 23) nebo vyšší, se automaticky účastní automatického zálohování. V souboru manifestu aplikace nastavte logickou hodnotuandroid:allowBackup pro povolení nebo zakázání zálohování. Výchozí hodnota je true, ale aby byly vaše záměry jasné, doporučujeme atribut v manifestu explicitně nastavit, jak je uvedeno níže:

<manifest ... > ... <application android:allowBackup="true" ... > ... </application></manifest>

Zálohování můžete zakázat nastavením android:allowBackup na false. Možná to budete chtít udělat, pokud vaše aplikace může obnovit svůj stav pomocí jiného mechanismunebo pokud vaše aplikace pracuje s citlivými informacemi, které by systém Android neměl zálohovat.

Zálohovat a vyloučit soubory

Ve výchozím nastavení systém zálohuje téměř všechna data aplikace. Další informace naleznete v části Soubory, které se zálohují. V této části si ukážeme, jak definovat vlastní pravidla XML pro řízení toho, co se bude zálohovat.

  1. V elementu AndroidManifest.xml přidejte atribut android:fullBackupContent do elementu <application>. Tento atribut ukazuje na soubor XML, který obsahuje pravidla zálohování. For example:
    <application ... android:fullBackupContent="@xml/my_backup_rules"></application>
  2. Create an XML file called my_backup_rules.xml in theres/xml/ directory. Inside the file, add rules with the<include> and <exclude> elements.The following sample backs up all shared preferences exceptdevice.xml
    <?xml version="1.0" encoding="utf-8"?><full-backup-content> <include domain="sharedpref" path="."/> <exclude domain="sharedpref" path="device.xml"/></full-backup-content>

XML config syntax

The XML syntax for the configuration file is shown below:

<full-backup-content> <include domain= path="string" requireFlags= /> <exclude domain= path="string" /></full-backup-content>

Inside the <full-backup-content> tag, you can define <include> and <exclude> elements:

  • <include> – Specifies a file or folder to backup. By default, Auto Backup includes almost all app files. If you specify an <include> element, the system no longer includes any files by default and backs up only the files specified. Chcete-li zahrnout více souborů, použijte více prvků <include>.

    Poznámka: Soubory v adresářích vrácených pomocí getCacheDir()getCodeCacheDir() nebo getNoBackupFilesDir() jsou vždy vyloučeny, i když se je pokusíte zahrnout.

  • <exclude> – Určuje soubor nebo složku, která se má při zálohování vyloučit. Zde jsou uvedeny některé soubory, které jsou obvykle ze zálohování vyloučeny:
    • Soubory, které mají identifikátory specifické pro zařízení, buď vydané serverem, nebo vygenerované v zařízení. Například služba Google Cloud Messaging (GCM) potřebuje vygenerovat registrační token pokaždé, když uživatel nainstaluje vaši aplikaci do nového zařízení. Pokud je obnoven starý registrační token, může se aplikace chovat neočekávaně.
    • Pověřovací údaje k účtu nebo jiné citlivé informace. Zvažte možnost požádat uživatele, aby se při prvním spuštění obnovené aplikace znovu ověřil, místo abyste umožnili uložení takových informací v záloze.
    • Soubory související s laděním aplikace.
    • Large files that cause the app to exceed the 25MB backup quota.

Note: If your configuration file specifies both elements, then the backup contains everything captured by the <include> elements minus the resources named in the <exclude> elements. In other words, <exclude> takes precedence.

Each element must include the following two attributes:

  • domain – specifies the location of resource. Valid values for this attribute include the following:
    • root – the directory on the filesystem where all private files belonging to this app are stored.
    • file – directories returned by getFilesDir().
    • database – directories returned by getDatabasePath(). Databases created with SQLiteOpenHelper are stored here.
    • sharedpref – the directory where SharedPreferences are stored.
    • external the directory returned by getExternalFilesDir()
  • Note: You cannot back up files outside of these locations.

  • path: Specifies a file or folder to include in or exclude from backup. Note that:
    • This attribute does not support wildcard or regex syntax.
    • You can use . to reference the current directory, however, you cannot reference the parent directory .. for security reasons.
    • If you specify a directory, then the rule applies to all files in the directory and recursive sub-directories.

The include element can also contain the requireFlags attribute, which thesection describing how to define conditional requirements forbackup section discusses in more detail.

Definice podmínek zařízení vyžadovaných pro zálohování

Pokud vaše aplikace ukládá do zařízení citlivé informace, můžete určitpodmínky, za kterých budou data vaší aplikace zahrnuta do zálohy uživatele. V systému Android 9 (úroveň API 28) nebo vyšší můžete přidat následující podmínky:

  • clientSideEncryption: Uživatelská záloha je zašifrována pomocí tajemství na straně klienta. Tato forma šifrování je povolena na zařízeních se systémem Android 9 nebo vyšším, pokud uživatel povolil zálohování v systému Android 9 nebo vyšším a nastavil pro své zařízení zámek obrazovky (PIN, vzor nebo heslo).
  • deviceToDeviceTransfer: Uživatel přenáší svou zálohu do jinéhozařízení, které podporuje místní přenos ze zařízení na zařízení (například Google Pixel).

Pokud jste aktualizovali svá vývojová zařízení na Android 9, musíte zálohování dat po aktualizaci zakázata poté znovu povolit. Je to proto, že systém Android šifruje zálohy pomocí tajemství na straně klienta až po informování uživatelů v Nastavení nebo v Průvodci nastavením.

Chcete-li deklarovat podmínky zařazení, nastavte atribut requireFlags na požadovanou hodnotu nebo hodnoty ve vašem v prvcích <include> v rámci sady pravidel zálohování:

my_backup_rules.xml

<?xml version="1.0" encoding="utf-8"?><full-backup-content> <!-- App data isn't included in user's backup unless client-side encryption is enabled. --> <include domain="file" path="." requireFlags="clientSideEncryption" /><full-backup-content>

Pokud vaše aplikace implementuje zálohovací systém klíč-hodnota nebo pokud sami implementujeteBackupAgent,můžete tyto podmíněné požadavky aplikovat také na logiku zálohování provedením bitového porovnání mezi sadou transportních příznaků objektuBackupDataOutputnebo FLAG_DEVICE_TO_DEVICE_TRANSFER.

Následující úryvek kódu ukazuje příklad použití této metody:

Kotlin

class MyCustomBackupAgent : BackupAgent() { override fun onBackup(oldState: ParcelFileDescriptor?, data: BackupDataOutput?, newState: ParcelFileDescriptor?) { if (data != null) { if ((data.transportFlags and FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED) != 0) { // Client-side backup encryption is enabled. } if ((data.transportFlags and FLAG_DEVICE_TO_DEVICE_TRANSFER) != 0) { // Local device-to-device transfer is enabled. } } } // Implementation of onRestore() here.}

Java

public class MyCustomBackupAgent extends BackupAgent { @Override public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data, ParcelFileDescriptor newState) throws IOException { if ((data.getTransportFlags() & FLAG_CLIENT_SIDE_ENCRYPTION_ENABLED) != 0) { // Client-side backup encryption is enabled. } if ((data.getTransportFlags() & FLAG_DEVICE_TO_DEVICE_TRANSFER) != 0) { // Local device-to-device transfer is enabled. } } // Implementation of onRestore() here.}

Implement BackupAgent

Apps that implement Auto Backup do not need to implement a BackupAgent. However, you can optionally implement a custom BackupAgent. Typically, there are two reasons for doing this:

  • You want to receive notification of backup events such as, onRestoreFinished() or onQuotaExceeded(long, long). These callback methods are executed even if the app is not running.
  • You can’t easily express the set of files you want to backup with XML rules. In these rare cases, you can implement a BackupAgent that overrides onFullBackup(FullBackupDataOutput) to store what you want. To retain the system’s default implementation, call the corresponding method on the superclass with super.onFullBackup().

If you implement a BackupAgent, by default the system expects your app to perform key/value backup and restore. Chcete-li místo toho použít automatické zálohování založené na souborech, nastavte v manifestu své aplikace atribut android:fullBackupOnly na true.

Během operací automatického zálohování a obnovy systém spustí aplikaci v omezeném režimu, aby jednak zabránil aplikaci v přístupu k souborům, které by mohly způsobit konflikty, a jednak jí umožnil provádět metody zpětného volání ve svém BackupAgent. V tomto omezeném režimu není automaticky spuštěna hlavní aktivita aplikace, nejsou inicializováni její zprostředkovatelé obsahu a místo podtřídy deklarované v manifestu aplikace je instancována základní třída Application.

Upozornění: Chcete-li se vyhnout chybám, ujistěte se, že části vaší aplikace, které se spouštějí v omezeném režimu (většinou váš BackupAgent), nepřistupují ke zprostředkovatelům obsahu ve stejné aplikaci ani se nepokoušejí obsadit objekt Application. Pokud se těmto vzorům nemůžete vyhnout, zvažte implementaci zálohování klíč/hodnota nebo zálohování zcela zakažte.

Váš BackupAgent musí implementovat abstraktní metody onBackup() a onRestore(), které se používají pro zálohování klíč-hodnota. Pokud však zálohování klíč-hodnota provádět nechcete, můžete implementaci těchto metod ponechat prázdnou.

Další informace naleznete v části Rozšíření agenta BackupAgent.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.