Back-up van gebruikersgegevens met automatische back-up
automatische back-up voor Apps maakt automatisch een back-up van de gegevens van een gebruiker vanuit apps die gericht zijn op Android 6.0 (API-niveau 23) of hoger. Android behoudt appdata door het uploaden naar Google Drive van de gebruiker-waar het wordt beschermd door 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 afmelden door back-ups uit te schakelen.
voor een overzicht van de back-upopties van Android en richtlijnen over welke datayou een back-up moet maken en herstellen, zie de data backupoverview.
bestanden waarvan een back-up wordt gemaakt
standaard bevat automatische back-up bestanden in de meeste mappen die door het systeem aan uw app zijn toegewezen:
- gedeelde voorkeurenbestanden.
- bestanden opgeslagen in de interne opslag van uw app, toegankelijk via
getFilesDir()
ofgetDir(String, int)
. - bestanden in de map geretourneerd door
getDatabasePath(String)
, die ook bestanden bevat die zijn aangemaakt met deSQLiteOpenHelper
klasse. - bestanden op externe opslag in de directory geretourneerd door
getExternalFilesDir(String)
.
automatische 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 worden opzettelijk uitgesloten van back-upbewerkingen.
u kunt uw app configureren om bepaalde bestanden op te nemen en uit te sluiten. Zie de sectie Bestanden opnemen en uitsluiten voor meer informatie.
opmerking: Android behandelt de configuratie van componenten niet als gebruikersgegevens. Als je app specifieke componenten in zijn manifest in-of uitschakelt terwijl het draait, verwacht dan niet dat AutoBackup de configuratie opslaat en herstelt. Als u de configuratiestatus wilt behouden, slaat u deze op in gedeelde voorkeuren en herstelt u gedeelde voorkeuren bij herstellen. Als u de status van uw app wilt opslaan, slaat u de status op in gedeelde voorkeuren en herstelt u gedeelde voorkeuren bij herstellen.
back-uplocatie
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 de persoonlijke Google Drive-quota van de gebruiker. Alleen de meest recente back-up wordt opgeslagen. Wanneer abackup wordt gemaakt, wordt de vorige back-up (als die bestaat) verwijderd. De back-updatacan niet worden gelezen door de gebruiker of andere apps op het apparaat.
gebruikers kunnen een lijst zien met apps waarvan een back-up is gemaakt in de Google DriveAndroid-app. Op een Android-apparaat kunnen gebruikers deze lijst vinden in de navigatielade van het Driveapp onder Instellingen > back-up en reset > App data.
back-ups van elk apparaat-setup-lifetime worden opgeslagen in afzonderlijke datasets, zoals in de volgende voorbeelden te zien is:
- als de gebruiker twee apparaten bezit, bestaat er voor elk apparaat een back-updataset.
- als de user factory een apparaat reset en vervolgens het apparaat met hetzelfde account instelt, wordt de back-up opgeslagen in een nieuwe dataset. Verouderde datasets worden automatisch verwijderd na een periode van inactiviteit.
back-upschema
back-ups worden automatisch gemaakt wanneer aan alle volgende voorwaarden wordt voldaan:
- De gebruiker heeft back-up op het apparaat ingeschakeld. In Android 9 wordt deze instelling ingevoegd > systeem > back-up.
- 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 data).
in de praktijk komen deze omstandigheden ongeveer elke nacht voor, maar een apparaat kan nooit een back-up maken (bijvoorbeeld als het nooit verbinding maakt met een netwerk). Om netwerkbandbreedte te besparen, vindt de upload alleen plaats als de app-gegevens zijn gewijzigd.
tijdens de automatische back-up schakelt het systeem de app uit om er zeker van te zijn dat het niet langer naar het bestandssysteem schrijft. Standaard negeert het back-upsysteem apps die op de voorgrond worden uitgevoerd omdat gebruikers zouden merken dat hun apps worden afgesloten. U kunt het standaardgedrag overschrijven door het attribuut backupInForeground
in te stellen op waar.
om het testen te vereenvoudigen, bevat Android tools waarmee u handmatig een back-up van uw app kunt starten. Zie reservekopie testen en terugzetten voor meer informatie.
Herstelschema
gegevens worden hersteld wanneer de app is geïnstalleerd, hetzij vanuit de Play store, tijdens het instellen van het apparaat (wanneer het systeem eerder geïnstalleerde apps installeert), of vanaf het uitvoeren van adb install. De herstelbewerking vindt plaats nadat de APK is geïnstalleerd, maar voordat de app beschikbaar is om door de gebruiker te worden gelanceerd.
tijdens de eerste Wizard apparaatinstellingen wordt de gebruiker een lijst met beschikbare Back-updatasets getoond en wordt de gebruiker gevraagd van welke de gegevens moeten worden hersteld. Welke back-updataset ook wordt geselecteerd, wordt de voorouderlijke dataset voor het apparaat. Het apparaat kan herstellen van zijn eigen back-ups of de voorouderlijke dataset. Het apparaat geeft prioriteit aan zijn eigen back-up als er back-ups van beide bronnen beschikbaar zijn. Als de gebruiker niet door de wizard apparaatinstellingen gaat, kan het apparaat alleen van zijn eigen back-ups herstellen.
om het testen te vereenvoudigen, bevat Android tools waarmee u handmatig een herstel van uw app kunt starten. Zie reservekopie testen en terugzetten voor meer informatie.
back-up inschakelen en uitschakelen
Apps die gericht zijn op Android 6.0 (API level 23) of hoger nemen automatisch deel aan automatische back-up. Stel in uw app manifest-bestand de Booleaanse waardeandroid:allowBackup
in om back-up in of uit te schakelen. De standaardwaarde is true
maar om uw intenties duidelijk te maken, raden we u aan het attribuut expliciet in te stellen in uw manifest zoals hieronder getoond:
<manifest ... > ... <application android:allowBackup="true" ... > ... </application></manifest>
u kunt back-ups uitschakelen door android:allowBackup
in te stellen in false
. U zou dit kunnen doen als uw app zijn staat kan herscheppen door middel van een andere mechanismor als uw app gaat over gevoelige informatie die Android geen back-up moet maken.
Include and exclude files
standaard maakt het systeem een back-up van bijna alle app-gegevens. Zie bestanden waarvan een back-up is gemaakt voor meer informatie. Deze sectie laat u zien hoe u aangepaste XML-regels kunt definiëren om te bepalen wat er wordt geback-upt.
- voeg in
AndroidManifest.xml
hetandroid:fullBackupContent
attribuut toe aan het<application>
element. Dit kenmerk verwijst naar een XML-bestand dat back-upregels bevat. Bijvoorbeeld:<application ... android:fullBackupContent="@xml/my_backup_rules"></application>
- Maak een XML-bestand aan met de naam
my_backup_rules.xml
in deres/xml/
map. Voeg in het bestand regels toe met de elementen<include>
en<exclude>
.Het volgende voorbeeld maakt een back-up van alle gedeelde voorkeuren behalvedevice.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. Als u een <include> element opgeeft, bevat het systeem standaard geen bestanden meer en maakt alleen een back-up van de opgegeven bestanden. Om meerdere bestanden op te nemen, gebruikt u meerdere <include> elementen.Opmerking: bestanden in mappen die worden geretourneerd door
getCacheDir()
getCodeCacheDir()
, ofgetNoBackupFilesDir()
zijn altijd uitgesloten, zelfs als u ze probeert op te nemen. -
<exclude>
– specificeert een bestand of map om uit te sluiten tijdens de back-up. Hier zijn een aantal bestanden die gewoonlijk worden uitgesloten van back-up:- bestanden die apparaat-specifieke ID ‘ s hebben, ofwel uitgegeven door een server of gegenereerd op het apparaat. Bijvoorbeeld, Google Cloud Messaging (GCM) moet een registratie token te genereren elke keer dat een gebruiker installeert uw app op een nieuw apparaat. Als de oude registratie token is hersteld, de app kan zich onverwacht gedragen.
- accountgegevens of andere gevoelige informatie. Overweeg om de gebruiker te vragen om de eerste keer dat ze een herstelde app starten opnieuw te authenticeren in plaats van het mogelijk te maken voor opslag van dergelijke informatie in de back-up.
- bestanden gerelateerd aan app debugging.
- grote bestanden die ervoor zorgen dat de app de 25MB back-up quota overschrijdt.
Opmerking: Als uw configuratiebestand beide elementen specificeert, dan bevat de back-up alles wat is vastgelegd door de<include>
elementen minus de bronnen genoemd in de<exclude>
elementen. Met andere woorden, <exclude>
heeft voorrang.
elk element moet de volgende twee attributen bevatten:
-
domain
– specificeert de locatie van de bron. Geldige waarden voor dit attribuut zijn de volgende:-
root
– de map op het bestandssysteem waar alle privébestanden van deze app worden opgeslagen. -
file
– mappen geretourneerd doorgetFilesDir()
. -
database
– mappen geretourneerd doorgetDatabasePath()
. Databases aangemaakt metSQLiteOpenHelper
worden hier opgeslagen. -
sharedpref
– de map waarinSharedPreferences
worden opgeslagen. -
external
the directory returned bygetExternalFilesDir()
-
-
path
: specificeert een bestand of map om in te nemen of uit te sluiten van back-up. Merk op dat:- Dit kenmerk ondersteunt geen jokertekens of regex-syntaxis.
- u kunt
.
gebruiken om naar de huidige map te verwijzen, maar u kunt om veiligheidsredenen niet naar de bovenliggende map..
verwijzen. - Als u een map opgeeft, dan is de regel van toepassing op alle bestanden in de map en recursieve submappen.
Opmerking: U kunt geen back-up maken van bestanden buiten deze locaties.
hetinclude
element kan ook hetrequireFlags
attribuut bevatten, dat in de sectie die beschrijft hoe conditionele vereisten voor backup section te definiëren nader wordt besproken.
definieer device conditions required for backup
als uw app gevoelige informatie op het apparaat opslaat, kunt u opgeven onder welke voorwaarden de gegevens van uw app worden opgenomen in de backup van de gebruiker. U kunt de volgende voorwaarden toevoegen in Android 9 (API level 28) of hoger:
-
clientSideEncryption
: de back-up van de gebruiker is versleuteld met een client-sidesecret. Deze vorm van encryptie is ingeschakeld op apparaten met Android 9 of hoger,zolang de gebruiker back-up in Android 9 of hoger heeft ingeschakeld en ascreen lock (PIN, patroon of wachtwoord) voor hun apparaat heeft ingesteld. -
deviceToDeviceTransfer
: de gebruiker zet zijn back-up over naar een ander apparaat dat lokale device-to-devicetransfer ondersteunt (bijvoorbeeld Google Pixel).
Als u uw ontwikkelapparaten hebt geüpgraded naar Android 9, moet u gegevensback-up na het upgraden uitzetten en opnieuw inschakelen. Dit komt omdat Android alleen versleutelt back-ups met een client-side geheim na het informeren van gebruikers in Instellingen of de Setup Wizard.
om de inclusievoorwaarden te declareren, stelt u het requireFlags
attribuut in op de gewenste waarde of waarden in uw in de <include>
elementen binnen uw set van Backup rules:
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 back-upsysteem met sleutelwaarde implementeert, of als u back-upagent zelf implementeert,kunt u deze voorwaardelijke vereisten ook toepassen op uw back-uplogica door een bitgewijze vergelijking te maken tussen eenBackupDataOutput
objectset van transportvlaggen enFLAG_CLIENT_SIDE_ENCRYPTION_ENABLED
of FLAG_DEVICE_TO_DEVICE_TRANSFER
vlaggen.
het volgende codefragment toont een voorbeeld van het gebruik 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.}
implementeer BackupAgent
Apps die automatische back-up implementeren hoeven geen . U kunt echter optioneel een aangepaste BackupAgent
implementeren. Meestal zijn er twee redenen om dit te doen:
- u wilt een melding ontvangen van back-upgebeurtenissen zoals
onRestoreFinished()
ofonQuotaExceeded(long, long)
. Deze callback methoden worden uitgevoerd, zelfs als de app niet wordt uitgevoerd. - u kunt de set bestanden die u wilt back-uppen niet gemakkelijk uitdrukken met XML-regels. In deze zeldzame gevallen kunt u een BackupAgent implementeren die
onFullBackup(FullBackupDataOutput)
overschrijft om op te slaan wat u wilt. Om de standaard implementatie van het systeem te behouden, roep de corresponderende methode op de superklasse aan metsuper.onFullBackup()
.
Als u een BackupAgent implementeert, verwacht het systeem standaard dat uw app sleutel/waarde back-up en herstel uitvoert. Om in plaats daarvan de op bestanden gebaseerde automatische back-up te gebruiken, stelt u het android:fullBackupOnly
attribuut in op true
in het manifest van uw app.
tijdens automatische back-up-en herstelbewerkingen start het systeem de app op in een beperkte modus om te voorkomen dat de app toegang krijgt tot bestanden die conflicten kunnen veroorzaken en om de app callback-methoden te laten uitvoeren in zijn BackupAgent
. In deze beperkte modus wordt de hoofdactiviteit van de app niet automatisch gestart, worden de contentproviders niet geïnitialiseerd en wordt de basisklasse Application
geïnstalleerd in plaats van een subklasse die in het manifest van de app wordt aangegeven.
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 contentproviders in dezelfde app of proberen het Application
object te casten. Als u deze patronen niet kunt vermijden, overweeg dan het implementeren van sleutel/waarde back-up of het volledig uitschakelen van back-up.
uw BackupAgent
moet de abstracte methoden onBackup()
en onRestore()
implementeren, die worden gebruikt voor back-up van sleutelwaarden. Maar als u geen back-up van sleutelwaarden wilt uitvoeren, kunt u uw implementatie van deze methoden gewoon leeg laten.
zie BackupAgent uitbreiden voor meer informatie.