Если вы разрабатываете приложение и хотите централизованно управлять его версиями, уведомлять пользователей о новых релизах и предоставлять ссылку на скачивание — база данных ZoBase от zoro-game.store станет отличным решением. В этой статье я покажу, как легко подключить ваше приложение к JSON-файлу ZObase.json и получать актуальные данные об обновлениях.
Что такое ZoBase?
ZoBase — это открытый JSON-файл, расположенный по адресу:
https://zoro-game.store/data/ZObase.json
В нём хранится массив объектов, каждый из которых описывает отдельное приложение (или игру) с такими полями, как:
· id — уникальный числовой идентификатор приложения
· title — название
· UPDATES_Vers — текущая версия в магазине (например "1.4.2")
· UPDATES_descr — описание изменений
· download_link — прямая ссылка на APK-файл
· IconGame, descr, price и много других метаданных
Ваше приложение периодически запрашивает этот JSON, находит в нём запись по своему id и сравнивает версию из базы с локальной версией. Если есть расхождение — можно предложить пользователю обновление.
Пример из реального приложения: Stream
Возьмём приложение Stream (id=34). Его разработчики реализовали проверку обновлений на Dart/Flutter. Вот фрагмент их кода:
dart
import 'dart:convert';
import 'package:http/http.dart' as htt
const int appId = 34;
const String currentVersion = '1.4.1';
const String baseUrl = 'https://zoro-game.store';
final Uri databaseUri = Uri.parse('$baseUrl/data/ZObase.json');
final Uri storeUri = Uri.parse('$baseUrl/pages/game/game.html?id=$appId');
Future<void> checkForUpdates() async {
final response = await http.get(databaseUri);
if (response.statusCode < 200 || response.statusCode >= 300) {
throw Exception('HTTP ${response.statusCode}');
}
final decoded = jsonDecode(utf8.decode(response.bodyBytes));
if (decoded is! List) {
throw const FormatException('Invalid update database format');
}
final appData = decoded.cast<dynamic>().whereType<Map>().firstWhere(
(entry) => entry['id'] == appId || entry['id']?.toString() == '$appId',
orElse: () => const <String, dynamic>{},
);
if (appData.isEmpty) {
throw Exception('App with id $appId not found');
}
final storeVersion = appData['UPDATES_Vers']?.toString().trim() ?? '';
final updateDescription = appData['UPDATES_descr']?.toString().trim() ?? '';
final title = appData['title']?.toString().trim() ?? 'App';
final hasUpdate = normalizeVersion(storeVersion).isNotEmpty &&
normalizeVersion(storeVersion) != normalizeVersion(currentVersion);
if (hasUpdate) {
print('Update available for $title');
print('Version: $storeVersion');
print('Description: $updateDescription');
print('Open: $storeUri');
} else {
print('No updates found');
}
}
String normalizeVersion(String value) {
var normalized = value.trim().toLowerCase();
if (normalized.startsWith('v')) {
normalized = normalized.substring(1);
}
final buildSeparatorIndex = normalized.indexOf('+');
if (buildSeparatorIndex >= 0) {
normalized = normalized.substring(0, buildSeparatorIndex);
}
return normalized.trim();
Как это работает (пошагово)
1. Загрузка JSON
http.get(databaseUri) получает файл ZObase.json. Убедитесь, что обрабатываете ошибки сети и некорректный статус ответа.
2. Декодирование
JSON преобразуется в список (List). Именно такой формат используется на zoro-game.store.
3. Поиск записи по id
Код ищёт элемент, у которого поле id равно вашему appId. Обратите внимание на двойную проверку: entry['id'] == appId на случай, если id пришёл числом, а entry['id']?.toString() == '$appId' — если строкой.
4. Извлечение версии и описания
Берутся поля UPDATES_Vers и UPDATES_descr. Если их нет — используются пустые строки.
5. Нормализация версий
Функция normalizeVersion удаляет префикс v, обрезает пробелы и отбрасывает суффикс сборки (всё, что после +). Это позволяет корректно сравнивать строки типа "1.4.2", "v1.4.2" или "1.4.2+123".
6. Сравнение
Если нормализованная версия из базы существует и отличается от текущей версии приложения (currentVersion) — обнаружено обновление.
7. Реакция на обновление
В примере просто печатается сообщение и показывается ссылка на страницу приложения (storeUri). В реальном приложении вы должны показать диалог пользователю и предложить скачать новый APK по ссылке download_link (которая также есть в объекте appData).
Адаптируем код под ваше приложение
Чтобы использовать этот механизм в своём проекте, выполните три простых шага:
1. Получите свой id в ZoBase
Ваше приложение уже должно быть добавлено в массив ZObase.json с уникальным идентификатором. Если вы разработчик на zoro-game.store — обратитесь к администратору базы.
2. Укажите свои константы
dart
const int appId = 123; // Ваш ID
const String currentVersion = '2.0.0'; // Локальная версия приложения
3. Обработайте результат проверки
Вместо print реализуйте показ уведомления и установку обновления. Например:
dart
if (hasUpdate) {
// Показать диалог с updateDescription и кнопкой "Обновить"
// По нажатию открыть download_link через браузер или загрузить APK напрямую
final downloadUrl = appData['download_link'];
// launchUrl(Uri.parse(downloadUrl));
}
Дополнительные возможности ZoBase
Помимо версий, вы можете использовать и другие поля JSON для обогащения функционала:
· descr — полное описание приложения (можно отображать в «О программе»)
· IconGame — URL иконки (для кеширования и показа)
· price — цена (даже если бесплатно, можно показывать «0»)
· Telegram_download / Telegram_coment — ссылки на Telegram-канал для обратной связи
· DEVELOPER — имя разработчика
· file1, file2, … — дополнительные файлы (обновления, патчи)
· html_link — прямая ссылка на HTML-страницу приложения
Вы можете загружать не только сам JSON, но и отдельные метаданные при старте приложения, чтобы показывать актуальную информацию без обновления самого APK.
Заключение
Централизованная база ZoBase — это удобный и лёгкий способ распространять информацию о версиях ваших приложений. Вам не нужно обновлять код в каждом приложении отдельно, когда вы выпускаете новую версию. Достаточно один раз изменить запись в ZObase.json, и все установленные экземпляры приложения увидят обновление.
Используйте приведённый код как отправную точку, адаптируйте его под свой язык/платформу (Java/Kotlin, Swift, React Native — логика остаётся той же) и дайте пользователям всегда быть в курсе свежих релизов вашего продукта.
Полезные ссылки:
· База: https://zoro-game.store/data/ZObase.json
· Пример страницы приложения: https://zoro-game.store/pages/game/game.html?id=34
Удачной интеграции!