Een back-up maken van gebruikersgegevens met Auto Backup

Auto Backup for Apps maakt automatisch een back-up van de gegevens van een gebruiker van apps die zijn gericht op en draaien op Android 6.0 (API-niveau 23) of hoger. Android bewaart app-gegevens door ze te uploaden naar de Google Drive van de gebruiker, waar ze worden beschermd door de Google-accountgegevens van de gebruiker. De hoeveelheid gegevens is beperkt tot 25 MB per gebruiker van uw app en er zijn geen kosten voor het opslaan van back-upgegevens. Uw app kan het back-upproces aanpassen of uitschakelen door back-ups uit te schakelen.

Voor een overzicht van de back-upopties van Android en richtlijnen over welke gegevens u moet back-uppen en terugzetten, raadpleegt u het gegevensback-upoverzicht.

Bestanden waarvan een back-up wordt gemaakt

Aan standaard omvat Auto Backup bestanden in de meeste mappen die door het systeem aan uw app zijn toegewezen:

  • Gedeelde voorkeurenbestanden.
  • Bestanden die zijn opgeslagen in de interne opslag van uw app, toegankelijk via getFilesDir() of getDir(String, int).
  • Bestanden in de door getDatabasePath(String) geretourneerde directory, die ook bestanden bevat die zijn gemaakt met de klasse SQLiteOpenHelper.
  • Bestanden op externe opslag in de directory geretourneerd door getExternalFilesDir(String).

Auto-back-up sluit bestanden uit in mappen die worden geretourneerd door getCacheDir()getCodeCacheDir(), of getNoBackupFilesDir(). De bestanden die op deze locaties zijn opgeslagen, zijn slechts tijdelijk nodig, of zijn opzettelijk uitgesloten van back-uptaken.

U kunt uw app configureren om bepaalde bestanden op te nemen en uit te sluiten. Voor meer informatie, zie het gedeelte Bestanden opnemen en uitsluiten.

Opmerking: Android behandelt de configuratie van componenten niet als gebruikersgegevens. Als uw app specifieke componenten in zijn manifest in- of uitschakelt terwijl deze wordt uitgevoerd, verwacht dan niet dat AutoBackup de configuratie opslaat en herstelt. Om de configuratiestatus te behouden, slaat u deze op in Gedeelde voorkeuren en herstelt u Gedeelde voorkeuren bij het herstellen. Als u wilt dat uw app zijn status bewaart, slaat u de status op in Gedeelde voorkeuren en herstelt u Gedeelde voorkeuren bij herstel.

Backuplocatie

Back-upgegevens worden opgeslagen in een privémap in het Google Drive-account van de gebruiker, beperkt tot 25 MB per app. De opgeslagen gegevens tellen niet mee voor het persoonlijke Google Drive-quotum van de gebruiker. Alleen de meest recente back-up wordt opgeslagen. Wanneer een back-up wordt gemaakt, wordt de vorige back-up (als die bestaat) verwijderd. De back-upgegevens kunnen niet worden gelezen door de gebruiker of andere apps op het apparaat.

Gebruikers kunnen een lijst met apps bekijken waarvan een back-up is gemaakt in de Google Drive-app voor Android. Op een Android-apparaat kunnen gebruikers deze lijst vinden in de navigatielade van de Driveapp onder Instellingen > Back-up maken en terugzetten > App-gegevens.

Back-ups van elk apparaat worden opgeslagen in afzonderlijke datasets, zoals te zien is in de volgende voorbeelden:

  • Als de gebruiker twee apparaten bezit, dan bestaat er voor elk apparaat een back-up dataset.
  • Als de gebruiker een apparaat in de fabriek terugzet en vervolgens het apparaat instelt met hetzelfde account, wordt de backup opgeslagen in een nieuwe dataset. Verouderde datasets worden automatisch verwijderd na een periode van inactiviteit.

Back-up schema

Back-ups vinden automatisch plaats als aan alle volgende voorwaarden is voldaan:

  • De gebruiker heeft back-up op het apparaat ingeschakeld. In Android 9 staat deze instelling inSettings > System > Backup.
  • Er zijn ten minste 24 uur verstreken sinds de laatste back-up.
  • Het apparaat is inactief.
  • Het apparaat is verbonden met een Wi-Fi-netwerk (als de gebruiker van het apparaat niet heeft gekozen voor back-ups van mobiele gegevens).

In de praktijk doen deze voorwaarden zich ongeveer elke nacht voor, maar het kan voorkomen dat een apparaat nooit een back-up maakt (bijvoorbeeld als het nooit verbinding maakt met een netwerk). Om netwerkbandbreedte te sparen, vindt de upload alleen plaats als de app-gegevens zijn gewijzigd.

Tijdens de automatische back-up sluit het systeem de app af om er zeker van te zijn dat deze niet langer naar het bestandssysteem schrijft. Standaard negeert het back-upsysteem apps die op de voorgrond draaien, omdat gebruikers zouden merken dat hun apps worden afgesloten. U kunt het standaardgedrag opheffen door het backupInForeground attribuut op true te zetten.

Om het testen te vereenvoudigen, bevat Android hulpmiddelen waarmee u handmatig een back-up van uw app kunt starten. Voor meer informatie, zie Back-up en herstel testen.

Herstel schema

Gegevens worden hersteld wanneer de app wordt geïnstalleerd, hetzij vanuit de Play store, tijdens het instellen van het apparaat (wanneer het systeem eerder geïnstalleerde apps installeert), of van het uitvoeren van adb install. Het herstel vindt plaats nadat de APK is geïnstalleerd, maar voordat de app beschikbaar is om door de gebruiker te worden gestart.

Tijdens de eerste installatiewizard van het apparaat krijgt de gebruiker een lijst met beschikbare backup-datasets te zien en wordt hem gevraagd van welke dataset hij de gegevens wil herstellen. Welke back-up dataset wordt geselecteerd, wordt de voorouderlijke dataset voor het apparaat. Het toestel kan herstellen vanuit zijn eigen back-ups of vanuit de voorouderlijke dataset. Het toestel geeft voorrang aan zijn eigen backup als backups van beide bronnen beschikbaar zijn. Als de gebruiker de wizard voor het instellen van het apparaat niet heeft doorlopen, kan het apparaat alleen herstellen vanuit de eigen back-ups.

Om het testen te vereenvoudigen, bevat Android hulpmiddelen waarmee u handmatig een herstel van uw app kunt starten. Zie Back-up en herstel testen voor meer informatie.

Back-up in- en uitschakelen

Apps die zijn gericht op Android 6.0 (API-niveau 23) of hoger nemen automatisch deel aan Auto Backup. Stel in het manifest-bestand van uw app de booleaanse waardeandroid:allowBackupin om back-up in of uit te schakelen. De standaardwaarde is true maar om uw bedoelingen duidelijk te maken, raden wij u aan het attribuut expliciet in uw manifest in te stellen zoals hieronder getoond:

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

U kunt back-ups uitschakelen door android:allowBackup in te stellen op false. U zou dit kunnen doen als uw app zijn staat kan herscheppen via een ander mechanisme of als uw app gevoelige informatie behandelt waarvan Android geen back-up zou moeten maken.

Bestanden in- en uitsluiten

Het systeem maakt standaard een back-up van bijna alle app-gegevens. Zie Bestanden waarvan een back-up wordt gemaakt voor meer informatie. Dit gedeelte laat zien hoe u aangepaste XML-regels kunt definiëren om te bepalen wat wordt geback-upt.

  1. In AndroidManifest.xml, voegt u het android:fullBackupContent-attribuut toe aan het <application>-element. Dit attribuut verwijst naar een XML-bestand dat back-upregels bevat. 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. Om meerdere bestanden op te nemen, gebruikt u meerdere <include> elementen.

    Opmerking: Bestanden in mappen geretourneerd door getCacheDir()getCodeCacheDir(), of getNoBackupFilesDir() worden altijd uitgesloten, zelfs als je ze probeert op te nemen.

  • <exclude> – Specificeert een bestand of map om uit te sluiten tijdens de back-up. Hier zijn enkele bestanden die gewoonlijk worden uitgesloten van een back-up:
    • Bestanden die apparaatspecifieke identifiers hebben, ofwel uitgegeven door een server of gegenereerd op het apparaat. Google Cloud Messaging (GCM) moet bijvoorbeeld een registratietoken genereren elke keer dat een gebruiker uw app installeert op een nieuw apparaat. Als het oude registratietoken wordt hersteld, kan de app zich onverwacht gedragen.
    • Accountgegevens of andere gevoelige informatie. Overweeg om de gebruiker te vragen zich de eerste keer dat hij een herstelde app start opnieuw te verifiëren in plaats van toe te staan dat dergelijke informatie in de back-up wordt opgeslagen.
    • Bestanden met betrekking tot het debuggen van apps.
    • 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.

Toestelvoorwaarden voor back-up definiëren

Als uw app gevoelige informatie op het apparaat opslaat, kunt u voorwaarden specificeren waaronder de gegevens van uw app worden opgenomen in de back-up van de gebruiker. U kunt de volgende voorwaarden toevoegen in Android 9 (API-niveau 28) of hoger:

  • clientSideEncryption: De back-up van de gebruiker wordt versleuteld met een client-sidesecret. Deze vorm van versleuteling wordt ingeschakeld op apparaten met Android 9 of hoger, mits de gebruiker back-up heeft ingeschakeld in Android 9 of hoger en een schermvergrendeling (PIN, patroon of wachtwoord) heeft ingesteld voor zijn apparaat.
  • deviceToDeviceTransfer: De gebruiker zet zijn back-up over naar een ander apparaat dat lokale apparaat-naar-apparaat-overdracht ondersteunt (bijvoorbeeld Google Pixel).

Als u uw ontwikkelapparaten hebt geüpgraded naar Android 9, moet u na het upgraden de gegevensback-up uitschakelen en vervolgens weer inschakelen. Dit komt omdat Android alleen back-ups met een client-side geheim versleutelt nadat gebruikers hierover zijn geïnformeerd in Instellingen of de Setup Wizard.

Om de insluitvoorwaarden te verklaren, stelt u het requireFlags attribuut in op de gewenste waarde of waarden in uw in de <include> elementen binnen uw set van back-upregels:

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>

Als uw app een key-value backupsysteem implementeert, of als u zelfBackupAgent implementeert,kunt u deze voorwaardelijke vereisten ook toepassen op uw back-uplogica door een bitwise vergelijking uit te voeren tussen eenBackupDataOutput object’sset van transportvlaggen en deFLAG_CLIENT_SIDE_ENCRYPTION_ENABLEDof FLAG_DEVICE_TO_DEVICE_TRANSFERvlaggen van uw aangepaste back-up agent.

De volgende codefragment toont een voorbeeldgebruik van deze methode:

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. Om in plaats daarvan de bestandsgebaseerde Auto Backup te gebruiken, stelt u het android:fullBackupOnly attribuut in op true in het manifest van uw app.

Tijdens automatische backup- en herstelbewerkingen start het systeem de app op in een beperkte modus om te voorkomen dat de app bestanden opent die conflicten kunnen veroorzaken en om de app callback-methodes in zijn BackupAgent uit te laten voeren. In deze beperkte modus wordt de hoofdactiviteit van de app niet automatisch gestart, worden de Content Providers niet geïnitialiseerd en wordt de basisklasse Application geïnstantieerd in plaats van een subklasse die in het manifest van de app wordt gedeclareerd.

Let op: Om fouten te voorkomen, moet u ervoor zorgen dat de delen van uw app die in de beperkte modus worden uitgevoerd (meestal uw BackupAgent) geen toegang hebben tot content providers in dezelfde app of proberen het Application object te casten. Als u deze patronen niet kunt vermijden, overweeg dan om Key/Value-back-up te implementeren of back-up helemaal uit te schakelen.

Uw BackupAgent moet de abstracte methoden onBackup() en onRestore() implementeren, die worden gebruikt voor key-value-back-up. Maar als u geen key-value backup wilt uitvoeren, kunt u uw implementatie van deze methoden gewoon leeg laten.

Voor meer informatie, zie Uitbreiden BackupAgent.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.