Поставщик общего контента

Мое приложение имеет две версии: бесплатную и про-версию, а контент-провайдер для данных приложения должен быть разделен между ними.

Он должен быть разработан с учетом следующего

  • Данные, созданные любой версией, должны быть мгновенно отображены в другой версии
  • Как я понимаю, и профессиональные, и бесплатные версии не могут объявить одного и того же поставщика контента в файле манифеста
  • Помня последнюю точку зрения, мне нужно создать отдельных поставщиков для бесплатных и про-версий

Возможные решения:

  • Создайте два контент-провайдера, один из которых создан по бесплатной версии, а другой – по версии pro
  • Когда первая версия pro запускается, если есть какие-либо данные в бесплатной версии, скопируйте ее в про версию
  • Всякий раз, когда любые данные записываются в бесплатной или про версии, я должен проверить, существует ли другая версия Content Provider или нет, и пишите как Поставщикам контента, если они существуют
  • Установите для параметра android: protectionLevel значение «подпись», чтобы обе версии могли обращаться к обоим провайдерам контента

Пожалуйста, дайте мне знать, если это имеет смысл и следует лучшим рекомендациям в отношении поставщиков общего контента. Разделяйте любые другие способы сделать это.

Solutions Collecting From Web of "Поставщик общего контента"

У меня есть 3 приложения на рынке, у каждого есть бесплатная и платная версия. Для данного приложения у меня есть 100% -ый код в проекте Android Shared lib, на который ссылаются как проекты Free, так и Paid. Эти бесплатные и платные проекты Android – это просто фиктивные проекты и полезны только для AndroidManifest.xml.

Если вы хотите включить / отключить некоторые функции, вы всегда можете добавить соответствующую проверку в Shared lib на основе имени пакета.

В вашем коде (в общей папке) вы можете различать бесплатные или платные и включать / отключать функции на основе вызывающего пакета.

if ("com.example.paid".equals(context.getPackageName()) { //enable pro version features } 

Вы не можете сделать что-то подобное? Это избавит вас от лишних затрат на обслуживание.

Итак, вот что я сделал:

  • Я создал два отдельных контент-провайдера для каждой версии (каждый с отдельным авторитетом) и объявил их однозначно
  • Установите для них «android: exported» значение «true», чтобы разрешить совместное использование данных поставщика контента в приложениях
  • Определял пользовательское разрешение для каждого из поставщиков контента (с доступом для чтения и записи), чтобы ограничить доступ к данным
  • Для каждого из определений разрешений я определил атрибут «android: protectionLevel» как «подпись», чтобы мои приложения могли неявно и надежно общаться друг с другом
  • В любой заданной версии, я затем явно запрашиваю доступ к поставщику контента в другой версии с использованием разрешения-использования android: name = "MY_CUSTOM_PERMISSION

Результаты:

  • Обе версии теперь могут безопасно и неявно обращаться к другим контент-провайдерам
  • Когда платная версия запускается, она молча копирует все данные из бесплатной версии в платный, чтобы подготовить для беспрепятственного использования

Просто мои мысли.

Есть ли необходимость иметь как бесплатную, так и платную версию, установленную на устройстве? Если нет, вы можете просто предоставить функцию копирования от бесплатной до платной, когда пользователь сначала запускает платную версию. Затем пользователь может удалить бесплатную версию и использовать только платную версию.

Подход прекрасен. Но я вижу одну проблему.

Что происходит, когда контент-провайдеры меняются со временем? Допустим, вы решили расширить контент-провайдер несколькими полями. Затем пользователь должен обновить обе версии, чтобы данные были правильно записаны.

Будут ли и поставщики контента оставаться неизменными с течением времени? Что, если вы решите, что платная версия будет иметь больше возможностей, и, следовательно, больше данных будет захвачено.