{"id":20710432,"url":"https://github.com/mobiletelesystems/mts-analytics-podspecs","last_synced_at":"2025-07-29T16:12:40.986Z","repository":{"id":244985474,"uuid":"813509468","full_name":"MobileTeleSystems/mts-analytics-podspecs","owner":"MobileTeleSystems","description":"MTS Analytics PodSpecs","archived":false,"fork":false,"pushed_at":"2025-05-29T14:29:46.000Z","size":74,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-05-29T15:55:17.089Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MobileTeleSystems.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-06-11T08:18:31.000Z","updated_at":"2025-05-29T14:29:49.000Z","dependencies_parsed_at":"2024-06-18T21:14:03.132Z","dependency_job_id":"2a48d543-6630-462c-81fe-04666342b3c1","html_url":"https://github.com/MobileTeleSystems/mts-analytics-podspecs","commit_stats":null,"previous_names":["mobiletelesystems/mts-analytics-podspecs"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/MobileTeleSystems/mts-analytics-podspecs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MobileTeleSystems%2Fmts-analytics-podspecs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MobileTeleSystems%2Fmts-analytics-podspecs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MobileTeleSystems%2Fmts-analytics-podspecs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MobileTeleSystems%2Fmts-analytics-podspecs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MobileTeleSystems","download_url":"https://codeload.github.com/MobileTeleSystems/mts-analytics-podspecs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MobileTeleSystems%2Fmts-analytics-podspecs/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267717920,"owners_count":24133443,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-29T02:00:12.549Z","response_time":2574,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-17T02:11:57.512Z","updated_at":"2025-07-29T16:12:40.977Z","avatar_url":"https://github.com/MobileTeleSystems.png","language":"Ruby","readme":"# MTS Analytics iOS\n\nДокументация [confluence](https://confluence.mts.ru/pages/viewpage.action?pageId=311176873)\n\n- [Подключение SDK](#goto_add_dependencies)\n- [Инициализация](#goto_initialization)\n- [Отправка события](#goto_send_events)\n- [Конфигурация](#goto_configuration)\n- [Сведения об SDK](#goto_sdk_info)\n- [ECommerce события](#goto_ecommerce_feature)\n- [Отслеживание deeplink](#goto_deeplink)\n- [Link Manager](#goto_universal_link)\n- [Лимит символов события](#goto_symbols_limit)\n- [RemoteConfig](#goto_remote_config)\n- [Perfomance](#goto_perfomance)\n\n### Актуальная версия MTAnalytics - 5.1.4\n\n## Требования для установки SDK\n\n- iOS 13.0+\n- tvOS 13.0+\n\n- Необходим ID потока, который на данном этапе выдается по запросу.\n\n## \u003ca name=\"goto_add_dependencies\"\u003eШаг 1. Подключение SDK\u003c/a\u003e\n\n### Swift Package Manager\n1. Открыть Xcode project, выбрать вкладку File → Add Packages\n2. В поле поиска добавить URL проекта и нажать Add Package\n```\nhttps://github.com/MobileTeleSystems/mts-analytics-swiftpm-ios-sdk/\n```\n\n### Cocoapods\n1. Чтобы добавить библиотеку MTAnalytics в проект, через CocoaPods добавьте в Podfile:\n```ruby\npod 'MTAnalytics',  '~\u003e 5.1.4'\n```\n\n2. Устанавливаем ссылку на библиотеку MTAnalytics в Podfile:\n```ruby\nsource 'https://github.com/MobileTeleSystems/mts-analytics-podspecs'\n```\n3. Сохраните Podfile и введите pod install в Терминале для установки библиотеки.\n\n## \u003ca name=\"goto_initialization\"\u003eШаг 2. Инициализация SDK\u003c/a\u003e\n1. Сделайте импорт библиотеки:\n```swift\nimport MTAnalytics\n```\n2. Инициализируйте библиотеку в методе application(_:didFinishLaunchingWithOptions:) вашего UIApplicationDelegate:\n\n```swift\nfunc application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -\u003e Bool {\n    // Создание конфига с уникальным flowid\n    let configuration = MTAnalyticsConfiguration(flowId: \"your-flow-id\")\n\n    // Активация конфига\n    MTAnalyticsApp.configure(configuration)\n}\n\n```\n\n## \u003ca name=\"goto_send_events\"\u003eШаг 3. Отправка события\u003c/a\u003e\nДля настройки обмена данными между устройством iOS и МТС Аналитикой создайте экземпляр события и запустите его отправку.\n\n### Создать экземпляр события:\nМожно использовать custom event, где можно задать .event, .screenView или свое собственное название типа ивента через .custom(\"any_name\")\n```swift\nlet event = MTCustomEvent(eventType: .event, eventName: \"button_tap\", screenName: \"Login\", parameters: [\"test\": \"123\"])\n```\nЛибо использовать свой собственный шаблон используя MTEventRepresentable протокол.\n\n### Настроить отправку экземпляра события в МТС Аналитику:\n```swift\nMTAnalyticsApp.analytics?.track(event: event)\n```\n\n### Так же можно отправлять event и его дополнительные атрибуты без использования шаблонов\n```swift\nMTAnalyticsApp.analytics?.track(eventName: \"button_tap\", parameters: [\"test\": \"123\"])\n```\n\n### Создать экземпляр ошибок:\n```swift\nlet error = MTError(errorName: \"failed request\", parameters: [\"test\": \"123\"])\n```\nТак же можно передать stacktrace symbols в stacktrace экземпляра ошибки в виде массива строк\n(На данный момент сборка ошибок не функционирует)\n\n\n### Кросс-платформенное отслеживание\nДля авторизации сессии через webView используйте WebSSO state, который можно получить из WebSSO SDK.\n```swift\nMTAnalyticsApp.analytics?.sendAuthenticationEvent(ssoState: \"...\", redirectUrl: \"https://mts.ru\")\n```\nДля передачи значения вызовите метод и передайте ранее полученный ssoState в формате String.\nДля определения сессии юзера в случае перехода в webView или внешний браузер через приложение в котором активирован MTAnalytics, при формировании запроса для webView или браузер требуется добавить webSessionQueryItem в url запроса в виде URLQueryItem.\n```swift\nlet queryItem = MTAnalyticsApp.analytics?.webSessionQueryItem(url: \"https://mts.ru\")\n```\n\n### Передача данных о геолокации\n```swift\nMTAnalyticsApp.analytics?.setLocation(CLLocation(latitude: latitude, longitude: longitude))\n```\n\n### Обновление конфигурации без повторной инициализации\n```swift\nMTAnalyticsApp.analytics?.update(with: configuration)\n```\n\n## \u003ca name=\"goto_configuration\"\u003eКонфигурация SDK\u003c/a\u003e\n\n```swift\nfunc application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -\u003e Bool {\n    let configuration = MTAnalyticsConfiguration(flowId: \"your-flow-id\")\n\n    // Кастомизация конфигурации аналитики, например расширение хранилища событий\n    configuration.eventStorageLimit = 10000\n\n    // Инициализация Аналитики\n    MTAnalyticsApp.configure(configuration)\n}\n\n```\n\n### Сбор краш метрик\n```swift\nconfiguration.crashReportingEnabled = false\n```\nПо умолчанию, сборка краш метрик включена.\n\n### Настройки сессии\nЧтобы настроить время автоматического завершения фоновой (backgroundTimeout) и активной сессии (activeTimeout), добавьте:\n```swift\nconfiguration.activeTimeout = 1800\nconfiguration.backgroundTimeout = 1800\n```\nПо умолчанию для обоих режимов значение составляет 1800 секунд (30 минут). Минимальное допустимое значение - 900 (15 минут), максимальное - 86400 (24 часа).\n\n### Аккумуляция событий в хранилищ\n```swift\nconfiguration.eventStorageLimit = 20000\n```\nОпределяет максимальное количество событий, которые будут храниться на девайсе до тех пора пока не будут отправлены. Поступающие новые события будут вытеснять наиболее старые, тем самым соблюдать ограничение в рамках установленного лимита.\nПо умолчанию максимальное количество составляет 20000 событий и является максимальным допустимым значением. Минимальное количество событий составляет 3000.\n\n### Настройка роуминга\n```swift\nconfiguration.networkTraffic = .on\n```\nДает возможность остановить отправку событий. По умолчанию отправка событий включена.\n\n\n## \u003ca name=\"goto_sdk_info\"\u003eСведения об SDK\u003c/a\u003e\nДля получения информации о текущей версии MTAnalytics:\n```swift\nMTAnalyticsApp.analytics?.sdkVersion\n```\nСвойство sdkVersion предоставляет текущую версию SDK.\nПример: \"1.2.3\"\n\n```swift\nMTAnalyticsApp.analytics?.sdkBuildNumber\n```\nСвойство sdkBuildNumber предоставляет текущий номер сборки версии SDK.\nПример: \"5\"\n\n## \u003ca name=\"goto_ecommerce_feature\"\u003eОтправка ECommerce событий\u003c/a\u003e\n\nМТС Аналитика предоставляет два вида шаблонов ECommerce событий: MTECommerceGA4 и MTECommerceUA.\nДля отправки ECommerce событий используется метод\n\n```swift\nMTAnalyticsApp.analytics?.track(event: event)\n```\n\n### MTECommerceGA4Event\n```swift\nlet event = MTECommerceGA4Event(\n        eventName: MTECommerceGA4EventName,\n        parameters: [String: Any?]?,\n        transactionId: String?,\n        affiliation: String?,\n        value: String?,\n        currency: String?,\n        tax: String?,\n        shipping: String?,\n        shippingTier: String?,\n        paymentType: String?,\n        coupon: String?,\n        itemListName: String?,\n        itemListId: String?,\n        items: [MTECommerceGA4EventItem]?,\n        creativeName: String?,\n        creativeSlot: String?,\n        promotionId: String?,\n        promotionName: String?\n)\n```\n\nПри выборе определенного кейса в **MTECommerceGA4EventName** в eventName, есть обязательные поля для корректной разметки.\n##### add_payment_info\nПользователь выбрал способ оплаты.\nОбязательные поля: массив MTECommerceGA4EventItem.\n##### add_shipping_info\nПользователь выбрал способ доставки.\nОбязательные поля: массив MTECommerceGA4EventItem.\n##### add_to_cart\nПользователь добавляет товар в корзину из карточки товара или любых других товарных блоков.\nОбязательные поля: массив MTECommerceGA4EventItem.\n##### add_to_wishlist\nПользователь добавляет товар в избранное.\nОбязательные поля: массив MTECommerceGA4EventItem.\n##### begin_checkout\nПользователь переходит на страницу оформления заказа.\nОбязательные поля: массив MTECommerceGA4EventItem.\n##### purchase\nПользователь совершил покупку. Данное событие должно срабатывать только один раз для оформленного заказа.\nОбязательные поля:\n- transactionId.\n- массив MTECommerceGA4EventItem.\n##### refund\nПользователь возвращает покупку.\nОбязательные поля:\n- при полном возврате transactionId.\n- при частичном возврате массив MTECommerceGA4EventItem.\n##### remove_from_cart\nПользователь удаляет товар из корзины, карточки товара.\nОбязательные поля: массив MTECommerceGA4EventItem.\n##### select_item\nПользователь кликает по товарам в каталоге, результате поиска, товарных блоках и других списках.\nОбязательные поля: массив MTECommerceGA4EventItem.\n##### select_promotion\nПри клике на рекламные акции.\nОбязательные поля: массив MTECommerceGA4EventItem.\n##### view_cart\nПользователь посетил страницу корзины.\nОбязательные поля: массив MTECommerceGA4EventItem.\n##### view_item\nПользователь просматривает карточку товара.\nОбязательные поля: массив MTECommerceGA4EventItem.\n##### view_item_list\nПользователь просматривает список товаров.\nОбязательные поля: массив MTECommerceGA4EventItem.\n##### view_promotion\nПри просмотре рекламных акций на странице.\nОбязательные поля: массив MTECommerceGA4EventItem.\n\n#### MTECommerceGA4EventItem\nМассив items представляет собой структуру MTECommerceGA4EventItem\n```swift\nlet item = MTEcommerceGA4EventItem(\n        itemId: String,\n        itemName: String,\n        itemListName: String?,\n        itemListId: String?,\n        index: String?,\n        itemBrand: String?,\n        itemCategory: String?,\n        itemCategory2: String?,\n        itemCategory3: String?,\n        itemCategory4: String?,\n        itemCategory5: String?,\n        itemVariant: String?,\n        affiliation: String?,\n        discount: String?,\n        coupon: String?,\n        price: String?,\n        currency: String?,\n        quantity: String?,\n        locationId: String?,\n        creativeName: String?,\n        creativeSlot: String?,\n        promotionId: String?,\n        promotionName: String?,\n        parameters: [String: Any?]?\n)\n```\n\n### MTECommerceUAEvent\n```swift\nlet event = MTEcommerceUAEvent(eventName: MTEcommerceUAEventName, ecommerce: MTECommerceUA))\n\nlet ecommerceUA = MTECommerceUA(\n        purchase: MTECommerceUA.Purchase?,\n        checkoutOption: MTECommerceUA.CheckoutOption?,\n        add: MTECommerceUA.Add?,\n        checkout: MTECommerceUA.Checkout?,\n        refund: MTECommerceUA.Refund?,\n        remove: MTECommerceUA.Remove?,\n        click: MTECommerceUA.Click?,\n        promoClick: MTECommerceUA.PromoClick?,\n        detail: MTECommerceUA.Detail?,\n        impressions: MTECommerceUA.Impressions?,\n        promoView: MTECommerceUA.PromoView?\n)\n```\nВнутри purchase, checkoutOption, add и т.д могут находится структуры **ActionField** и массив **Product**.\n\nПри выборе определенного кейса в **MTECommerceUAEventName** в eventName, есть обязательные поля для корректной разметки.\n##### checkout_option\nПользователь выбрал способ оплаты или выбрал способ доставки.\nОбязательные поля:\n- ActionField внутри *CheckoutOption* непустой.\n\n##### add\nПользователь добавляет товар в корзину из карточки товара или любых других товарных блоков.\nОбязательные поля:\n- Массив Product внутри *Add* непустой. В каждом Product поля *name* и *id* должны быть заполнены.\n\n##### checkout\nПользователь переходит на страницу оформления заказа.\nОбязательные поля:\n- Массив Product внутри *Checkout* непустой. В каждом Product поля *name* и *id* должны быть заполнены.\n\n##### purchase\nПользователь совершил покупку. Данное событие должно срабатывать только один раз для оформленного заказа.\nОбязательные поля:\n- ActionField внутри *Purchase* непустой. Поля *id*, *revenue* должны быть заполнены.\n- Массив Product внутри *Purchase* непустой. В каждом Product поля *name* и *id* должны быть заполнены.\n\n##### refund\nПользователь возвращает покупку.\nОбязательные поля:\n- ActionField внутри *Refund* непустой. При полном возврате поле *id* должно быть заполнено, при частичном в *Product* поля *id*, *quantity* также обязательны к заполнению.\n\n##### remove\nПользователь удаляет товар из корзины, карточки товара.\nОбязательные поля:\n- Массив Product внутри *Remove* непустой. В каждом Product поля *name* и *id* должны быть заполнены.\n\n##### click\nПользователь кликает по товарам в каталоге, результате поиска, товарных блоках и других списках.\nОбязательные поля:\n- Массив Product внутри *Click* непустой. В каждом Product поля *name* и *id* должны быть заполнены.\n\n##### promoClick\nПри клике на рекламные акции.\nОбязательные поля:\n- Массив Promotions внутри *PromoClick* непустой. В каждом Promotion поля *name* и *id* должны быть заполнены.\n\n##### detail\nПользователь просматривает карточку товара.\nОбязательные поля:\n- Массив Product внутри *Product* непустой. В каждом Product поля *name* и *id* должны быть заполнены.\n\n##### impressions\nПользователь просматривает список товаров.\nОбязательные поля:\n- Массив Product внутри *Impressions* непустой. В каждом Product поля *name* и *id* должны быть заполнены.\n\n##### promoView\nПри просмотре рекламных акций на странице.\nОбязательные поля:\n- Массив Promotions внутри *PromoView* непустой. В каждом Promotion поля *name* и *id* должны быть заполнены.\n\n## \u003ca name=\"goto_deeplink\"\u003eОтслеживание Deep/Universal Links\u003c/a\u003e\n\n### UISceneDelegate\n\nЧтобы отслеживать открытия приложения с помощью Universal link, в *UISceneDelegate* в метод ```scene:willConnectToSession:options:``` добавьте код:\n\n```swift\nfunc scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {\n    let userActivity = connectionOptions.userActivities.first\n    if userActivity?.activityType == NSUserActivityTypeBrowsingWeb {\n        // Universal Link\n        if let url = userActivity?.webpageURL {\n            MTAnalyticsApp.analytics?.track(url: url, parameters: [:])\n        }\n    } else {\n        // Deeplink\n        if let context = connectionOptions.urlContexts.first {\n            MTAnalyticsApp.analytics?.track(url: context.url, parameters: [:])\n        }\n    }\n}\n```\n\nЧтобы отслеживать открытия приложения в запущенном приложении, используйте код:\n\n```swift\nfunc scene(_ scene: UIScene, continue userActivity: NSUserActivity) {\n    let url = userActivity.webpageURL\n    if userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url {\n        MTAnalyticsApp.analytics?.track(url: url, parameters: [:])\n    }\n}\n\nfunc scene(_ scene: UIScene, openURLContexts URLContexts: Set\u003cUIOpenURLContext\u003e) {\n    if let context = URLContexts.first {\n        MTAnalyticsApp.analytics?.track(url: context.url, parameters: [:])\n    }\n}\n```\n\n### UIApplicationDelegate\n\nЧтобы отслеживать открытия приложения с помощью deeplink или обработку deeplink в запущенном приложении, используйте UIApplicationDelegate и добавьте следующие изменения:\n\n```swift\nfunc application(_ application: UIApplication, trackOpeningURL url: URL) -\u003e Bool {\n    MTAnalyticsApp.analytics?.track(url: context.url, parameters: [:])\n    return true\n}\n\nfunc application(_ application: UIApplication, openURL url: URL, sourceApplication: String?, annotation: AnyObject) -\u003e Bool {\n    MTAnalyticsApp.analytics?.track(url: context.url, parameters: [:])\n    return true\n}\n\nfunc application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -\u003e Void) -\u003e Bool {\n    if userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL {\n        MTAnalyticsApp.analytics?.track(url: context.url, parameters: [:])\n    }\n    return true\n}\n```\n\n## \u003ca name=\"goto_universal_link\"\u003eИспользование Link Manager\u003c/a\u003e\n\n### Настройка приложения\n\n### В Xcode необходимо выполнить следующие действия:\n\n1. Выбрать **Target** приложения и вкладку **General**.\n2. В разделе **Capabilities** включить опцию Associated Domains.\n3. В поле **Domains** добавьте новую строку, сгенерированную административной панелью Link Manager. Формат должен быть следующим:\n```\napplinks:*product*.url.mts.ru\n```\n\n\u003e\u003e\u003e\nВ случае если вам необходимо протестировать под VPN, то вы можете использовать параметр mode:\n```\napplinks:*product*.url.mts.ru?mode=developer\n```\n\u003e\u003e\u003e\n\n### Использование прямой Universal Link\n\nПрямая Universal Link имеет следующий формат:\n\n```\nhttps://*product*.url.mts.ru/example\n```\n\nВ зависимости от того, установлено и настроено ли приложение на устройстве будет:\n1. Запуск приложения\n2. Открытие AppStore на странице приложения\n\n### Получение параметров Universal Link\n\n### Описание API\n\nВ публичном интерфейсе SDK есть два метода для получения параметров:\n\n1. Для вызова через Swift Concurrency:\n```\npublic func resolveLink(url: URL) async throws -\u003e MTLink\n```\n2. Для вызова через completion:\n```\npublic func resolveLink(url: URL, completion: @escaping (Result\u003cMTLink, Error\u003e) -\u003e Void)\n```\n\nВернется структура MTLink:\n```\npublic struct MTLink {\n\n    /**\n    Link (deeplink) with params for app.\n     */\n    public let location: String\n\n    /**\n     Params from Link Manager for link.\n     */\n    public let params: [String: Any?]\n}\n```\n\n### UISceneDelegate\n\nЧтобы обработать universal link в SceneDelegate, в случае если приложение запускается по ссылке, используйте код:\n\n```swift\nfunc scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {\n    let userActivity = connectionOptions.userActivities.first\n    if userActivity?.activityType == NSUserActivityTypeBrowsingWeb {\n        Task {\n            let link = try? await MTAnalyticsApp.linkResolver?.resolveLink(url: url)\n        }\n    }\n}\n```\n\nДля случая, если приложение уже было открыто на момент перехода по ссылке:\n\n```swift\nfunc scene(_ scene: UIScene, continue userActivity: NSUserActivity) {\n    let url = userActivity.webpageURL\n    if userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url {\n        Task {\n            let link = try? await MTAnalyticsApp.linkResolver?.resolveLink(url: url)\n        }\n    }\n}\n\n```\n\n### UIApplicationDelegate\n\nЧтобы обработать universal link в SceneDelegate, используйте следующий код:\n\n```swift\nfunc application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -\u003e Void) -\u003e Bool {\n    MTAnalyticsApp.linkResolver?.resolveLink(url: url) { result in\n        switch result {\n            case .success(let link):\n                ...\n            case .failure(let error):\n                ...\n        }\n    }\n    return true\n}\n```\n\n## \u003ca name=\"goto_symbols_limit\"\u003eЛимит символов события\u003c/a\u003e\n\nДля разных полей существует определенный лимит на количество символов. При привышении лимита поле будет обрезаться.\nДля всех событий:\n- eventName - 500.\n- screenName - 100.\n- parameters - первые 20 полей до 500, остальные до 100.\n\nMTEcosystemEvent:\n- первые 20 полей до 500, остальные до 200.\n\nМаксимальное количество символов для MTECommerceGa4 и MTECommerceUA - 100.\n\n\n## \u003ca name=\"goto_remote_config\"\u003eRemoteConfig\u003c/a\u003e\n\n`MTRemoteConfig` — это класс для управления удаленными настройками конфигурации в вашем приложении. Он позволяет задавать значения по умолчанию, получать обновления с сервера и активировать их для использования в приложении без необходимости выпуска новых версий. Кроме того, `MTRemoteConfig` поддерживает проведение AB-тестов, что позволяет тестировать различные сценарии и функции на разных группах пользователей.\n\n### Инициализация\n\nСоздайте экземпляр Remote Config\n\n```swift\nlet remoteConfig = MTAnalyticsApp.remoteConfig\n```\n\n### Установка значений по умолчанию\n\nЗадайте значения по умолчанию для параметров конфигурации. Это обеспечит работу приложения до получения remote config с сервера.\n\n#### Из plist-файла:\n\n```swift\nremoteConfig.setDefaults(plistName: \"DefaultConfig\")\n```\n\n#### Из словаря:\n\n```swift\nremoteConfig.setDefaults(dict: [\n    \"welcome_message\": \"Добро пожаловать!\",\n    \"new_feature_flag\": false,\n    \"max_items\": 10\n])\n```\n\n### Настройка параметров запросов\n\n#### minFetchInterval\n\nМинимальный интервал (в секундах) между последовательными запросами к серверу.\nИспользуйте для предотвращения частых запросов. Значение по умолчанию: 300\n```swift\nremoteConfig.minFetchInterval = 600\n```\n\n#### fetchTimeout\nМаксимальное время ожидания ответа от сервера (в секундах).\nЗначение по умолчанию: 30\n```swift\nremoteConfig.fetchTimeout = 15\n```\n\n### Получение и активация значений с сервера\n\nЧтобы получить обновленные значения с сервера, вызовите метод `fetchRemoteConfigValues`. После успешного получения активируйте их с помощью метода `activate()`.\n\n#### Асинхронное получение:\n\n```swift\nTask {\n    let status = await remoteConfig.fetchRemoteConfigValues()\n    if status == .success {\n        remoteConfig.activate()\n    }\n}\n```\n\n#### С использованием completion handler:\n\n```swift\nremoteConfig.fetchRemoteConfigValues { status in\n    if status == .success {\n        remoteConfig.activate()\n    }\n}\n```\n\n#### Асинхронное получение и активация:\n\n```swift\nTask {\n    do {\n        let status = try await remoteConfig.fetchRemoteConfigValuesAndActivate()\n        if status == .success {\n            print(\"Конфигурация успешно обновлена и активирована\")\n        }\n    } catch {\n        print(\"Ошибка при получении и активации: \\(error)\")\n    }\n}\n```\n\n### Получение значений после активации\n\nПосле успешной активации полученные значения будут доступны через метод `configValue(_:)`. Этот метод возвращает объект, реализующий протокол `MTRemoteConfigValue`, который позволяет получить значение в различных форматах.\n\n```swift\nif let welcomeMessage = remoteConfig.configValue(\"welcome_message\")?.stringValue {\n    print(\"Сообщение приветствия: \\(welcomeMessage)\")\n}\n```\n\n### Получение значений по умолчанию\n\nЕсли вам нужно получить значение по умолчанию, используйте метод `defaultValue(_:)`:\n\n```swift\nif let defaultValue = remoteConfig.defaultValue(\"welcome_message\")?.stringValue {\n    print(\"Значение по умолчанию для welcome_message: \\(defaultValue)\")\n}\n```\n\n## \u003ca name=\"goto_remote_config\"\u003ePerfomance\u003c/a\u003e\n\n`MTPerformance` — это инструмент для:\n- Замера скорости работы участков кода с помощью `MTTracer` с последующей отправкой события в центр аналитики.\n- Трекинг URL запросов из приложения с возможностью фильтрации трафика и последующей отправкой события с параметрами запроса в центр аналитики.\n- Замера скорости открытия приложения от нажатия на иконку до первого вызвова viewDidAppear.\n\n### Инициализация\n\nСоздайте экземпляр\n\n```swift\nlet performance = MTAnalyticsApp.performance\n```\n\nДля начала трекинга запросов и скорости открытия приложения необходимо до инициализации сетевого слоя в приложении проинициализировать `MTAnalytics`:\n\n```swift\nfunc application(\n    _ application: UIApplication,\n    willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil\n) -\u003e Bool {\n    let configuration = MTAnalyticsConfiguration(flowId: \"your-flow-id\")\n    configuration.appStartMetricsCollectingEnabled = true\n    configuration.networkTrackingEnabled = true\n    MTAnalyticsApp.configure(configuration)\n}\n\n```\n### Трекинг URL-запросов\nДля фильтрации трафика необходимо вызвать `setExcludedUrls`:\n\n```swift\nlet filteredRequests: [String] = [\"https://example.com\"]\nperformance?.setExcludedUrls(filteredRequests)\n```\n\n### Tracer\n\n`MTTracer` - инструмент, позволяющий произвести замеры выполения кода в вашем приложении.\n\nПри инициализации необходимо указать название замера:\n\n```swift\nlet tracer = performance.newTrace(\"customTrace\")\n```\n\nДля запуска и остановки замера используйте функции `start()` и `stop()`:\n\n```swift\ntracer.start()\n// some code running\ntracer.stop()\n```\n\nПосле остановки замера событие с параметрами замера и названием автоматически отправится в систему аналитики, но если вам необходимо получить данные замера, то можете воспользоваться параметрами `name` и `lastMeasure`:\n\n```swift\npublic protocol MTTracer {\n    /*\n     Name of the tracer that was passed through the init\n     */\n    var name: String { get }\n\n    /*\n     Last measure between calls start and stop functions\n     */\n    var lastMeasure: Double? { get }\n    ...\n}\n``` \n\n## Команда разработки\n\n- Павел Богарт, pibogar1@mts.ru\n- Анита Хасанова, arkhas12@mts.ru\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmobiletelesystems%2Fmts-analytics-podspecs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmobiletelesystems%2Fmts-analytics-podspecs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmobiletelesystems%2Fmts-analytics-podspecs/lists"}