säkerhetskopiera användardata med automatisk säkerhetskopiering

automatisk säkerhetskopiering för appar säkerhetskopierar automatiskt en användares data från appar som Target och körs på Android 6.0 (API-nivå 23) eller senare. Android bevarar appdata genom att ladda upp den till användarens Google Drive—där den skyddas av användarens Google-kontouppgifter. Mängden data är begränsad till 25MB peruser av din app och det finns ingen avgift för att lagra säkerhetskopieringsdata. Din app kananpassa säkerhetskopieringen eller välja bort genom att disablingbackups.

för en översikt över Android backup alternativ och vägledning om vilka datadu bör säkerhetskopiera och återställa, se data backupoverview.

filer som säkerhetskopieras

som standard innehåller Automatisk säkerhetskopiering filer i de flesta kataloger som tilldelas din app av systemet:

  • delade Inställningsfiler.
  • filer som sparats i appens interna lagring, nås av getFilesDir() eller getDir(String, int).
  • filer i katalogen som returneras avgetDatabasePath(String), som också innehåller filer som skapats med klassenSQLiteOpenHelper.
  • filer på extern lagring i katalogen som returneras av getExternalFilesDir(String).

automatisk säkerhetskopiering utesluter filer i kataloger som returneras av getCacheDir()getCodeCacheDir() eller getNoBackupFilesDir(). Filerna som sparas på dessa platser behövs bara tillfälligt eller är avsiktligt uteslutna från säkerhetskopieringsoperationer.

Du kan konfigurera din app för att inkludera och utesluta vissa filer. Mer information finns i avsnittet Inkludera och exkludera filer.

Obs: Android behandlar inte konfigurationen av komponenter som användardata. Om din app aktiverar eller inaktiverar specifika komponenter i manifestet medan den körs, förvänta dig inte att AutoBackup sparar och återställer konfigurationen. För att bevara konfigurationstillståndet, spara det i delade Inställningar och återställ delade Inställningar på Återställ. Om du vill att din app ska spara sitt tillstånd lagrar du tillstånd i delade Inställningar och återställer delade inställningar vid återställning.

Säkerhetskopieringsplats

säkerhetskopieringsdata lagras i en privat mapp i användarens Google Drive-konto,begränsat till 25 MB per app. Den sparade data räknas inte in i användarens personliga Google Drive-kvot. Endast den senaste säkerhetskopian lagras. När abackup görs raderas den tidigare säkerhetskopian (om en finns). Säkerhetskopieringsdatakan inte läsas av användaren eller andra appar på enheten.

användare kan se en lista över appar som har säkerhetskopierats i Google DriveAndroid-appen. På en Android-enhet kan användare hitta den här listan i Driveapps navigeringslåda under Inställningar > säkerhetskopiera och återställ > appdata.

säkerhetskopior från varje enhet-setup-livstid lagras i separata datamängder som visas i följande exempel:

  • Om användaren äger två enheter finns en säkerhetskopieringsdataset för varje enhet.
  • Om användarfabriken återställer en enhet och sedan ställer in enheten med samma konto lagras säkerhetskopian i en ny dataset. Föråldrade datamängder raderas automatiskt efter en period av inaktivitet.

Backup schedule

säkerhetskopieringar sker automatiskt när alla följande villkor är uppfyllda:

  • användaren har aktiverat säkerhetskopiering på enheten. I Android 9 är denna inställning iinställningar > System > Backup.
  • minst 24 timmar har gått sedan den senaste säkerhetskopieringen.
  • enheten är inaktiv.
  • enheten är ansluten till ett Wi-Fi-nätverk (om enhetsanvändaren inte har valt säkerhetskopior av mobildata).

i praktiken inträffar dessa förhållanden ungefär varje natt men en enhet kan aldrig säkerhetskopiera (till exempel om den aldrig ansluter till ett nätverk). För att spara networkbandwidth sker uppladdningen endast om appdata har ändrats.

under automatisk säkerhetskopiering stänger systemet av appen för att se till att den inte längre skriver till filsystemet. Som standard ignorerar säkerhetskopieringssystemet appar som körs i förgrunden eftersom användare märker att deras appar stängs av. Du kan åsidosätta standardbeteendet genom att ange attributet backupInForeground till true.

för att förenkla testningen innehåller Android verktyg som låter dig manuellt initiera en säkerhetskopia av din app. Mer information finns i testa säkerhetskopiering och återställning.

Återställ schema

Data återställs när appen är installerad, antingen från Play store, under enhetens inställning (när systemet installerar tidigare installerade appar) eller från att köra adb install. Återställningsoperationen sker efter att APK har installerats, men innan appen är tillgänglig för att startas av användaren.

under den första enhetsinställningsguiden visas användaren en lista över tillgängliga säkerhetskopieringsdataset och frågas vilken som ska återställas data från. Oavsett vilken backup dataset väljs blir ancestral dataset för enheten. Enheten kan återställa från antingen sina egna säkerhetskopior eller ancestral dataset. Enheten prioriterar sin egen säkerhetskopiering om säkerhetskopior från båda källorna är tillgängliga. Om användaren inte gick igenom enhetsinstallationsguiden kan enheten bara återställa från sina egna säkerhetskopior.

för att förenkla testningen innehåller Android verktyg som låter dig manuellt initiera en återställning av din app. Mer information finns i testa säkerhetskopiering och återställning.

aktivera och inaktivera säkerhetskopiering

appar som riktar sig till Android 6.0 (API-nivå 23) eller högre deltar automatiskt i Automatisk säkerhetskopiering. I din app manifest-fil ställer du in det booleska värdetandroid:allowBackupför att aktivera eller inaktivera säkerhetskopiering. Standardvärdet är true men för att göra dina intentioner tydliga rekommenderar vi uttryckligen att du anger attributet i dina manifest som visas nedan:

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

Du kan inaktivera säkerhetskopior genom att ställa in android:allowBackup till false. Du mightwant att göra detta om din app kan återskapa sitt tillstånd genom någon annan mechanismor om din app behandlar känslig information som Android inte bör säkerhetskopiera.

inkludera och utesluta filer

som standard säkerhetskopierar systemet nästan alla appdata. Mer information finns i filer som säkerhetskopieras. Det här avsnittet visar hur du definierar anpassade XML-regler för att kontrollera vad som säkerhetskopieras.

  1. iAndroidManifest.xml lägger du tillandroid:fullBackupContent attributet till<application> elementet. Detta attribut pekar på en XML-fil som innehåller säkerhetskopieringsregler. Till exempel:
    <application ... android:fullBackupContent="@xml/my_backup_rules"></application>
  2. skapa en XML-fil som heter my_backup_rules.xml i katalogenres/xml/. Inuti filen lägger du till regler med<include> och<exclude> – elementen.Följande exempel säkerhetskopierar alla delade inställningar utomdevice.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. Om du anger ett <inkludera> – element, innehåller systemet inte längre några filer som standard och säkerhetskopierar bara de angivna filerna. För att inkludera flera filer, använd flera<inkludera> element.

    Obs: filer i kataloger som returneras av getCacheDir()getCodeCacheDir() eller getNoBackupFilesDir() är alltid uteslutna även om du försöker inkludera dem.

  • <exclude> – anger en fil eller mapp som ska uteslutas under säkerhetskopiering. Här är några filer som vanligtvis utesluts från säkerhetskopiering:
    • filer som har enhetsspecifika identifierare, antingen utfärdade av en server eller genererade på enheten. Till exempel måste Google Cloud Messaging (GCM) generera en registreringstoken varje gång en användare installerar din app på en ny enhet. Om den gamla registreringstoken återställs kan appen uppträda oväntat.
    • kontouppgifter eller annan känslig information. Överväg att be användaren att återautentisera första gången de startar en återställd app snarare än att tillåta lagring av sådan information i säkerhetskopian.
    • filer relaterade till appfelsökning.
    • stora filer som gör att appen överskrider 25MB backup-kvoten.

Obs: Om din konfigurationsfil anger båda elementen innehåller säkerhetskopian allt som fångats av<include> – element minus resurserna som heter i<exclude> – element. Med andra ord har <exclude> företräde.

varje element måste innehålla följande två attribut:

  • domain – anger platsen för resursen. Giltiga värden för detta attribut inkluderar följande:
    • root – katalogen på filsystemet där alla privata filer som tillhör denna app lagras.
    • file – kataloger som returneras av getFilesDir().
    • database – kataloger som returneras av getDatabasePath(). Databaser skapade med SQLiteOpenHelper lagras här.
    • sharedpref – katalogen där SharedPreferences lagras.
    • external katalogen som returneras avgetExternalFilesDir()
  • Obs! Du kan inte säkerhetskopiera filer utanför dessa platser.

  • path: anger en fil eller mapp som ska inkluderas i eller uteslutas från säkerhetskopiering. Observera att:
    • detta attribut stöder inte jokertecken eller regex-syntax.
    • du kan använda . för att referera till den aktuella katalogen, men du kan inte referera till den överordnade katalogen .. av säkerhetsskäl.
    • Om du anger en katalog gäller regeln för alla filer i katalogen och rekursiva underkataloger.

include – elementet kan också innehållarequireFlags – attributet, somavsnittet som beskriver hur man definierar villkorliga krav förbackup avsnitt diskuterar mer detaljerat.

definiera enhetsvillkor som krävs för säkerhetskopiering

om din app sparar känslig information på enheten kan du specificera villkor under vilka appens data ingår i användarens säkerhetskopiering. Du kan lägga till följande villkor i Android 9 (API-nivå 28) ellerhögre:

  • clientSideEncryption: användarens säkerhetskopia är krypterad med en klient-sidesecret. Denna form av kryptering är aktiverad på enheter som kör Android 9 ellerhögre så länge användaren har aktiverat säkerhetskopiering i Android 9 ellerhögre och har ställt in ascreen lock (PIN,mönster eller lösenord) för sin enhet.
  • deviceToDeviceTransfer: användaren överför sin säkerhetskopia till en annanenhet som stöder lokal enhet-till-enhetöverföring (till exempel Google Pixel).

Om du har uppgraderat dina utvecklingsenheter till Android 9 måste du inaktivera och sedan återaktivera säkerhetskopiering av data efter uppgradering. Detta beror på att Android endastkrypterar säkerhetskopior med en klienthemlighet efter att ha informerat användare i Inställningar eller installationsguiden.

för att deklarera inkluderingsvillkoren, Ställ inrequireFlags attributet till det önskade värdet eller värdena i ditt i<include> element i din uppsättning backupregler:

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>

om din app implementerar ett key-value backupsystem, eller om du implementBackupAgent själv,kan du också tillämpa dessa villkorliga krav på din backup logik genom att utföra en bitvis jämförelse mellan enBackupDataOutput object ’ set av transportflaggor och din anpassade backup agentsFLAG_CLIENT_SIDE_ENCRYPTION_ENABLEDeller FLAG_DEVICE_TO_DEVICE_TRANSFERflaggor.

följande kodavsnitt visar ett exempel på användning av denna metod:

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

implementera BackupAgent

appar som implementerar automatisk säkerhetskopiering behöver inte implementera ett BackupAgent. Du kan dock valfritt implementera ett anpassat BackupAgent. Vanligtvis finns det två skäl till att göra detta:

  • du vill få meddelande om säkerhetskopieringshändelser som onRestoreFinished() eller onQuotaExceeded(long, long). Dessa återuppringningsmetoder körs även om appen inte körs.
  • Du kan inte enkelt uttrycka den uppsättning filer du vill säkerhetskopiera med XML-regler. I dessa sällsynta fall kan du implementera en BackupAgent som åsidosätter onFullBackup(FullBackupDataOutput) för att lagra det du vill ha. För att behålla systemets standardimplementering, Ring motsvarande metod på superklassen med super.onFullBackup().

Om du implementerar en BackupAgent förväntar sig systemet som standard att din app ska utföra säkerhetskopiering och återställning av nyckel/värde. För att använda den filbaserade Auto Backup istället, Ställ in android:fullBackupOnly attributet till true I appens manifest.

under automatisk säkerhetskopiering och återställning startar systemet appen i ett begränsat läge för att både förhindra att appen kommer åt filer som kan orsaka konflikter och låta appen utföra återuppringningsmetoder i dess BackupAgent. I detta begränsade läge startas inte appens huvudaktivitet automatiskt, dess innehållsleverantörer initieras inte och basklassen Application instansieras istället för någon underklass som deklareras i appens manifest.

varning: för att undvika fel, se till att de delar av din app som körs i begränsat läge (mestadels ditt BackupAgent) inte har åtkomst till innehållsleverantörer i samma app eller försöker Casta Application objekt. Om du inte kan undvika dessa mönster, överväg att implementera nyckel/värde backup eller inaktivera säkerhetskopiering helt.

din BackupAgent måste implementera de abstrakta metoderna onBackup() och onRestore(), som används för säkerhetskopiering av nyckelvärde. Men om du inte vill utföra säkerhetskopiering av nyckelvärde kan du bara lämna din implementering av dessa metoder tom.

Mer information finns i utöka BackupAgent.



Lämna ett svar

Din e-postadress kommer inte publiceras.