0

У меня есть приложение с функцией 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 будут потеряны в любом случае, так плохо ... Любая идея, любая помощь в этом случае?

+0

Я думаю, что обновление - это случай, когда токен GCM/FCM может измениться. В любом случае, первое, что делает ваше приложение, - запрашивает токен GCM/FCM с помощью google lib и его до google lib, чтобы вернуть правильный токен, независимо от того, было ли оно изменено или нет. Почему вы думаете, что восстановление токена из SharedPrefs является хорошей идеей в случае обновления? – Stan

+0

Я не думаю, что это так, поэтому я исключил файл общих настроек, как и все учебные пособия, ссылки, о которых идет речь. Проблема в том, что у меня есть и другие префы, сохраненные в одном файле, которые я хочу оставить/восстановить (потерять только маркер GCM/FCM). И возникает вопрос: могу ли я предотвратить невосстановление определенного объявленного XML-файла, когда приложение уже выпущено, и я делаю обновление? – snachmsm

+0

На самом деле вам следует хранить только токен FCM/GCM (или любые другие данные, которые должны/могут быть потеряны) в этом файле, чтобы вы потеряли только токен. Невозможно управлять парой ключ/значение одного файла, но только весь файл. Поэтому я предлагаю вам сделать подсчет обновлений для этого - исключить что-нибудь еще из файла SP с помощью токена FCM/GCM или объявить новый файл SP только для хранения токена + добавить некоторый код перехода) – Stan

ответ

0

Я не уверен, какое подтверждение вы просили, но ИМХО, documentation уже является хорошим источником подтверждения.

Так что теперь я могу сделать?

Вы также можете проверить предлагаемое решение в этом SO post и посетить Testing Backup and Restore для получения полезной информации.

+0

У меня есть код, исключающий важный файл sharedpref внутри выпущенного приложения. Теперь я хочу сохранить/восстановить этот файл, потому что его не следует удалять. Он может быть удален только «во время установки устройства или adb» _, поскольку DOC говорит, но теперь я вижу (тестирование подписанного файла обновления apk), мой файл исключается/удаляется также при установке простого обновления ... (так что эта функция резервного копирования работает в более широком диапазоне, как задокументировано ... или я не понимаю, что такое _during device setup_ означает ...) – snachmsm

 Смежные вопросы

  • Нет связанных вопросов^_^