Восстановление некоторых XML-полей из исключенного файла SharedPreference (с помощью fullBackupContent)

У меня есть приложение с функцией Google Cloud Messaging, а также необязательным fullBackupContentобъявленным так:

<application
    android_fullBackupContent="@xml/backup_rules">

<?xml version="1.0" encoding="utf-8"?>
<full-backup-content>
    <exclude domain="sharedpref" path="push.xml"/>
</full-backup-content>

push.xml содержит идентификатор регистрации GCM, который должен быть исключен из резервного копирования, как выше (некоторая информация здесь и здесь ). Но не только это поле находится в preferences xml… он также содержит некоторые «внутренние» параметры, такие как пользовательские категории push enabled/disabled или flag firstRunShowDialogAboutPushMessages(по умолчанию true, отклонение диалог установка флага false).

И все работает хорошо, слишком хорошо… Выше код в настоящее время в Google Play, и теперь я планирую выпустить обновление. Во время тестов я заметил, что эта функция резервного копирования выполняется также в случае обновления… Кто-нибудь может это подтвердить? Цель приложения: API24, устройство тестирования: текущий API25. Док говорит:

Данные восстанавливаются при установке приложения, либо из Play store, во время установки устройства (когда система устанавливает ранее установленные приложения), либо при запуске adb install. Операция восстановления происходит после установки APK, но до того, как приложение доступно для запуска пользователем.

Так во время установки устройства или adb … Это означает обновление через Google Play или подписанный файл на установке версии GP? Без восстановления учетной записи / устройства, просто обновление? Насколько я понимаю… Теперь, когда я выпускаю новую версию (даже без исключенияpush.xml), этот файл не будет резервное копирование, потому что current имеет exlusion… и обновление «сбросит» push-настройки в приложении (включение всех опций/категорий и firstRunShowDialogAboutPushMessages=true, по умолчанию, даже когда пользователь отказался).

Так что же мне теперь делать? Я могу переместить регистрационный идентификатор GCM в отдельный SharedPreferencexml-файл и исключить только этот, но со следующим обновлением все настройки GCM будут потеряны в любом случае, так плохо… Есть идеи, какая-то помощь в этом деле?

1 ответ

  1. Я не уверен, какое подтверждение вы просили, но IMHO, документация уже хороший источник подтверждения.

    Так что же мне теперь делать?

    Вы также можете проверить предлагаемое решение в этой публикации SO и посетить тестирование резервного копирования и восстановления для получения полезных сведений.