У меня есть приложение с функцией Google Cloud Messaging, а также дополнительно fullBackupContent
объявленную как это:Восстановление некоторых XML полей из исключенного файла SharedPreference (с использованием 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 регистрационный номер, который должен быть исключен из резервное копирование, как указано выше (некоторая информация HERE и HERE). Но не только это одно поле находится в настройках xml ... оно содержит также некоторые «внутренние» настройки, такие как пользовательские категории push, включенные/отключенные или флаг firstRunShowDialogAboutPushMessages
(по умолчанию true, диалог отклонения устанавливает флаг в false).
И все работает хорошо, слишком хорошо ... Выше кода в настоящее время находится в Google Play, и теперь я планирую выпустить обновление. Во время тестов я заметил, что эта функция резервного копирования также выполняется в случае обновления ... Может ли кто-нибудь подтвердить, что это нужно? Цель приложения: API24, тестовое устройство: текущий API25. Doc говорит:
Данные восстанавливаются всякий раз, когда приложение установлено либо из магазина воспроизведения, либо во время установки устройства (когда система устанавливает ранее установленные приложения), либо запускает установку adb. Операция восстановления происходит после установки APK, но до того, как приложение доступно для запуска пользователем.
Так во время установки устройства или ADB ... Является ли это означает, что обновление через Google Play или файл, подписанный на GP версия установки также? Без восстановления учетной записи/устройства просто обновление? Насколько я вижу ... Теперь, когда я выпускаю новую версию (даже без исключений push.xml
), этот файл НЕ будет резервным, потому что у текущего есть исключение ... и обновление будет «сбросить» настройки push в приложении (включив все параметры/категории и firstRunShowDialogAboutPushMessages
= true, по умолчанию, даже если пользователь отказался).
Итак, что мне теперь делать? Я могу перенести идентификационный номер GCM в отдельный файл SharedPreference
xml и исключить только этот, но со следующим обновлением все настройки GCM будут потеряны в любом случае, так плохо ... Любая идея, любая помощь в этом случае?
Я думаю, что обновление - это случай, когда токен GCM/FCM может измениться. В любом случае, первое, что делает ваше приложение, - запрашивает токен GCM/FCM с помощью google lib и его до google lib, чтобы вернуть правильный токен, независимо от того, было ли оно изменено или нет. Почему вы думаете, что восстановление токена из SharedPrefs является хорошей идеей в случае обновления? – Stan
Я не думаю, что это так, поэтому я исключил файл общих настроек, как и все учебные пособия, ссылки, о которых идет речь. Проблема в том, что у меня есть и другие префы, сохраненные в одном файле, которые я хочу оставить/восстановить (потерять только маркер GCM/FCM). И возникает вопрос: могу ли я предотвратить невосстановление определенного объявленного XML-файла, когда приложение уже выпущено, и я делаю обновление? – snachmsm
На самом деле вам следует хранить только токен FCM/GCM (или любые другие данные, которые должны/могут быть потеряны) в этом файле, чтобы вы потеряли только токен. Невозможно управлять парой ключ/значение одного файла, но только весь файл. Поэтому я предлагаю вам сделать подсчет обновлений для этого - исключить что-нибудь еще из файла SP с помощью токена FCM/GCM или объявить новый файл SP только для хранения токена + добавить некоторый код перехода) – Stan