Интеграция с помощью LLM (ИИ) — используйте следующий промпт:
Добавьте Tenjin SDK в мой проект, воспользовавшись ссылкой: https://raw.githubusercontent.com/tenjin/sdk-llm-guides/main/guides/ios/llm-guide.md
Резюме #
SDK Tenjin iOS позволяет пользователям отслеживать события и установки в своих приложениях iOS. Чтобы узнать больше о Tenjin и наших продуктах, посетите сайт https://www.tenjin.com.
- Ознакомьтесь с нашими Примечаниями к выпуску, чтобы увидеть подробную историю версий.
- Инструкции, относящиеся конкретно к Unity, можно найти на сайте https://github.com/tenjin/tenjin-unity-sdk.
- По любым вопросам или для получения поддержки обращайтесь по адресу: support@tenjin.com
Примечания: #
- Требование к Xcode 13, если вы используете SDK iOS версии 1.12.17 или выше.
- Для обеспечения прозрачности отслеживания приложений (AppTrackingTransparency) обязательно обновите файл
.plistвашего проекта и добавьте раздел"Политика конфиденциальности" - Описание использования отслеживания(NSUserTrackingUsageDescription) вместе с текстом сообщения, которое вы хотите отобразить пользователям. Эта библиотека доступна только в iOS 14.0+. - Для поддержки поддержки Apple Search Ads Attribution, пожалуйста, обязательно обновите версию до v1.12.6+ и добавьте библиотеку
AdServices.framework. Эта библиотека доступна только в версии iOS 14.3 и выше.
Интеграция SDK #
Cocoapods #
Если вы используете Pods, добавьте pod 'TenjinSDK' в ваш Podfile, затем выполните команду pod Install и перейдите к шагу 4.
Менеджер пакетов Swift #
Если вы используете SPM, добавьте пакет SDK Tenjin через Xcode, указав этот репозиторий [здесь][43], и перейдите к шагу 4.
- Скачайте последнюю версию SDK [здесь][21].
- Перетащите
TenjinSDK.xcframeworkиTenjinSDK.hв свой проект в раздел “Этапы сборки” -> «Связать бинарный файл с библиотеками». - Добавьте флаги компоновщика
-ObjCв настройках сборки
Действия для проектов на Objective-C #
- Откройте файл AppDelegate, по умолчанию
AppDelegate.m, и#import "TenjinSDK.h". - Получите свой
SDK_KEYна странице вашего приложения. Примечание:SDK_KEYявляется уникальным для каждого вашего приложения. Для одного и того же приложения можно создать до 3 ключей.

- В методе
didFinishLaunchingWithOptionsдобавьте:
[TenjinSDK initialize:@" "];
[TenjinSDK connect];- Чтобы включить отладочные журналы Tenjin iOS SDK, добавьте:
[TenjinSDK debugLogs];Вот пример того, как должна выглядеть ваша интеграция в проектах на Objective-C в файле AppDelegate.m:
#import "TenjinSDK.h"
@implementation TJNAppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[TenjinSDK initialize:@"<SDK_KEY>"];
[TenjinSDK connect];
//All your other stuff
...
}Шаги для проектов Swift #
- Добавьте файл промежуточного заголовка Objective-C для проектов на Swift. Если в вашем проекте ещё нет такого файла, создайте его:
- Создать файл заголовка
- “Файл” → «Создать» → «Файл» → «Источники»
- Выберите файл “Header” — > Нажмите «Далее»
- Имя файла заголовка должно быть “YourProjectName-Bridging-Header” — в разделе “Targets” → выберите цель приложения → нажмите «Next»
- В заголовочном файле — “YourProjectName-Bridging-Header.h”
- Добавьте следующее:
#import "TenjinSDK.h" - Перейдите в целевую конфигурацию приложения и в разделе “Настройки сборки”
- Перейдите в раздел “Компилятор Swift — Общие настройки”
- Перейдите в подраздел “Objective-C Bridging Header” и перетащите файл заголовка — “YourProjectName-Bridging-Header.h” — в соответствующее поле.
- Добавьте следующее:
- Создать файл заголовка
- Получите свой
SDK_KEYна странице вашего приложения. Примечание:SDK_KEYявляется уникальным для каждого вашего приложения. Для одного и того же приложения можно создать до 3 ключей.

- a. В методе
didFinishLaunchingWithOptionsдобавьте:
TenjinSDK.getInstance(" ")
TenjinSDK.connect()Если вы используете Swift 5, вместо init() используйте метод getInstance(). Ознакомьтесь с нашим примером приложения на Swift
- Чтобы включить отладочные журналы Tenjin iOS SDK, добавьте:
TenjinSDK.debugLogs();Вот пример того, как должна выглядеть ваша интеграция в проектах на Swift в файле AppDelegate.swift:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
TenjinSDK.getInstance("<SDK_KEY>")
TenjinSDK.connect()
return true
}ПРИМЕЧАНИЕ: Обязательно внедрите этот код в каждый вызов didFinishLaunchingWithOptions, а не только при первом запуске приложения.
Альтернативная инициализация для обработки глубоких ссылок из других сервисов. Если вы используете другие сервисы для генерации отложенных глубоких ссылок, вы можете передать эти ссылки в Tenjin, чтобы логика атрибуции работала с вашими глубокими ссылками, настроенными в Tenjin.
#import "TenjinSDK.h"
@implementation TJNAppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[TenjinSDK init:@"<SDK_KEY>"];
//get your deep link from your other 3rd party service
NSURL *url = [NSURL withString: @"your_deep_link"];
//if you have a deep link that's generated from a third party service then pass it to tenjin to handle the Attribution of deep links holistically
if(url) {
[TenjinSDK connectWithDeferredDeeplink:url];
}
else{
[TenjinSDK connect];
}
//All your other stuff
//...
}Вы можете проверить работоспособность интеграции с помощью нашего инструмента для тестирования данных устройств в режиме реального времени. Добавьте свой advertising_id или IDFA/GAID в список тестовых устройств. Вы найдёте его в разделе "Поддержка" —> Тестовые устройства. Перейдите на страницу Live Event Tool и отправьте тестовые события из своего приложения. Вы должны увидеть поступающие события в режиме реального времени:
Инициализация Tenjin с помощью ATTrackingManager #
Начиная с версии iOS 14, у вас есть возможность отображать начальный запрос на разрешение ATTrackingManager и предлагать пользователям выбрать согласие или отказ.
Если устройство не дает разрешение на отслеживание, значение IDFA станет нулевым. Если устройство дает разрешение на отслеживание, метод connect() отправит IDFA на наши серверы.
Вы также по-прежнему можете вызывать метод Tenjin connect() без использования ATTrackingManager. Вы можете не внедрять ATT, если не намерены получать доступ к IDFA или передавать его для каких-либо пользователей в Tenjin.
#import "TenjinSDK.h"
@implementation TJNAppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[TenjinSDK init:@"<SDK_KEY>"];
if (@available(iOS 14, *)) {
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
[TenjinSDK connect];
}];
} else {
[TenjinSDK connect];
}
}Отображение запроса на предоставление разрешения ATT #
Чтобы соблюсти требования Apple к ATT, необходимо предоставить описание для запроса разрешения ATT, а затем реализовать запрос разрешения в вашем приложении.
> Примечание: перед тем как начать показывать рекламу в игре, необходимо реализовать запрос на разрешение.
Настройка описания отслеживания пользователей #
Apple требует указать описание для запроса на разрешение ATT. Вам необходимо задать описание с помощью ключа NSUserTrackingUsageDescription в файле Info.plist вашего проекта Xcode. Вы должны предоставить сообщение, информирующее пользователя о том, почему вы запрашиваете разрешение на использование данных отслеживания устройства:
- В панели навигации проекта Xcode откройте файл
Info.plist. - Нажмите кнопку «Добавить» (+) рядом с любым ключом в редакторе списка свойств, чтобы создать новый ключ свойства.
- Введите имя ключа
NSUserTrackingUsageDescription. - Выберите тип значения «строка».
- Введите в поле «Значение» сообщение о прозрачности отслеживания приложений. Вот несколько примеров:
- “Мы будем использовать ваши данные для того, чтобы обеспечить более качественную и персонализированную рекламу”.”
- “Мы стараемся показывать вам рекламу приложений и товаров, которые могут вас заинтересовать, исходя из того, какими приложениями вы пользуетесь, на каком устройстве вы находитесь и в какой стране проживаете”.”
- “Мы стараемся показывать вам рекламу приложений и товаров, которые могут вас заинтересовать, исходя из того, какими приложениями вы пользуетесь”.”
> Примечание: компания Apple предоставляет специальные [рекомендации для App Store][24], в которых определены допустимые способы использования и формулировки сообщений для всех функций, связанных с конфиденциальностью и предназначенных для конечных пользователей. Компания Tenjin не предоставляет юридических консультаций. Поэтому информация, представленная на этой странице, не заменяет консультации с вашим собственным юрисконсультом для определения правовых требований, применимых к вашему бизнесу и процессам, а также способов их соблюдения.
SKAdNetwork и показатель конверсии #
В рамках SKAdNetwork мы создали метод-обёртку для updatePostbackConversionValue(_:). Наш метод будет регистрировать соответствующие методы SKAdNetwork, а также отправлять значения конверсий на наши серверы.
updatePostbackConversionValue(\_:) Вам необходимо будет указать целое число в диапазоне от 0 до 63 (десятичное значение, а не двоичное). Это значение должно напрямую отражать событие в приложении или этап взаимодействия пользователя в соответствии с конкретной стратегией расчета значения конверсии, которую вы установите для своего приложения. Мы настоятельно рекомендуем ознакомиться с [этой][25] страницей, чтобы спланировать реализацию значения конверсии перед началом написания кода для этой логики.
Начиная с версии iOS 16.1, поддерживающей SKAdNetwork 4.0, теперь можно передавать coarseValue (строка, возможные значения: “low”, “medium” или “high”) и lockWindow (логическое значение) в качестве параметров метода обратной связи обновления:
updatePostbackConversionValue(_ conversionValue: Integer, coarseValue: String)
updatePostbackConversionValue(_ conversionValue: Integer, coarseValue: String, lockWindow: Bool)
- В версии iOS 16.1 и выше, поддерживающей SKAdNetwork 4.0, вы можете вызывать этот метод столько раз, сколько захотите, и устанавливать значение Conversion ниже или выше предыдущего значения.
- Для версий iOS ниже 16.1, поддерживающих версии SKAdNetwork ниже 4.0, вы можете вызвать этот метод, и наш SDK автоматически определит версию iOS и обновит только
conversionValue.
#import "TenjinSDK.h"
@implementation TJNAppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[TenjinSDK initialize:@"<SDK_KEY>"];
[TenjinSDK connect];
//
// This will call [SKAdNetwork updatePostbackConversionValue: <Integer between 0 and 63>]
// and also send Conversion value to our servers.
//
// You will need to use a value between 0-63.
//
[TenjinSDK updatePostbackConversionValue:<Integer between 0 and 63>];
// For iOS 16.1+ (SKAN 4.0)
[TenjinSDK updatePostbackConversionValue:<Integer between 0 and 63> coarseValue:@"medium"];
[TenjinSDK updatePostbackConversionValue:<Integer between 0 and 63> coarseValue:@"medium" lockWindow:true];
}
@endSKAdNetwork и iOS: постбэки рекламодателей для пользователей старше 15 лет #
Чтобы указать Tenjin в качестве пункта назначения для ваших [постбэков рекламной сети SK][26], выполните следующие действия:
- Выберите
Info.plistв панели навигации по проекту в Xcode. - Нажмите кнопку «Добавить» (+) рядом с ключом в редакторе списка свойств и нажмите клавишу Return.
- Введите название ключа
NSAdvertisingAttributionReportEndpoint. - Выберите «Строка» во всплывающем меню в столбце «Тип».
- Введите
https://tenjin-skan.com
Эти инструкции являются адаптированной версией руководства компании Apple, размещенного здесь.
GDPR #
В рамках обеспечения соответствия требованиям GDPR с помощью SDK Tenjin вы можете разрешить или запретить участие устройств/пользователей, а также выбрать, для каких конкретных параметров, связанных с устройством, следует разрешить или запретить участие. Функция OptOut() не будет отправлять никаких запросов API в Tenjin, и мы не будем обрабатывать никакие события.
Чтобы отказаться от участия/отказаться от участия:
#import "TenjinSDK.h"
@implementation TJNAppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[TenjinSDK initialize:@"<SDK_KEY>"];
if ([self checkOptInValue]) {
[TenjinSDK optIn];
}
else {
[TenjinSDK optOut];
}
[TenjinSDK connect];
//All your other stuff
//..
}
-(BOOL) checkOptInValue
{
// check opt-in value
// return YES; // if user opted-in
return NO;
}Чтобы включить или отключить определенные параметры, связанные с устройством, можно использовать OptInParams() или OptOutParams(). OptInParams() будет отправлять только те параметры, связанные с устройством, которые указаны. OptOutParams() отправляет все параметры, связанные с устройством, за исключением тех, которые указаны.
- Обратите внимание, что для правильного отслеживания устройств в системе Tenjin нам необходим следующий параметр. Если обязательный параметр отсутствует, событие не будет обработано или записано.
developer_device_id
Если вы планируете использовать Google Ads, вам также необходимо добавить: advertising_id, developer_device_id, platform, os_version,app_version, locale, device_model, и build_id.
Если вы хотите получить только определенные параметры, связанные с устройством, используйте OptInParams(). В приведенном ниже примере мы будем использовать только следующие параметры, связанные с устройством: ip_address, advertising_id, developer_device_id и limit_ad_tracking
[TenjinSDK initialize:@"<SDK_KEY>"];
NSArray *optInParams = @[@"ip_address", @"advertising_id", @"developer_device_id", @"limit_ad_tracking"];
[TenjinSDK optInParams:optInParams];
[TenjinSDK connect];Если вы хотите отправить ВСЕ параметры, за исключением определённых параметров, связанных с устройством, используйте OptOutParams(). В приведенном ниже примере мы отправим ВСЕ параметры, связанные с устройством, за исключением: locale, timezone и build_id.
[TenjinSDK initialize:@"<SDK_KEY>"];
NSArray *optOutParams = @[@"country", @"timezone", @"language"];
[TenjinSDK optOutParams:optOutParams];
[TenjinSDK connect];Включение/выключение с помощью CMP #
Вы можете автоматически отказаться от участия или отказаться от участия, используя свои согласия CMP (цель 1), которые уже сохранены в устройстве пользователя. Метод возвращает булево значение, чтобы сообщить вам о том, был ли пользователь согласен или нет.
optInOutUsingCMP()
[TenjinSDK initialize:@"<SDK_KEY>"];
optInOut = [TenjinSDK optInOutUsingCMP]; Параметры, связанные с устройством #
| Параметр | Описание |
|---|---|
| ip_адрес | IP-адрес |
| рекламный идентификатор | Идентификатор устройства |
| идентификатор_устройства_разработчика | Идентификационный номер поставщика |
| limit_ad_tracking | отключено отслеживание рекламы |
| платформа | платформа |
| os_version | версия операционной системы |
| устройство | название устройства |
| модель устройства | модель устройства |
| название_модели_устройства | устройство-машина |
| device_cpu | название процессора устройства |
| os_version_release | версия операционной системы |
| build_id | идентификатор сборки |
| локаль | локаль устройства |
| страна | регион, страна |
| часовой пояс | часовой пояс |
События покупки #
Передайте (SKPaymentTransaction *) transaction и (NSData *)receipt после проверки покупки, а затем вы можете передать SKPaymentTransactionStatePurchased в Tenjin для транзакции, которая была совершена:
//Get the NSData receipt
NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
NSData *receiptData = [NSData dataWithContentsOfURL:receiptURL];
//Pass the transaction and the receiptData to Tenjin
[TenjinSDK transaction: transaction andReceipt: receiptData];StoreKit 2: встроенные покупки #
StoreKit 2 — это API, доступное исключительно для языка Swift. В приложениях, использующих StoreKit 2, можно извлечь представление в формате JWS и сведения о транзакции:
import StoreKit
func handlePurchase(_ result: VerificationResult<Transaction>) async {
switch result {
case .verified(let transaction):
// Get the JWS representation (SK2 receipt)
let jwsRepresentation = transaction.jwsRepresentation
// Extract transaction details
let productId = transaction.productID
let transactionId = String(transaction.id)
let price = transaction.price ?? Decimal(0)
let currencyCode = transaction.currency?.identifier ?? "USD"
// Send to Tenjin
TenjinSDK.transaction(
withProductName: productId,
andCurrencyCode: currencyCode,
andQuantity: transaction.purchasedQuantity,
andUnitPrice: NSDecimalNumber(decimal: price),
andTransactionId: transactionId,
andBase64Receipt: jwsRepresentation
)
await transaction.finish()
case .unverified(_, _):
// Handle unverified transaction
break
}
}(Гибкая настройка комиссии App Store) С помощью нашей новой настройки вы можете выбрать один из следующих вариантов комиссии App Store: 0%, 15% или 30%. Порядок действий следующий:
- Перейдите в раздел «Настройки» –> «Приложения»
- Нажмите на приложение, для которого вы хотите его изменить
- В разделе ‘Комиссия App Store’ нажмите ‘Изменить’.’
- Выберите 30%, 15% или 0% в качестве желаемой комиссии магазина приложений.
- Выберите дату начала и дату окончания (или вы можете оставить дату окончания пустой, если вам не нужна дата окончания).
- Нажмите «Сохранить» (примечание: комиссия может применяться только к датам, наступающим в будущем, а не к прошлым датам. Поэтому, пожалуйста, установите дату начала, начиная с даты внесения изменений и далее)
Внутриигровая покупка по подписке #
ВАЖНО: Если у вас есть подписка IAP, вам необходимо добавить открытый ключ вашего приложения в панель управления Tenjin. Вы можете получить общий секретный ключ iOS для конкретного приложения на консоли iTunes Connect \> Выберите своё приложение \> Информация о приложении \> Общий секретный ключ, специфичный для приложения.
Обращаем ваше внимание на то, что вы обязаны отправлять транзакцию по подписке один раз в течение каждого периода действия подписки (т. е., например, в случае ежемесячной подписки вам необходимо отправлять нам 1 транзакцию в месяц).
На приведенной ниже временной шкале событие транзакции следует отправлять только при наступлении событий “Первый платеж” и “Продление”. В течение пробного периода не отправляйте событие транзакции в Tenjin.
Дополнительную информацию о подписках см. по ссылке: Документация Apple по работе с подписками
Нестандартные события #
ВАЖНО: НЕ ОТПРАВЛЯЙТЕ ПОЛЬЗОВАТЕЛЬСКИЕ СОБЫТИЯ ДО СОБЫТИЯ CONNECT/INITIALIZATION (см. выше). Инициализация должна быть выполнена до отправки каких-либо пользовательских событий.
ВАЖНО: Ограничьте названия пользовательских событий до 80 символов. Не превышайте 500 уникальных названий пользовательских событий.
Кроме того, вы можете использовать SDK Tenjin для передачи пользовательского события:
sendEventWithName: (NSString *)eventNameи
Вы можете использовать их для передачи Tenjin данных о пользовательских взаимодействиях с вашим приложением, чтобы соотнести их со стоимостью привлечения пользователя из каждого источника, который вы используете через платформу Tenjin. Вот несколько примеров использования:
//send a particular event for when someone swipes on a part of your app
[TenjinSDK sendEventWithName:@"swipe_right"];Пользовательские события также могут передавать NSInteger eventValue. Tenjin будет использовать это eventValue в качестве счёта или суммы для всех пользовательских событий с одинаковым eventName. eventValue ДОЛЖНО БЫТЬ ЦЕЛЫМ ЧИСЛОМ. Если eventValue не является целым числом, мы не отправим событие.
//send a particular event for when someone swipes and an event value on a part of your app
[TenjinSDK sendEventWithName:@"swipe_right" andEventValue:@"1"];Интеграция между серверами #
Tenjin предлагает интеграцию «сервер-сервер». Это позволяет отправлять события, связанные с установкой и последующими действиями, напрямую с ваших серверов на серверы Tenjin без необходимости интеграции SDK.
Параметр App Subversion для A/B-тестирования (требуется DataVault) #
Если вы проводите A/B-тестирование и хотите отразить различия в отчётах, мы можем добавить числовое значение к версии вашего приложения с помощью метода appendAppSubversion. Например, если версия вашего приложения 1.0.1, и вы установите appendAppSubversion: @8888, то в отчёте она будет указана как 1.0.1.8888.
Эти данные появятся в DataVault, где вы сможете запускать отчеты, используя значения субверсии приложения.
[TenjinSDK initialize:@" "];
[TenjinSDK appendAppSubversion:@8888];
[TenjinSDK connect];Интеграция доходов от рекламы на уровне впечатлений #
Tenjin поддерживает возможность интеграции с функцией Impression Level Ad Revenue (ILRD) из,
- AppLovin
- Unity LevelPlay
- ГиперБид
- AdMob
- TopOn
- CAS
- TradPlus
- CloudX
Эта функция позволяет вам получать события, связанные с вашей рекламной выручкой, на которую влияет каждое показание рекламы пользователю. Руководство по интеграции доступно здесь.
Кампании LiveOps #
Tenjin поддерживает получение информации об атрибуции пользователей, такой как рекламная сеть и кампания, из SDK. Это позволит разработчикам собирать и анализировать данные об атрибуции на уровне пользователей в режиме реального времени. Ниже приведены возможные сценарии использования с помощью Tenjin LiveOps Campaigns:
- Если у вас есть собственный инструмент для анализа данных, функция обратного вызова S2S позволит вам сопоставить данные атрибуции с вашими внутриигровыми данными на уровне отдельного устройства.
- Отображайте разный контент приложения в зависимости от источника трафика пользователя. Например, если пользователь А привлечен через органический трафик, а пользователь В — через Meta, и пользователь В, скорее всего, будет более активно взаимодействовать с вашим приложением, то после установки приложения пользователю следует показать специальное предложение внутри игры. Если вы хотите обсудить более конкретные сценарии использования, напишите нам по адресу support@tenjin.com.
Подробную информацию об использовании LiveOps можно найти здесь.
Идентификатор пользователя клиента #
Вы можете задавать и получать идентификатор пользователя клиента, чтобы отправлять его в качестве параметра в событиях.
setCustomerUserId(userId: "user_id") getCustomerUserId()
[TenjinSDK initialize:@"<SDK_KEY>"];
[TenjinSDK setCustomerUserId:@"user_id"];
userId = [TenjinSDK getCustomerUserId]; Идентификатор установки аналитики #
Вы можете получить идентификатор аналитика, который генерируется случайным образом и сохраняется в локальном хранилище устройства. getAnalyticsInstallationId()
[TenjinSDK initialize:@" "];
analyticsId = [TenjinSDK getAnalyticsInstallationId]; Профиль пользователя — LiveOps Metrics #
SDK Tenjin автоматически отслеживает показатели вовлеченности пользователей, что помогает вам понять поведение игроков и их пожизненную ценность. Эти показатели собираются автоматически, и к ним можно получить доступ программным способом.
Автоматическое отслеживание #
SDK автоматически отслеживает:
- Показатели сеанса: Количество сеансов, продолжительность, даты начала и окончания сеансов
- Покупки в приложениях (IAP): Количество транзакций, выручка по валютам, идентификаторы приобретенных товаров
- Доходы от рекламы (ILRD): Доход на уровне показов от поддерживаемых рекламных сетей
Получение данных профиля пользователя #
Получить объект полного профиля #
Возвращает объект TJNUserProfileData со всеми показателями:
TJNUserProfileData *profile = [TenjinSDK getUserProfile];
// Session metrics
NSInteger sessionCount = profile.sessionCount;
long long totalTime = profile.totalSessionTime;
long long avgLength = profile.averageSessionLength;
long long lastSession = profile.lastSessionLength;
long long currentSession = profile.currentSessionDuration;
NSDate *firstSession = profile.firstSessionDate;
NSDate *lastSession = profile.lastSessionDate;
// IAP metrics
NSInteger iapCount = profile.iapTransactionCount;
NSDictionary *revenueByCurrency = profile.iapRevenueByCurrency;
NSArray *productIDs = profile.purchasedProductIDsArray;
// ILRD metrics
double totalAdRevenue = profile.totalILRDRevenueUSD;
NSDictionary *revenueByNetwork = profile.ilrdRevenueByNetwork;Доступные объекты недвижимости:
| Недвижимость | Тип | Описание |
|---|---|---|
sessionCount | NSInteger | Общее количество сеансов |
totalSessionTime | long long | Общее время в миллисекундах |
averageSessionLength | long long | Средняя продолжительность сеанса в миллисекундах |
lastSessionLength | long long | Время последней завершённой сессии в миллисекундах |
currentSessionDuration | long long | Продолжительность текущего активного сеанса в миллисекундах |
firstSessionDate | NSDate? | Дата проведения первого заседания |
lastSessionDate | NSDate? | Дата последней завершённой сессии |
iapTransactionCount | NSInteger | Общее количество IAP |
iapRevenueByCurrency | NSDictionary<NSString*, NSNumber*> | Выручка по коду валюты |
purchasedProductIDsArray | NSArray<NSString*> | Отсортированные идентификаторы товаров |
totalILRDRevenueUSD | double | Общая выручка от рекламы, долл. США |
ilrdRevenueByNetwork | NSDictionary<NSString*, NSNumber*> | Доходы от рекламы по сетям |
Получить профиль в виде словаря #
Возвращает словарь со всеми метриками для удобной сериализации или отображения:
NSDictionary *profileDict = [TenjinSDK getUserProfileAsDictionary];
// Example usage
NSNumber *sessionCount = profileDict[@"session_count"];
NSString *firstSession = profileDict[@"first_session_date"];
NSDictionary *iapRevenue = profileDict[@"iap_revenue_by_currency"];
NSArray *productIds = profileDict[@"purchased_product_ids"];Ключи словаря (всегда присутствуют):
| Ключ | Тип | Описание |
|---|---|---|
session_count | NSNumber | Общее количество сеансов |
total_session_time | NSNumber | Общее время (миллисекунды) |
average_session_length | NSNumber | Средняя продолжительность сеанса (миллисекунд) |
last_session_length | NSNumber | Последний сеанс (миллисекунды) |
iap_transaction_count | NSNumber | Общее количество IAP |
total_ilrd_revenue_usd | NSNumber | Общая выручка от рекламы, долл. США |
Ключи словаря (условно — только при наличии):
| Ключ | Тип | Описание |
|---|---|---|
first_session_date | NSString | Дата в формате ISO 8601 |
last_session_date | NSString | Дата в формате ISO 8601 |
current_session_length | NSNumber | Продолжительность активной сессии (миллисекунд) |
iap_revenue_by_currency | NSDictionary | Соотношение валют → выручка |
purchased_product_ids | NSArray | Отсортированный массив идентификаторов товаров |
ilrd_revenue_by_network | NSDictionary | Схема сети → выручка |
Сбросить настройки профиля #
Удаляет все данные профиля пользователя (полезно при тестировании или для выхода пользователя из системы):
[TenjinSDK resetUserProfile];Настройки сеанса #
Настройка времени ожидания сеанса (по умолчанию — 30 минут):
TJNUserProfileManager.sessionTimeoutInterval = 600; // 10 minutesВспомогательные методы #
Получить выручку в конкретной валюте:
double usdRevenue = [profile getIAPRevenueForCurrency:@"USD"];Получить данные о доходах ILRD для конкретной сети:
double appLovinRevenue = [profile getILRDRevenueForNetwork:TJNAdNetworkAppLovin];События повторной попытки/кэширования #
Вы можете включить/выключить повторную попытку и кэширование всех событий при неудачных запросах или отсутствии интернет-соединения у пользователей. Эти события будут отправляться после того, как новое событие будет добавлено в очередь и пользователь восстановит соединение.
setCacheEventSetting(true)
[TenjinSDK setCacheEventSetting:true];Параметры Google DMA #
Если у вас уже интегрирована платформа управления согласием (CMP), параметры Google DMA будут автоматически собираться SDK Tenjin. Если у вас интегрирована CMP, в SDK Tenjin ничего дополнительно реализовывать не нужно. Если вы хотите переопределить настройки своей CMP или просто создать собственные механизмы получения согласия, вы можете воспользоваться следующим:
setGoogleDMAParametersWithAdPersonalization(bool, bool)
[[TeninSDK sharedInstance] setGoogleDMAParametersWithAdPersonalization:adPersonalization adUserData:adUserData]; Чтобы явно управлять сбором параметров Google DMA, у вас есть возможность в любой момент включить или отключить эту функцию. Хотя по умолчанию она включена, вы можете легко настроить свои предпочтения с помощью методов optInGoogleDMA или optOutGoogleDMA, что обеспечит вам полный контроль над настройками конфиденциальности ваших данных.
[TeninSDK optInGoogleDMA];
[TeninSDK optOutGoogleDMA]; 