backup de dados do usuário com Backup automático

Backup automático para aplicativos automaticamente backup de dados de um usuário a partir de apps thattarget e executar no Android 6.0 (nível de API 23) ou mais tarde. O Android preserva o appdata, enviando—o para o Google Drive do utilizador-onde está protegido pelas credenciais da Conta Google do utilizador. A quantidade de dados é limitada a 25MB peruser de seu aplicativo e não há custo para armazenar dados de backup. Seu app cancustomize o processo de backup ou opt out por desablingbackups.

para uma visão geral das opções de backup e orientação do Android sobre qual datayou deve fazer backup e restaurar, veja a vista de backup de dados.

ficheiros que são suportados

por omissão, a cópia de segurança automática inclui ficheiros na maioria das pastas que são atribuídas à sua aplicação pelo sistema:

  • ficheiros de preferências partilhadas.
  • Files saved to your app’s internal storage, accessed by getFilesDir() or getDir(String, int).
  • arquivos no diretório retornado por getDatabasePath(String), que também inclui arquivos criados com a classe SQLiteOpenHelper.
  • Arquivos de armazenamento externo no diretório retornado por getExternalFilesDir(String).

a cópia de segurança automática exclui os ficheiros nas pastas devolvidas por getCodeCacheDir(), ougetNoBackupFilesDir(). Os arquivos salvos nestes locais são apenas necessários temporariamente, ou são intencionalmente excluídos das operações de backup.

pode configurar a sua aplicação para incluir e excluir ficheiros específicos. Para mais informações, consulte a seção Incluir e excluir arquivos.Nota: O Android não trata a configuração dos componentes como dados do Usuário. Se o seu aplicativo activa ou desactiva componentes específicos no seu manifesto enquanto está em execução, não espere que O AutoBackup salve e restaure a configuração. Para preservar o estado de configuração, salvá-lo em Preferências compartilhadas e recuperar preferências compartilhadas na restauração. Se você quer que seu aplicativo para salvar seu estado, armazenar o estado em Preferências compartilhadas e recuperar preferências compartilhadas na restauração.

localização de Backup

os dados de Backup são armazenados numa pasta privada na Conta Google Drive do utilizador,limitada a 25MB por aplicação. Os dados guardados não contam para a quota individual do utilizador no Google Drive. Apenas o backup mais recente é armazenado. Quando o abackup é feito, a cópia de segurança anterior (se existir) é apagada. O datacan de backup não pode ser lido pelo usuário ou outros aplicativos no dispositivo.

os usuários podem ver uma lista de aplicativos que foram suportados no aplicativo do Google DriveAndroid. Em um dispositivo Android, OS usuários podem encontrar esta lista na gaveta de navegação do Driveapp sob Configurações > Backup e reset > App data.

cópias de segurança de cada dispositivo-setup-lifetime são armazenadas em conjuntos de dados separados, como mostrado nos seguintes exemplos:

  • Se o usuário possui dois dispositivos, então existe um conjunto de dados de backup para cada dispositivo.
  • Se a user factory reiniciar um dispositivo e, em seguida, configurar o dispositivo com a mesma conta, o backup é armazenado em um novo conjunto de dados. Os conjuntos de dados obsoletos são automaticamente apagados após um período de inactividade.

esquema de Backup

cópias de segurança ocorrem automaticamente quando todas as seguintes condições são cumpridas:

  • o utilizador activou a cópia de segurança no dispositivo. In Android 9, this setting is inSettings > System> Backup.decorreram pelo menos 24 horas desde a última cópia de segurança.o dispositivo está inactivo.
  • o dispositivo é conectado a uma rede Wi-Fi (se o usuário do dispositivo não optou por backups de dados móveis).

na prática, estas condições ocorrem aproximadamente todas as noites, mas um dispositivo pode nunca voltar (por exemplo, se ele nunca se conecta a uma rede). Para conservar o networkbandwidth, o upload só ocorre se os dados do aplicativo foram alterados.

durante o Backup automático, o sistema desliga o aplicativo para se certificar de que ele não está mais escrevendo para o sistema de arquivos. Por padrão, o sistema de backup ignora aplicativos que estão sendo executados em primeiro plano porque os usuários iriam notar que seus aplicativos estão sendo desligados. Você pode sobrepor o comportamento padrão definindo o atributo backupInForeground true.

para simplificar os testes, o Android inclui ferramentas que lhe permitem iniciar manualmente uma cópia de segurança do seu aplicativo. Para mais informações, consulte o backup de teste e restaurar.

reponha o escalonamento

os dados são repostos sempre que o aplicativo é instalado, seja a partir da Play store, durante a configuração do dispositivo (quando o sistema instala aplicativos previamente instalados), ou de executar a instalação do adb. A operação de restauração ocorre após a APk ser instalada, mas antes que o aplicativo esteja disponível para ser lançado pelo Usuário.

durante o Assistente de configuração inicial do dispositivo, o Usuário é mostrado uma lista de conjuntos de dados de backup disponíveis e é perguntado de qual para restaurar os dados. Qualquer conjunto de dados de backup é selecionado se torna o conjunto de dados ancestral para o dispositivo. O dispositivo pode restaurar a partir de seus próprios backups ou do conjunto de dados ancestral. O dispositivo prioriza seu próprio backup se backups de ambas as fontes estão disponíveis. Se o Usuário não passou pelo Assistente de configuração do dispositivo, então o dispositivo pode restaurar apenas a partir de seus próprios backups.

para simplificar os testes, o Android inclui ferramentas que lhe permitem iniciar manualmente uma restauração do seu aplicativo. Para mais informações, consulte o backup de teste e restaurar.

Active e desactive a cópia de segurança

Apps que visam o Android 6.0 (nível 23 da API) ou superior automaticamente a cópia de segurança automática participatein. No seu ficheiro de manifesto de aplicações, defina o valor booleanoandroid:allowBackuppara activar ou desactivar a cópia de segurança. O valor por omissão é true mas para tornar as suas intenções claras, recomendamos que defina explicitamente o atributo nos seus manifestas mostrados abaixo:

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

pode desactivar as cópias de segurança definindo android:allowBackup para false. Você pode querer fazer isso se o seu aplicativo pode recriar o seu estado através de algum outro mecanismo ou se o seu aplicativo lida com informações sensíveis que o Android não deve fazer backup.

incluir e excluir arquivos

por padrão, o sistema faz backup de quase todos os dados da aplicação. Para mais informações, veja arquivos que são suportados. Esta secção mostra-lhe como definir regras XML personalizadas para controlar o que é suportado.

  1. In AndroidManifest.xml, add the android:fullBackupContent attribute to the <application> element. Este atributo aponta para um arquivo XML que contém regras de backup. Por exemplo:
    <application ... android:fullBackupContent="@xml/my_backup_rules"></application>
  2. Criar um arquivo XML chamado my_backup_rules.xmlres/xml/ diretório. Dentro do arquivo, adicionar regras com o<include> e <exclude> elementos.A seguinte amostra confirma Todas as preferências partilhadas, exceptodevice.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. Se indicar um elemento<incluir>, o sistema já não inclui quaisquer ficheiros por omissão e faz backup apenas dos ficheiros indicados. Para incluir vários arquivos, use múltiplo <incluir> elementos.

    Nota: os ficheiros em directórios devolvidos por getCacheDir()getCodeCacheDir(), ou getNoBackupFilesDir() são sempre excluídos, mesmo que tente incluí-los.

  • <exclude> – especifica um ficheiro ou pasta a excluir durante a cópia de segurança. Aqui estão alguns arquivos que são tipicamente excluídos de backup:
    • arquivos que têm identificadores específicos do dispositivo, seja emitido por um servidor ou gerado no dispositivo. Por exemplo, o Google Cloud Messaging (GCM) precisa gerar um token de registro cada vez que um usuário instala seu aplicativo em um novo dispositivo. Se o antigo símbolo de Registo for restaurado, o aplicativo pode se comportar inesperadamente. credenciais da Conta ou outras informações sensíveis. Considere pedir ao Usuário para reautentizar a primeira vez que eles lançam um aplicativo restaurado, em vez de permitir o armazenamento de tais informações no backup.
    • ficheiros relacionados com depuração de aplicações.
    • ficheiros grandes que fazem com que o aplicativo exceda a quota de backup de 25MB.

Nota: Se o seu arquivo de configuração especifica ambos os elementos, a cópia de segurança contém tudo o que é capturado pela <include> elementos menos recursos com o nome <exclude> elementos. Em outras palavras, <exclude> tem precedência.

Cada elemento deve incluir os seguintes dois atributos:

  • domain – especifica a localização do recurso. Os valores válidos para este atributo incluem o seguinte:
    • root – a pasta no sistema de ficheiros onde todos os ficheiros privados pertencentes a este aplicativo são armazenados.
    • file – directórios devolvidos porgetFilesDir().
    • database – pastas devolvidas porgetDatabasePath(). Bases de dados criadas comSQLiteOpenHelper são armazenadas aqui.
    • sharedpref – a pasta onde são armazenados SharedPreferences.
    • external o diretório devolvidos por getExternalFilesDir()
  • Nota: Você não pode fazer backup de arquivos fora destas localizações.

  • path: especifica um ficheiro ou pasta para incluir ou excluir da cópia de segurança. Note que:
    • este atributo não suporta a sintaxe wildcard ou regex.
    • pode usar para referenciar a pasta actual, contudo, não pode referenciar a pasta-mãe .. por razões de segurança.
    • Se indicar uma pasta, então a regra aplica-se a todos os ficheiros na pasta e sub-pastas recursivas.

o elemento pode também conter o atributo requireFlags, o qual a secção que descreve como definir requisitos condicionais para a secçãoackup discute mais detalhadamente.

defina as condições do dispositivo necessárias para a cópia de segurança

Se a sua aplicação gravar informações sensíveis no dispositivo, poderá definir as condições sob as quais os dados da sua aplicação estão incluídos no pacote do utilizador. Você pode adicionar as seguintes condições no Android 9 API (nível 28) orhigher:

  • clientSideEncryption: backup Do usuário é criptografada com um cliente-sidesecret. Esta forma de criptografia é ativada em dispositivos que rodam Android 9 orhigher,desde que o usuário tenha ativado backup no Android 9 orhigher e tenha configurado ascreen lock (PIN, padrão, ou senha) para seu dispositivo.
  • deviceToDeviceTransfer: O Utilizador está a transferir a sua cópia de segurança para outro dispositivo que suporta a transferência local de dispositivos para devicetransfer (por exemplo,Google Pixel).

Se você atualizou seus dispositivos de desenvolvimento para Android 9, você precisa desabilitar e, em seguida, reativar backup de dados após a atualização. Isto acontece porque o Android só criptografa cópias de segurança com um segredo do lado do cliente depois de informar os usuários na configuração ou no Assistente de configuração.

para declarar as condições de inclusão, defina o atributo requireFlags atributo para o valor ou valores em si no <include> elementos dentro do seu conjunto de regras deackup:

my_backup_ regras.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>

Se o seu aplicativo implementa um valor-chave backupsystem, ou se você implementBackupAgent si mesmo,você pode também aplicar esses condicional requisitos para a sua cópia de segurança lógica byperforming uma comparação bit a bit entre umBackupDataOutput objeto’sset de transporte de bandeiras e o seu backup personalizado do agente deFLAG_CLIENT_SIDE_ENCRYPTION_ENABLEDou FLAG_DEVICE_TO_DEVICE_TRANSFERsinalizadores.

o seguinte excerto de código mostra um exemplo de utilização deste método:

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

Implementar BackupAgent

Aplicativos que implementam a funcionalidade Auto Backup não precisa implementar um BackupAgent. No entanto, você pode opcionalmente implementar um personalizado BackupAgent. Normalmente, há dois motivos para isso:

  • Você deseja receber notificação de eventos de backup, tais como, onRestoreFinished() ou onQuotaExceeded(long, long). Estes métodos de callback são executados mesmo que o aplicativo não esteja em execução.
  • Você não pode expressar facilmente o conjunto de arquivos que você deseja fazer backup com regras XML. Nestes casos raros, você pode implementar um BackupAgent que substitui onFullBackup(FullBackupDataOutput) para armazenar o que você quer. Para manter a implementação padrão do sistema, chame o método correspondente na superclasse com super.onFullBackup().

Se você implementar um BackupAgent, por padrão, o sistema espera que o seu aplicativo para realizar backup chave/valor e restaurar. Para usar a cópia de segurança automática baseada em ficheiros em vez disso, defina oandroid:fullBackupOnly atributo paratrue no manifesto da sua aplicação.

durante as operações de backup automático e restauração, o sistema lança o aplicativo em um modo restrito para ambos impedir o aplicativo de acessar arquivos que poderiam causar conflitos e deixar o aplicativo Executar métodos de callback em seu BackupAgent. Neste modo restrito, a actividade principal da aplicação não é lançada automaticamente, os seus fornecedores de conteúdo não são inicializados, e a classe de base Application está instanciada em vez de qualquer subclasse declarada no manifesto da aplicação.

cuidado: para evitar erros, certifique-se de que as partes da sua aplicação que executam no modo restrito (principalmente o seuBackupAgent) não acedem aos fornecedores de conteúdo na mesma aplicação ou tentam lançar oApplication objecto. Se você não pode evitar esses padrões, em seguida, considerar a implementação de backup chave/valor ou desativar backup inteiramente.

O BackupAgent deve implementar os métodos abstratos onBackup() e onRestore(), que são utilizados para o valor-chave de cópia de segurança. Mas se você não quiser realizar backup de valor-chave, você pode apenas deixar a sua implementação desses métodos em branco.

para mais informações, consulte a extensão do BackupAgent.



Deixe uma resposta

O seu endereço de email não será publicado.