sikkerhedskopier brugerdata med Auto Backup

Auto Backup til Apps sikkerhedskopierer automatisk en brugers data fra apps, dermål og kør på Android 6.0 (API-niveau 23) eller nyere. Android bevarer appdata ved at uploade dem til brugerens Google Drev—hvor det er beskyttet af brugerens Google-kontooplysninger. Mængden af data er begrænset til 25 MB peruser af din app, og der er ingen afgift for lagring af backup-data. Din app kan tilpasse sikkerhedskopieringsprocessen eller fravælge ved at deaktivere backups.

for en oversigt over Android ‘ s backupindstillinger og vejledning om, hvilke datadu skal sikkerhedskopiere og gendanne, se data backupoversigt.

filer, der sikkerhedskopieres

som standard indeholder Auto Backup filer i de fleste af de mapper, der er tildelt din app af systemet:

  • Delte præferencer filer.
  • filer gemt på din apps interne lager, adgang til getFilesDir() eller getDir(String, int).
  • filer i mappen returneret afgetDatabasePath(String), som også indeholder filer oprettet medSQLiteOpenHelper klasse.
  • filer på ekstern lagring i mappen returneret afgetExternalFilesDir(String).

Auto Backup udelukker filer i mapper returneret afgetCacheDir()getCodeCacheDir(), ellergetNoBackupFilesDir(). De filer, der er gemt på disse steder, er kun nødvendige midlertidigt eller er forsætligt udelukket fra sikkerhedskopieringsoperationer.

Du kan konfigurere din app til at inkludere og ekskludere bestemte filer. Du kan finde flere oplysninger i afsnittet Medtag og ekskluder filer.

Bemærk: Android behandler ikke konfigurationen af komponenter som brugerdata. Hvis din app aktiverer eller deaktiverer bestemte komponenter i dens manifest, mens den kører, skal du ikke forvente, at AutoBackup gemmer og gendanner konfigurationen. For at bevare konfigurationstilstanden skal du gemme den i delte præferencer og gendanne Delte præferencer ved gendannelse. Hvis du vil have din app til at gemme dens tilstand, skal du gemme tilstand i delte præferencer og gendanne Delte præferencer ved gendannelse.

Backup placering

Backup data gemmes i en privat mappe i brugerens Google Drev-konto,begrænset til 25MB pr app. De gemte data tæller ikke med brugerens personlige Google Drive-kvote. Kun den seneste sikkerhedskopi er gemt. Når abackup er lavet, slettes den forrige sikkerhedskopi (hvis en findes). Sikkerhedskopieringsdatakan ikke læses af brugeren eller andre apps på enheden.

brugere kan se en liste over apps, der er sikkerhedskopieret i Google DriveAndroid-appen. På en Android-drevet enhed kan brugerne finde denne liste i Driveapps navigationsskuffe under Indstillinger > Sikkerhedskopiering og nulstilling > AppData.

sikkerhedskopier fra hver enhed-setup-lifetime gemmes i separate datasæt som vist i følgende eksempler:

  • hvis brugeren ejer to enheder, findes der et backup-datasæt for hver enhed.
  • hvis brugerfabrikken nulstiller en enhed og derefter konfigurerer enheden med den samme konto, gemmes sikkerhedskopien i et nyt datasæt. Forældede datasæt slettes automatisk efter en periode med inaktivitet.

backup schedule

sikkerhedskopier sker automatisk, når alle følgende betingelser er opfyldt:

  • brugeren har aktiveret backup på enheden. I Android 9 er denne indstilling isettings > System > Backup.
  • Der er gået mindst 24 timer siden den sidste sikkerhedskopi.
  • enheden er inaktiv.
  • enheden er tilsluttet et trådløst netværk (hvis enhedsbrugeren ikke har valgt sikkerhedskopier af mobildata).

i praksis forekommer disse forhold omtrent hver nat, men en enhed kan muligvis aldrig sikkerhedskopiere (for eksempel hvis den aldrig opretter forbindelse til et netværk). For at bevare netværksbåndbredden finder uploaden kun sted, hvis appdataene er ændret.

under Automatisk Backup lukker systemet appen ned for at sikre, at den ikke længere skriver til filsystemet. Som standard ignorerer backupsystemet apps, der kører i forgrunden, fordi brugerne vil bemærke, at deres apps lukkes ned. Du kan tilsidesætte standardadfærden ved at indstille backupInForeground attributten til true.

for at forenkle test inkluderer Android værktøjer, der giver dig mulighed for manuelt at starte en sikkerhedskopi af din app. Du kan finde flere oplysninger under Test backup og gendannelse.

Gendan tidsplan

Data gendannes, når Appen er installeret, enten fra Play Butik, under enhedsopsætning (når systemet installerer tidligere installerede apps) eller fra at køre adb install. Gendannelsesoperationen sker, efter at APK er installeret, men før appen er tilgængelig for at blive lanceret af brugeren.

under den første enhedsopsætningsguide vises brugeren en liste over tilgængelige backup-datasæt og bliver spurgt, hvilken der skal gendannes dataene fra. Uanset hvilken backup datasæt er valgt bliver forfædres datasæt for enheden. Enheden kan gendanne fra enten sine egne sikkerhedskopier eller det forfædres datasæt. Enheden prioriterer sin egen sikkerhedskopi, hvis sikkerhedskopier fra begge kilder er tilgængelige. Hvis brugeren ikke gik gennem enhedsopsætningsguiden, kan enheden kun gendanne fra sine egne sikkerhedskopier.

for at forenkle test inkluderer Android værktøjer, der giver dig mulighed for manuelt at starte en gendannelse af din app. Du kan finde flere oplysninger under Test backup og gendannelse.

aktiver og deaktiver backup

Apps, der er målrettet mod Android 6.0 (API-niveau 23) eller højere, deltager automatisk i automatisk Backup. I din app manifest-fil skal du indstille den boolske værdiandroid:allowBackupfor at aktivere eller deaktivere sikkerhedskopi. Standardværdien er true men for at gøre yourintentions klare, anbefaler vi eksplicit at indstille attributten i dine manifestas vist nedenfor:

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

Du kan deaktivere sikkerhedskopier ved at indstilleandroid:allowBackuptilfalse. Du vil muligvis gøre dette, hvis din app kan genskabe sin tilstand gennem en anden mekanisme, eller hvis din app beskæftiger sig med følsomme oplysninger, som Android ikke skal sikkerhedskopiere.

Inkluder og ekskluder filer

som standard sikkerhedskopierer systemet næsten alle AppData. Du kan finde flere oplysninger i filer, der er sikkerhedskopieret. Dette afsnit viser dig, hvordan du definerer brugerdefinerede regler for at kontrollere, hvad der sikkerhedskopieres.

  1. iAndroidManifest.xml, Tilføjandroid:fullBackupContent attributten til<application> elementet. Denne attribut peger på en fil, der indeholder regler for sikkerhedskopiering. For eksempel:
    <application ... android:fullBackupContent="@xml/my_backup_rules"></application>
  2. Opret en fil kaldetmy_backup_rules.xml i mappenres/xml/. Inde i filen skal du tilføje regler med<include> og<exclude> elementer.Følgende prøve sikkerhedskopierer alle delte præferencer undtagendevice.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. Hvis du angiver et <Inkluder> element, indeholder systemet ikke længere nogen filer som standard og sikkerhedskopierer kun de angivne filer. For at inkludere flere filer skal du bruge flere <Inkluder> elementer.

    Bemærk: filer i mapper returneret af getCacheDir()getCodeCacheDir()eller getNoBackupFilesDir() er altid udelukket, selvom du forsøger at inkludere dem.

  • <exclude> – angiver en fil eller mappe, der skal udelukkes under sikkerhedskopiering. Her er nogle filer, der typisk er udelukket fra backup:

    • filer, der har enhedsspecifikke identifikatorer, enten udstedt af en server eller genereret på enheden. For eksempel skal Google Cloud Messaging (GCM) generere et registreringstoken, hver gang en bruger installerer din app på en ny enhed. Hvis det gamle registreringstoken gendannes, kan appen opføre sig uventet.
    • kontooplysninger eller andre følsomme oplysninger. Overvej at bede brugeren om at autentificere første gang de starter en gendannet app i stedet for at tillade opbevaring af sådanne oplysninger i sikkerhedskopien.
    • filer relateret til app debugging.
    • store filer, der får appen til at overskride 25 MB sikkerhedskopieringskvote.

Bemærk: Hvis din konfigurationsfil angiver begge elementer, indeholder sikkerhedskopien alt, der er fanget af<include> elementer minus de ressourcer, der er navngivet i<exclude> elementer. Med andre ord,<exclude> har forrang.

hvert element skal indeholde følgende to attributter:

  • domain – angiver placeringen af ressourcen. Gyldige værdier for denne attribut omfatter følgende:
    • root – mappen på filsystemet, hvor alle private filer, der tilhører denne app er gemt.
    • file – mapper returneret af getFilesDir().
    • database – mapper returneret af getDatabasePath(). Databaser oprettet med SQLiteOpenHelper gemmes her.
    • sharedpref – mappen hvor SharedPreferences er gemt.
    • external mappen returneret afgetExternalFilesDir()
  • Bemærk: Du kan ikke sikkerhedskopiere filer uden for disse placeringer.

  • path: angiver en fil eller mappe, der skal medtages i eller ekskluderes fra backup. Bemærk, at:

    • denne attribut understøtter ikke syntaks for jokertegn eller regeks.
    • du kan bruge . til at henvise til den aktuelle mappe, men du kan ikke henvise til den overordnede mappe .. af sikkerhedsmæssige årsager.
    • hvis du angiver en mappe, gælder reglen for alle filer i mappen og rekursive undermapper.

include elementet kan også indeholderequireFlags attributten, somafsnit, der beskriver, hvordan man definerer betingede krav tilbackup afsnit diskuterer mere detaljeret.

Definer dehedsbetingelser, der kræves til sikkerhedskopiering

Hvis din app gemmer følsomme oplysninger på enheden, kan du angive de betingelser, hvorunder din apps data er inkluderet i brugerens sikkerhedskopiering. Du kan tilføje følgende betingelser i Android 9 (API level 28) ellerhøjere:

  • clientSideEncryption: brugerens backup er krypteret med en klient-sidesecret. Denne form for kryptering er aktiveret på enheder,der kører Android 9 ellerhøjere, så længe brugeren har aktiveret backup i Android 9 ellerhøjere og har indstillet ascreen lock (PIN, mønster eller adgangskode) til deres enhed.
  • deviceToDeviceTransfer: brugeren overfører deres backup til en andenenhed,der understøtter lokal enhed til enhedoverførsel (f.eks.

Hvis du har opgraderet dine udviklingsenheder til Android 9, skal du deaktivereog aktiver derefter sikkerhedskopiering af data efter opgradering. Dette skyldes, at Android kun krypterer sikkerhedskopier med en klientside Hemmelighed efter at have informeret brugerne i Indstillinger eller installationsguiden.

for at erklære inklusionsbetingelserne skal du indstillerequireFlags attributten til den ønskede værdi eller værdier i din i<include> elementer inden for dit sæt af backupregler:

my_backup_rules.

<?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>

Hvis din app implementerer et nøgleværdi-backupsystem, eller hvis du selv implementerer backupagent,kan du også anvende disse betingede krav til din backuplogik ved at udføre en bitvis sammenligning mellem etBackupDataOutput objektets sæt af transportflag og din brugerdefinerede backupagentsFLAG_CLIENT_SIDE_ENCRYPTION_ENABLEDeller FLAG_DEVICE_TO_DEVICE_TRANSFERflag.

følgende kodestykke viser et eksempel på brug af denne metode:

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, der implementerer automatisk Backup, behøver ikke at implementere en BackupAgent. Du kan dog eventuelt implementere en brugerdefineret BackupAgent. Der er typisk to grunde til at gøre dette:

  • du vil modtage underretning om sikkerhedskopieringshændelser som onRestoreFinished() eller onQuotaExceeded(long, long). Disse tilbagekaldsmetoder udføres, selvom appen ikke kører.
  • du kan ikke nemt udtrykke det sæt filer, du vil tage backup af. I disse sjældne tilfælde kan du implementere en BackupAgent, der tilsidesætter onFullBackup(FullBackupDataOutput) for at gemme det, du ønsker. For at bevare systemets standardimplementering skal du ringe til den tilsvarende metode på superklassen med super.onFullBackup().

Hvis du implementerer en BackupAgent, forventer systemet som standard, at din app udfører nøgle / værdi backup og gendannelse. For at bruge den filbaserede Auto Backup i stedet skal du indstilleandroid:fullBackupOnly attributten tiltrue i din apps manifest.

under Automatisk sikkerhedskopiering og gendannelse starter systemet appen i en begrænset tilstand for både at forhindre appen i at få adgang til filer, der kan forårsage konflikter, og lade appen udføre tilbagekaldsmetoder i dens BackupAgent. I denne begrænsede tilstand startes appens hovedaktivitet ikke automatisk, dens indholdsudbydere initialiseres ikke, og basisklassen Application instantieres i stedet for enhver underklasse, der er erklæret i appens manifest.

forsigtig: for at undgå fejl skal du sørge for, at de dele af din app, der udføres i begrænset tilstand (for det meste ditBackupAgent) ikke får adgang til indholdsudbydere i den samme app eller forsøger at kasteApplication objekt. Hvis du ikke kan undgå disse mønstre, så overvej at implementere nøgle/værdi backup eller deaktivere backup helt.

din BackupAgentskal implementere de abstrakte metoder onBackup()og onRestore(), som bruges til backup af nøgleværdi. Men hvis du ikke ønsker at udføre nøgleværdi backup, kan du bare lade din implementering af disse metoder være tom.

Du kan finde flere oplysninger under udvidelse af BackupAgent.



Skriv et svar

Din e-mailadresse vil ikke blive publiceret.