Copia de seguridad de los datos de usuario con Copia de seguridad automática

Copia de seguridad automática para aplicaciones copia de seguridad automática de los datos de un usuario de aplicaciones que se dirigen y se ejecutan en Android 6.0 (nivel de API 23) o posterior. Android conserva los datos de app cargándolos en la unidad de Google del usuario, donde están protegidos por las credenciales de la cuenta de Google del usuario. La cantidad de datos está limitada a 25 MB por usuario de tu aplicación y no hay cargo por almacenar datos de copia de seguridad. Tu app puede personalizar el proceso de copia de seguridad o inhabilitar las copias de seguridad.

Para obtener una descripción general de las opciones de copia de seguridad de Android y orientación sobre qué datos debe realizar y restaurar, consulte la vista de copia de seguridad de datos.

Archivos de los que se realiza una copia de seguridad

De forma predeterminada, la copia de seguridad automática incluye archivos en la mayoría de los directorios que el sistema asigna a la aplicación:

  • Archivos de preferencias compartidas.
  • Archivos guardados en el almacenamiento interno de la aplicación, a los que se accede mediante getFilesDir() o getDir(String, int). Archivos
  • en el directorio devuelto por getDatabasePath(String) , que también incluye archivos creados con la clase SQLiteOpenHelper.
  • Archivos en almacenamiento externo en el directorio devuelto por getExternalFilesDir(String).

Copia de seguridad Automática excluye los archivos en los directorios devuelve getCacheDir()getCodeCacheDir() o getNoBackupFilesDir(). Los archivos guardados en estas ubicaciones solo se necesitan temporalmente o se excluyen intencionalmente de las operaciones de copia de seguridad.

Puede configurar su aplicación para incluir y excluir archivos particulares. Para obtener más información, consulte la sección Incluir y excluir archivos.

Nota: Android no trata la configuración de los componentes como datos de usuario. Si la aplicación habilita o deshabilita componentes específicos en su manifiesto mientras se está ejecutando, no espere que AutoBackup guarde y restaure la configuración. Para conservar el estado de configuración, guárdelo en Preferencias compartidas y recupere las Preferencias compartidas al restaurar. Si desea que su aplicación guarde su estado, almacene el estado en Preferencias compartidas y recupere las Preferencias compartidas al restaurar.

Ubicación de la copia de seguridad

Los datos de la copia de seguridad se almacenan en una carpeta privada en la cuenta de Google Drive del usuario,limitada a 25 MB por aplicación. Los datos guardados no cuentan para la cuota personal de Google Drive del usuario. Solo se almacena la copia de seguridad más reciente. Cuando se realiza abackup, se elimina la copia de seguridad anterior (si existe). El usuario u otras aplicaciones del dispositivo no pueden leer los datos de copia de seguridad.

Los usuarios pueden ver una lista de aplicaciones que se han respaldado en la aplicación Google DriveAndroid. En un dispositivo con Android, los usuarios pueden encontrar esta lista en el cajón de navegación de Driveapp en Configuración > Copia de seguridad y restablecimiento > Datos de la aplicación.

Las copias de seguridad de cada dispositivo-configuración-vida útil se almacenan en conjuntos de datos separados, como se muestra en los siguientes ejemplos:

  • Si el usuario posee dos dispositivos, existe un conjunto de datos de copia de seguridad para cada dispositivo.
  • Si el usuario restablece de fábrica un dispositivo y, a continuación, configura el dispositivo con la misma cuenta, la copia de seguridad se almacena en un nuevo conjunto de datos. Los conjuntos de datos obsoletos se eliminan automáticamente después de un período de inactividad.

Programación de copias de seguridad

Las copias de seguridad se producen automáticamente cuando se cumplen todas las siguientes condiciones:

  • El usuario ha habilitado la copia de seguridad en el dispositivo. En Android 9, esta configuración es inSettings >System > Backup.
  • Han transcurrido al menos 24 horas desde la última copia de seguridad.
  • El dispositivo está inactivo.
  • El dispositivo está conectado a una red Wi-Fi (si el usuario del dispositivo no ha optado por realizar copias de seguridad de datos móviles).

En la práctica, estas condiciones ocurren aproximadamente todas las noches, pero es posible que un dispositivo nunca se recupere (por ejemplo, si nunca se conecta a una red). Para conservar el ancho de banda de la red, la carga solo se realiza si los datos de la aplicación han cambiado.

Durante la copia de seguridad automática, el sistema apaga la aplicación para asegurarse de que ya no está escribiendo en el sistema de archivos. De forma predeterminada, el sistema de copia de seguridad ignora las aplicaciones que se ejecutan en primer plano porque los usuarios notarían que sus aplicaciones se apagan. Puede anular el comportamiento predeterminado estableciendo el atributobackupInForeground en verdadero.

Para simplificar las pruebas, Android incluye herramientas que te permiten iniciar manualmente una copia de seguridad de tu aplicación. Para obtener más información, consulte Probar copias de seguridad y restauración.

Programa de restauración

Los datos se restauran cada vez que se instala la aplicación, ya sea desde Play store, durante la configuración del dispositivo (cuando el sistema instala aplicaciones instaladas anteriormente) o desde la ejecución de la instalación de adb. La operación de restauración se produce después de instalar el APK, pero antes de que el usuario pueda iniciar la aplicación.

Durante el asistente de configuración inicial del dispositivo, se muestra al usuario una lista de conjuntos de datos de copia de seguridad disponibles y se le pregunta desde cuál restaurar los datos. El conjunto de datos de copia de seguridad seleccionado se convierte en el conjunto de datos ancestral del dispositivo. El dispositivo puede restaurar desde sus propias copias de seguridad o desde el conjunto de datos ancestral. El dispositivo prioriza su propia copia de seguridad si hay copias de seguridad disponibles de ambas fuentes. Si el usuario no pasó por el asistente de configuración del dispositivo, el dispositivo solo puede restaurar desde sus propias copias de seguridad.

Para simplificar las pruebas, Android incluye herramientas que te permiten iniciar manualmente una restauración de tu app. Para obtener más información, consulte Probar copias de seguridad y restauración.

Habilitar y deshabilitar copias de seguridad

Las aplicaciones dirigidas a Android 6.0 (nivel de API 23) o superior participan automáticamente en la copia de seguridad automática. En el archivo de manifiesto de la aplicación, establezca el valor booleano android:allowBackup para habilitar o deshabilitar la copia de seguridad. El valor predeterminado es true pero para aclarar sus ideas, recomendamos establecer explícitamente el atributo en sus manifiestos que se muestran a continuación:

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

Puede deshabilitar las copias de seguridad configurando android:allowBackupa false. Puede que quieras hacer esto si tu aplicación puede recrear su estado a través de algún otro mecanismo o si tu aplicación trata con información confidencial que Android no debería respaldar.

Incluir y excluir archivos

De forma predeterminada, el sistema realiza copias de seguridad de casi todos los datos de la aplicación. Para obtener más información, consulte Archivos con copia de seguridad. En esta sección se muestra cómo definir reglas XML personalizadas para controlar lo que se copia de seguridad.

  1. En AndroidManifest.xml, agregue el atributo android:fullBackupContent al elemento <application>. Este atributo apunta a un archivo XML que contiene reglas de copia de seguridad. Por ejemplo:
    <application ... android:fullBackupContent="@xml/my_backup_rules"></application>
  2. Crear un archivo XML llamado my_backup_rules.xml en elres/xml/ directorio. Dentro del archivo, agregue reglas con los elementos<include> y <exclude>.El siguiente ejemplo hace una copia de seguridad de todas las preferencias compartidas, 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. Si especifica un elemento <include>, el sistema ya no incluye ningún archivo de forma predeterminada y realiza copias de seguridad solo de los archivos especificados. Para incluir varios archivos, utilice varios elementos <include>.

    Nota: Los archivos en los directorios devueltos por getCacheDir()getCodeCacheDir(), o getNoBackupFilesDir() siempre se excluyen incluso si intenta incluirlos.

  • <exclude> – Especifica un archivo o carpeta a excluir durante la copia de seguridad. Estos son algunos archivos que normalmente se excluyen de la copia de seguridad: Archivos
    • que tienen identificadores específicos del dispositivo, emitidos por un servidor o generados en el dispositivo. Por ejemplo, Google Cloud Messaging (GCM) necesita generar un token de registro cada vez que un usuario instala tu aplicación en un dispositivo nuevo. Si se restaura el token de registro antiguo, la aplicación puede comportarse de forma inesperada.
    • Credenciales de cuenta u otra información confidencial. Considere pedirle al usuario que vuelva a autenticar la primera vez que inicie una aplicación restaurada en lugar de permitir el almacenamiento de dicha información en la copia de seguridad.
    • Archivos relacionados con la depuración de aplicaciones.
    • Archivos de gran tamaño que hacen que la aplicación supere la cuota de copia de seguridad de 25 MB.

Nota: Si el archivo de configuración especifica ambos elementos, la copia de seguridad contiene todo lo capturado por los elementos <include> menos los recursos nombrados en los elementos <exclude>. En otras palabras, <exclude> tiene prioridad.

Cada elemento debe incluir los dos atributos siguientes:

  • domain – especifica la ubicación del recurso. Los valores válidos para este atributo incluyen los siguientes:
    • root – el directorio en el sistema de archivos donde se almacenan todos los archivos privados que pertenecen a esta aplicación.
    • file directorios devuelve getFilesDir().
    • database directorios devuelve getDatabasePath(). Las bases de datos creadas con SQLiteOpenHelper se almacenan aquí.
    • sharedpref el directorio donde SharedPreferences se almacenan.
    • externalel directorio devuelto por getExternalFilesDir()
  • Nota: No puede realizar copias de seguridad de archivos fuera de estas ubicaciones.

  • path: Especifica un archivo o carpeta para incluir o excluir de la copia de seguridad. Tenga en cuenta que:
    • Este atributo no admite sintaxis de comodín o expresiones regulares.
    • Puede usar . para hacer referencia al directorio actual, sin embargo, no puede hacer referencia al directorio padre .. por razones de seguridad.
    • Si especifica un directorio, la regla se aplica a todos los archivos del directorio y subdirectorios recursivos.

El elemento include también puede contener el atributo requireFlags, que la sección que describe cómo definir los requisitos condicionales para empaquetar analiza con más detalle.

Definir las condiciones del dispositivo necesarias para la copia de seguridad

Si tu app guarda información confidencial en el dispositivo, puedes especificar las condiciones en las que los datos de tu app se incluyen en la copia de seguridad del usuario. Puedes agregar las siguientes condiciones en Android 9 (nivel de API 28) orhigher:

  • clientSideEncryption: La copia de seguridad del usuario se cifra con un secreto del lado del cliente. Esta forma de cifrado está habilitada en dispositivos que ejecutan Android 9 orhigher siempre que el usuario haya habilitado la copia de seguridad en Android 9 orhigher y haya establecido un bloqueo de pantalla (PIN,patrón o contraseña) para su dispositivo.
  • deviceToDeviceTransfer : El usuario está transfiriendo su copia de seguridad a otro dispositivo que admite la transferencia local de dispositivo a dispositivo (por ejemplo,Google Pixel).

Si ha actualizado sus dispositivos de desarrollo a Android 9, debe desactivarlos y, a continuación, volver a habilitar la copia de seguridad de datos después de la actualización. Esto se debe a que Android solo encripta las copias de seguridad con un secreto del lado del cliente después de informar a los usuarios en la Configuración o en el Asistente de configuración.

Para declarar las condiciones de inclusión, establezca el atributo requireFlags al valor o valores deseados en los elementos de <include> dentro de su conjunto de reglas de respaldo:

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

Si su aplicación implementa un sistema de copia de seguridad de clave y valor, o si implementa un agente de copia de seguridad usted mismo,también puede aplicar estos requisitos condicionales a su lógica de copia de seguridad realizando una comparación en bits entre el conjunto de indicadores de transporte de un objetoBackupDataOutput y el agente de copia de seguridad personalizadoFLAG_CLIENT_SIDE_ENCRYPTION_ENABLEDo FLAG_DEVICE_TO_DEVICE_TRANSFER.

El siguiente fragmento de código muestra un ejemplo de uso de este 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

las Aplicaciones que implementan Copia de seguridad Automática no es necesario implementar un BackupAgent. Sin embargo, opcionalmente puede implementar un BackupAgentpersonalizado. Normalmente, hay dos razones para hacer esto:

  • Desea recibir notificaciones de eventos de copia de seguridad como, onRestoreFinished() o onQuotaExceeded(long, long). Estos métodos de devolución de llamada se ejecutan incluso si la aplicación no se está ejecutando.
  • No puede expresar fácilmente el conjunto de archivos que desea respaldar con reglas XML. En estos raros casos, puede implementar una BackupAgent que reemplaza onFullBackup(FullBackupDataOutput) para almacenar lo que quieras. Para conservar la implementación predeterminada del sistema, llame al método correspondiente en la superclase con super.onFullBackup().

Si implementa un agente de copia de seguridad, de forma predeterminada, el sistema espera que su aplicación realice copias de seguridad y restauración de claves/valores. Para usar la copia de seguridad automática basada en archivos en su lugar, establezca el atributo android:fullBackupOnly en true en el manifiesto de la aplicación.

Durante las operaciones de copia de seguridad y restauración automáticas, el sistema inicia la aplicación en modo restringido para evitar que la aplicación acceda a archivos que podrían causar conflictos y permitir que la aplicación ejecute métodos de devolución de llamada en su BackupAgent. En este modo restringido, la actividad principal de la aplicación no se inicia automáticamente, sus proveedores de contenido no se inicializan y la clase base Application se crea una instancia en lugar de cualquier subclase declarada en el manifiesto de la aplicación.

Precaución: Para evitar errores, asegúrese de que las partes de su aplicación que se ejecutan en el modo restringido (principalmente su BackupAgent) no accedan a los proveedores de contenido de la misma aplicación ni intenten emitir el objeto Application. Si no puede evitar esos patrones, considere implementar copia de seguridad de clave/valor o deshabilitar la copia de seguridad por completo.

Su BackupAgent debe implementar los métodos abstractos onBackup()y onRestore(), que se utilizan para la copia de seguridad de valor clave. Pero si no desea realizar copias de seguridad de clave-valor, puede dejar en blanco la implementación de esos métodos.

Para obtener más información, consulte Extender BackupAgent.



Deja una respuesta

Tu dirección de correo electrónico no será publicada.