README.md

    RSRemoteConfig

    Библиотека для подключения к сервису RuStore Remote Config.

    Возможности:

    • Обновление данных в фоне
    • Кеширование

    Установка

    Swift Package Manager

    1. Выберите ваш проект в Xcode
    2. Добавьте SPM зависимость в Xcode
    let package = Package( 
        dependencies: [
            .package(url: "https://gitflic.ru/project/rustore/rustore-remote-config-swift.git", from: "1.0.0")
        ],
        targets: [
            .target(
                name: "RuStore",
                dependencies: [
                    .product(name: "RSRemoteConfig", package: "rustore-remote-config-swift")
                ]
            ) 
        ]
    )
    

    Cocoapods

    Добавьте библиотеку в Podfile:

    platform :iOS, '13.0'
    
    target 'YourProjectName' do 
      use_frameworks!
      
      pod 'RSRemoteConfig', '-> 1.0.0'
    end
    

    Установите зависимости

    pod install
    

    Использование

    1. Скопируйте appID вашего приложения из консоли https://remote-config.rustore.ru
    2. Импортируйте модуль RSRemoteConfig
    3. Сконфигурируйте RemoteConfigClient для подключения к remote config серверу.
    4. Получите текущие значения remote config
    import RSRemoteConfig
    
    let client = RemoteConfigClient(appID: "ваш_app_id")
    let remoteConfig = await client.remoteConfig()
    
    let integerValue = remoteConfig.integer(forKey: "key_name")
    

    Получение значений remote config происходит асинхронно.

    Можно заранее “прогреть” конфигурацию с помощью вызова метода start():

    let client = RemoteConfigClient(appID: "ваш_app_id") 
    client.start()
    

    Необходимо удерживать сильную ссылку на объект RemoteConfigClient и везде использовать его для получения значений remote config.

    Конфигурация клиента

    Клиент можно конфигурировать с помощью RemoteConfigConfiguration:

    let configuration = RemoteConfigConfiguration(
        environment: .alpha,
        updateBehaviour: .actual, 
        requestParametersProvider: {
            RemoteConfigConfiguration.RequestParameters(
                account: item.account
            ) 
        }
    )
    
    let client = RemoteConfigClient(appID: "ваш_app_id", configuration: configuration)
    

    Параметры

    environment

    Используется для тестирования конфигурации на различных сборках приложения. Возможные значения: .alpha, .beta, .release.

    requestParametersProvider

    Замыкание, которое позволяет динамически передавать параметр account для получения remote config. Конфигурируется в консоли.

    updateBehaviour

    Стратегия для фонового обновления remote config значений.

    Фоновые обновления

    Полученные значения remote config кешируются локально и могут быть обновлены в фоне.

    Существуют три стратегии фонового обновления значений remote config:

    • Default (Используется по умолчанию)
    • Snapshot
    • Actual
    Default Snapshot Actual
    Фоновые обновления ✅ Каждые 15 минут ✅ Каждые 15 минут
    Кеширование значений
    Возвращает актуальные значения ✅ Согласно интервалу обновления ❌ Доступны после перезапуска клиента

    Default

    let configuration = RemoteConfigConfiguration( 
        updateBehaviour: .default(timeInterval: 900) // 15 mins
    )
    
    let client = RemoteConfigClient(appID: "ваш_app_id", configuration: configuration) 
    let remoteConfig = await client.remoteConfig()
    

    Если локальный кеш пуст или срок хранения кеша истек, то при вызове await client.remoteConfig(), будет отправлен запрос на сервер. Доступ к конфигурации будет ожидать завершения запроса. В обратном случае, будут возвращены значения из кеша.

    Через 15 минут произойдет обновление значений remote config. Обновленные значения remote config будут сохранены в кеше, чтобы при следующем вызове await client.remoteConfig() вернуть свежие значения. Свежие значения будут автоматически применены ко всем объектам RemoteConfig, полученным ранее через await client.remoteConfig()

    Snapshot

    let configuration = RemoteConfigConfiguration(
        updateBehaviour: .snapshot(timeInterval: 900) // 15 mins
    )
    
    let client = RemoteConfigClient(appID: "ваш_app_id", configuration: configuration) 
    let remoteConfig = await client.remoteConfig()
    

    Выполняет фоновые обновления с указанным интервалом.

    Интервал обновления задается в параметре timeInterval (по умолчанию — 15 минут).

    Если локальный кеш пуст или срок хранения кеша истек, то при вызове await client.remoteConfig(), будет отправлен запрос на сервер. Доступ к конфигурации будет ожидать завершения запроса. В обратном случае, будут возвращены значения из кеша.

    Через 15 минут произойдет обновление значений remote config. Обновленные значения remote config будут сохранены в кеше. Вызов await client.remoteConfig() будет всегда возвращать одинаковые значения в рамках жизни процесса.

    ⚠️ Отличие от .default в том, что обновленные значения remote config станут доступны после повторной инициализации клиента или перезапуска приложения.

    Actual

    let configuration = RemoteConfigConfiguration(
        updateBehaviour: .actual
    )
    
    let client = RemoteConfigClient(appID: "ваш_app_id", configuration: configuration) 
    let remoteConfig = await client.remoteConfig()
    

    Не запускает никаких обновлений в фоне.

    При вызове await client.remoteConfig() всегда отправляет запрос на сервер, чтобы получить актуальные значения.

    Чтение значений remote config

    После получения remote config, есть возможность читать типизированные значения:

    let remoteConfig = await client.remoteConfig() 
    remoteConfig.integer(forKey: "integer_value") 
    remoteConfig.double(forKey: "double_value") 
    remoteConfig.string(forKey: "string_value") 
    remoteConfig.bool(forKey: "bool_value") 
    remoteConfig.jsonObject(forKey: "json_object")
    

    Подписка на события

    Можно получить сообщения о событиях в работе SDK с помощью объекта RemoteConfigEventListener:

    let client = Client(appID: "ваш_app_id") 
    client.addEventListener(
        RemoteConfigEventListener(
            didUpdatePersistentStorage: {
                print("remote config client did update persistent storage")
            },
            didCompleteNetworkRequest: { result in
                print("remote config client did complete network request with result \(String(describing: result))")
            }
        )
    )
    
    • didUpdatePersistentStorage — вызывается после обновления постоянного хранилища со значениями remote config
    • didCompleteNetworkRequest — вызывается после окончания сетевого запроса
    Описание

    Библиотека для подключения к RuStore Remote Config

    Конвейеры
    0 успешных
    0 с ошибкой