zálohování uživatelských dat pomocí automatického zálohování

Automatické zálohování aplikací automaticky zálohuje data uživatele z aplikací thattarget a běží na Android 6.0 (úroveň API 23) nebo novější. Android uchovává appdata nahráním na Disk Google uživatele-Kde je chráněn přihlašovacími údaji uživatele k účtu Google. Množství dat je omezeno na 25 MB peruser vaší aplikace a za ukládání záložních dat. Vaše aplikace můžeupravit proces zálohování nebo odhlásit disablingbackups.

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

Soubory, které jsou zálohovány

ve výchozím nastavení, Automatické Zálohování obsahuje soubory ve většině adresáře, které jsou přiřazeny k vaší aplikaci pomocí systému:

  • Sdílené předvolby soubory.
  • soubory uložené do interního úložiště vaší aplikace, přístupné pomocí getFilesDir() nebo getDir(String, int).
  • soubory v adresáři vrácené getDatabasePath(String), který také obsahuje soubory vytvořené pomocí třídy SQLiteOpenHelper.
  • soubory na externím úložišti v adresáři vráceném getExternalFilesDir(String).

Automatické Zálohování vylučuje soubory v adresářích se vrátil do getCacheDir()getCodeCacheDir() nebo getNoBackupFilesDir(). Soubory uložené v těchto místech jsou potřeba pouze dočasně, nebo jsou záměrně vyloučeny z operací zálohování.

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

Poznámka: Android nepovažuje konfiguraci komponent za uživatelská data. Pokud vaše aplikace povolí nebo zakáže určité komponenty ve svém manifestu, zatímco je spuštěna, neočekávejte, že AutoBackup uloží a obnoví konfiguraci. Chcete-li zachovat stav konfigurace, uložte jej do sdílených předvoleb a obnovte sdílené Předvolby při obnovení. Pokud chcete, aby vaše aplikace uložila svůj stav, uložte stav do sdílených předvoleb a obnovte sdílené Předvolby při obnovení.

umístění zálohy

záložní data jsou uložena v soukromé složce v účtu Google Drive uživatele, omezena na 25 MB na aplikaci. Uložená data se nezapočítávají do uživatelské kvóty na Disk Google. Je uložena pouze nejnovější záloha. Po provedení abackup se předchozí záloha (pokud existuje) odstraní. Záložní datacan ‚ t být čten uživatelem nebo jiných aplikací v zařízení.

uživatelé mohou vidět seznam aplikací, které byly zálohovány v aplikaci Google DriveAndroid. Na Android-poháněl zařízení, uživatelé mohou najít tento seznam v Driveapp je navigace zásuvka pod Nastavení > Zálohování a resetování > App data.

Zálohování z každého zařízení-nastavení-životnost jsou uloženy v samostatných datových souborech, jak je znázorněno v následujících příkladech:

  • Pokud uživatel vlastní zařízení, pak zálohování údajů existuje pro každé zařízení.
  • pokud tovární uživatel resetuje zařízení a poté nastaví zařízení se stejným účtem, záloha se uloží do nové datové sady. Zastaralé datové sady jsou po určité době nečinnosti automaticky smazány.

plán Zálohování

Zálohování dojde automaticky, kdy všechny následující podmínky jsou splněny:

  • má uživatel povoleno zálohování na zařízení. V systému Android 9 je toto nastavení vloženo > systém > zálohování.
  • od poslední zálohy uplynulo nejméně 24 hodin.
  • zařízení je nečinné.
  • zařízení je připojeno k síti Wi-Fi (pokud se uživatel zařízení nepřihlásil k zálohování mobilních dat).

V praxi, tyto podmínky se vyskytují zhruba každou noc, ale zařízení může neverback-up (například, pokud to nikdy připojuje k síti). Chcete-li zachovat šířku pásma networkbandwidth, nahrávání probíhá pouze v případě, že se data aplikace změnila.

během automatického zálohování systém vypne aplikaci, aby se ujistil, že již není zapsán do systému souborů. Ve výchozím nastavení systém zálohování ignoruje aplikace spuštěné v popředí, protože uživatelé by si všimli, že jejich aplikace jsou vypnuty. Výchozí chování můžete přepsat nastavením atributubackupInForeground na hodnotu true.

pro zjednodušení testování obsahuje Android nástroje, které vám umožňují ručně iniciovat zálohu aplikace. Další informace naleznete v části Zálohování a obnovení testu.

plán obnovení

Data jsou obnovena vždy, když je aplikace nainstalována, buď z Obchodu Play, během instalace zařízení (když systém nainstaluje dříve nainstalované aplikace), nebo ze spuštění instalace adb. Operace obnovení nastane po instalaci APK, ale před tím, než je aplikace k dispozici pro spuštění uživatelem.

během počátečního průvodce nastavením zařízení se uživateli zobrazí seznam dostupných záložních datových souborů a je dotázán, ze kterého data chcete obnovit. Kterýkoli záložní datový soubor je vybrán, stává se datovým souborem předků pro zařízení. Zařízení může obnovit buď z vlastních záloh, nebo z datové sady předků. Zařízení upřednostňuje 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 Android nástroje, které vám umožňují ručně zahájit obnovení aplikace. Další informace naleznete v části Zálohování a obnovení testu.

Povolit a zakázat zálohování

aplikace, které cílí na Android 6.0 (úroveň API 23) nebo vyšší, se automaticky účastní automatického zálohování. V souboru manifestu aplikace Nastavte booleovskou hodnotuandroid:allowBackuppro povolení nebo zakázání zálohování. Výchozí hodnota je true, ale aby yourintentions jasné, doporučujeme výslovně nastavení atributu ve vašem manifestas je uvedeno níže:

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

zálohy můžete zakázat nastavením android:allowBackup na false. Můžete to udělat, pokud vaše aplikace může znovu vytvořit svůj stav prostřednictvím jiného mechanismoru, pokud se vaše aplikace zabývá citlivými informacemi, které by Android neměl zálohovat.

zahrnout 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é jsou zálohovány. Tato část ukazuje, jak definovat vlastní pravidla XML pro kontrolu toho, co se zálohuje.

  1. V AndroidManifest.xml přidat android:fullBackupContent atribut <application> elementu. Tento atribut ukazuje na soubor XML, který obsahuje pravidla zálohování. Například:
    <application ... android:fullBackupContent="@xml/my_backup_rules"></application>
  2. Vytvořte soubor XML s názvem my_backup_rules.xmlres/xml/ adresář. Uvnitř souboru přidejte pravidla s prvky<include> a <exclude>.Následující vzorek zálohuje všechny sdílené předvolby kromědevice.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. Pokud zadáte prvek <include>, systém již ve výchozím nastavení neobsahuje žádné soubory a zálohuje pouze zadané soubory. Chcete-li zahrnout více souborů, použijte více prvků <include>.

    Poznámka: Soubory v adresářích se vrátil do getCacheDir()getCodeCacheDir() nebo getNoBackupFilesDir() jsou vždy vyloučeny, i když se budete snažit zahrnout je.

  • <exclude> – určuje soubor nebo složku, kterou chcete během zálohování vyloučit. Zde jsou některé soubory, které jsou obvykle vyloučeny ze zálohy:
    • soubory, které mají identifikátory specifické pro zařízení, buď vydané serverem, nebo generované v zařízení. Například služba Google Cloud Messaging (GCM) musí vygenerovat registrační token pokaždé, když uživatel nainstaluje vaši aplikaci na nové zařízení. Pokud je starý registrační token obnoven, aplikace se může chovat neočekávaně.
    • pověření účtu nebo jiné citlivé informace. Požádejte uživatele reauthenticate prvním spuštění obnovit aplikace, spíše než aby pro uchovávání těchto informací v záloze.
    • soubory týkající se ladění aplikací.
    • velké soubory, které způsobují, že aplikace překročí kvótu zálohování 25 MB.

Poznámka: Pokud konfigurace soubor určuje obou prvků, pak záloha obsahuje vše, co zajat <include> prvky mínus zdroje s názvem v <exclude> prvky. Jinými slovy, <exclude> má přednost.

Každý prvek musí obsahovat následující dva atributy:

  • domain – určuje umístění zdroje. Platné hodnoty pro tento atribut zahrnují následující:
    • root – adresář v souborovém systému, kde jsou uloženy všechny soukromé soubory patřící do této aplikace.
    • file – adresáře vrácené getFilesDir().
    • database – adresáře vrácené getDatabasePath(). Databáze vytvořené pomocí SQLiteOpenHelper jsou uloženy zde.
    • sharedpref – adresář, kde jsou uloženy SharedPreferences.
    • external adresář se vrátil do getExternalFilesDir()
  • Poznámka: nelze zálohovat soubory mimo tyto lokality.

  • path: určuje soubor nebo složku, kterou chcete zahrnout nebo vyloučit ze zálohy. Všimněte si, že:
    • tento atribut nepodporuje syntaxi zástupných znaků nebo regulárních výrazů.
    • můžete použít . odkaz na aktuální adresář, však nelze referenční nadřazeného adresáře .. z bezpečnostních důvodů.
    • Pokud zadáte adresář, platí pravidlo pro všechny soubory v adresáři a rekurzivní podadresáře.

include element může také obsahovat requireFlags atribut, který kapitola popisuje, jak definovat podmíněné požadavky forbackup část popisuje podrobněji.

Definujte podmínky zařízení potřebné pro zálohování

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

  • clientSideEncryption: záloha uživatele je šifrována pomocí klienta-sidesecret. Tato forma šifrování je povolena na zařízeních se systémem Android 9 orhigher, pokud uživatel povolil zálohování v systému Android 9 orhigher a nastavil zámek ascreen (PIN, vzor nebo heslo) pro své zařízení.
  • deviceToDeviceTransfer: uživatel přenáší svou zálohu na jiné zařízení, které podporuje místní přenos mezi zařízeními (například Google Pixel).

Pokud jste upgradovali vývojová zařízení na Android 9, musíte je deaktivovat a po upgradu znovu povolit zálohování dat. Důvodem je, že Android onlyencrypts zálohy s tajemstvím na straně klienta po informování uživatelů v nastavení orthe Průvodce nastavením.

vyhlásit podmínky pro začlenění, nastavte requireFlags atribut thedesired hodnotu nebo hodnoty v <include> prvky ve vašem nastavení ofbackup pravidla:

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 klíč-hodnota backupsystem, nebo pokud jste implementBackupAgent sebe,můžete také použít tyto podmíněné požadavky na záložní logika byperforming bitové srovnání meziBackupDataOutput objekt’sset dopravy, vlajky a své vlastní backup agent jeFLAG_CLIENT_SIDE_ENCRYPTION_ENABLEDnebo FLAG_DEVICE_TO_DEVICE_TRANSFERvlajky.

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.}

Implementovat BackupAgent

Aplikace, které provádět Automatické Zálohování není třeba provádět BackupAgent. Můžete však volitelně implementovat vlastní BackupAgent. Obvykle existují dva důvody:

  • chcete dostávat upozornění na události zálohování, jako je onRestoreFinished() nebo onQuotaExceeded(long, long). Tyto metody zpětného volání se provádějí, i když aplikace není spuštěna.
  • pomocí pravidel XML nelze snadno vyjádřit sadu souborů, které chcete zálohovat. V těchto vzácných případech můžete implementovat BackupAgent, který přepíše onFullBackup(FullBackupDataOutput) pro uložení toho, co chcete. Chcete-li zachovat výchozí implementaci systému, zavolejte odpovídající metodu na superclass s super.onFullBackup().

pokud implementujete BackupAgent, systém ve výchozím nastavení očekává, že vaše aplikace provede zálohování a obnovení klíče/hodnoty. Chcete-li místo toho použít automatické zálohování založené na souboru, nastavte atribut android:fullBackupOnly na true v manifestu aplikace.

Během automatického zálohování a obnovení operace, systém se spustí aplikace v omezeném režimu jak zabránit aplikaci z přístupu k souborům, které by mohly způsobit konflikty a nechat aplikaci spustit zpětné volání metody v BackupAgent. V tomto omezeném režimu, aplikace je hlavní činností není automaticky spuštěn, jeho Obsah Poskytovatelé nejsou inicializovány, a základna-class Application je vytvořena instance namísto jakékoliv podtřídy prohlásil v aplikaci manifestu.

Upozornění: aby nedošlo K chybám, ujistěte se, že ty části aplikace, které spustit v omezeném režimu (většinou BackupAgent) nemají přístup k obsahu, poskytovatelů ve stejné aplikace nebo pokus o obsazení Application objekt. Pokud se těmto vzorcům nemůžete vyhnout, zvažte implementaci zálohování klíčů / hodnot nebo úplné vypnutí zálohování.

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

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



Napsat komentář

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