{"id":15446,"date":"2026-02-20T07:06:10","date_gmt":"2026-02-20T07:06:10","guid":{"rendered":"http:\/\/mariusz.bijok"},"modified":"2026-04-17T15:22:41","modified_gmt":"2026-04-17T15:22:41","password":"","slug":"mmp-sdk-ios","status":"publish","type":"docs","link":"https:\/\/tenjin.com\/ja\/docs\/mmp-sdk-ios\/","title":{"rendered":"iOS SDK"},"content":{"rendered":"\n<p class=\"has-info-bg-background-color has-background\"><strong>Integrate using LLMs (AI) &#8211; Use following prompt:<br><\/strong>Add Tenjin SDK to my project using: <a href=\"https:\/\/raw.githubusercontent.com\/tenjin\/sdk-llm-guides\/main\/guides\/ios\/llm-guide.md\">https:\/\/raw.githubusercontent.com\/tenjin\/sdk-llm-guides\/main\/guides\/ios\/llm-guide.md<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Summary<\/h3>\n\n\n\n<p>The Tenjin iOS SDK allows users to track events and installs in their iOS apps. To learn more about Tenjin and our product offering, please visit https:\/\/www.tenjin.com.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Please see our <a href=\"https:\/\/github.com\/tenjin\/tenjin-ios-sdk\/blob\/master\/RELEASE_NOTES.md\">Release Notes<\/a> to see detailed version history.<\/li>\n\n\n\n<li>For Unity-specific instructions, please visit https:\/\/github.com\/tenjin\/tenjin-unity-sdk.<\/li>\n\n\n\n<li>For any issues or support, please contact: support@tenjin.com<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Notes:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Xcode 13 requirement, if you&#8217;re using iOS SDK v1.12.17 and higher.<\/li>\n\n\n\n<li>For AppTrackingTransparency, be sure to update your project <code>.plist<\/code> file and add <code>Privacy - Tracking Usage Description<\/code> <a href=\"https:\/\/developer.apple.com\/documentation\/bundleresources\/information_property_list\/nsusertrackingusagedescription\" target=\"_new\">(NSUserTrackingUsageDescription)<\/a> along with the text message you want to display to users. This library is only available in iOS 14.0+.<\/li>\n\n\n\n<li>For <a href=\"https:\/\/developer.apple.com\/documentation\/iad\/setting_up_apple_search_ads_attribution\" target=\"_new\">Apple Search Ads Attribution<\/a> support, please be sure to upgrade to v1.12.6+ and add the <code>AdServices.framework<\/code> library. This library is only available in iOS 14.3+.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">SDK Integration<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Cocoapods<\/h3>\n\n\n\n<p>If you use pods, add <code>pod 'TenjinSDK'<\/code> to your <code>Podfile<\/code> then run <code>pod install<\/code> and skip to step 4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Swift Package Manager<\/h3>\n\n\n\n<p>If you use SPM, add Tenjin&#8217;s SDK package through Xcode with this repository [here][43] and skip to step 4.<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Download the latest SDK release [here][21].<\/li>\n\n\n\n<li>Drag <code>TenjinSDK.xcframework<\/code> and <code>TenjinSDK.h<\/code> to your project under build phases -&gt; &#8220;Link Binary With Libraries&#8221;.<\/li>\n\n\n\n<li>Include the linker flags <code>-ObjC<\/code> under your Build Settings<\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Steps for Objective-C projects<\/h3>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>Go to your AppDelegate file, by default <code>AppDelegate.m<\/code>, and <code>#import \"TenjinSDK.h\"<\/code>.<\/li>\n\n\n\n<li>Get your <code>SDK_KEY<\/code> from your app page. Note: <code>SDK_KEY<\/code> is unique for each of your app. You can create up to 3 keys for the same app.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/tenjin.com\/wp-content\/uploads\/2026\/01\/app_api_key1.png?ssl=1\" alt=\"app_api_key.png\" class=\"wp-image-13100\"\/><\/figure>\n\n\n\n<ol start=\"6\" class=\"wp-block-list\">\n<li>In your <code>didFinishLaunchingWithOptions<\/code> method add: <\/li>\n<\/ol>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#39404f;color:#c8d0e0\">Objective-C<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&#91;TenjinSDK initialize:@\"<SDK_KEY>\"&#93;;\n&#91;TenjinSDK connect&#93;;<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">initialize<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #ECEFF4\">@\"<\/span><span style=\"color: #A3BE8C\"><SDK_KEY><\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">connect<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<ol start=\"7\" class=\"wp-block-list\">\n<li>To enable Tenjin iOS SDK debug logs add:<\/li>\n<\/ol>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#2e3440ff;font-style:italic;color:#d8dee9ff\"><span style=\"border-bottom:1px solid rgba(201, 218, 248, 0.2)\">Objective-C<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&#91;TenjinSDK debugLogs&#93;;<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">debugLogs<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Here&#8217;s an example of what your integration in Objective-C projects should look like in your <code>AppDelegate.m<\/code> file:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#2e3440ff;font-style:italic;color:#d8dee9ff\"><span style=\"border-bottom:1px solid rgba(201, 218, 248, 0.2)\">Objective-C<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>#import \"TenjinSDK.h\"\n\n@implementation TJNAppDelegate\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions\n{\n    &#91;TenjinSDK initialize:@\"&lt;SDK_KEY>\"&#93;;\n    &#91;TenjinSDK connect&#93;;\n\n    \/\/All your other stuff\n    ...\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">#<\/span><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #5E81AC\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">TenjinSDK.h<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">@<\/span><span style=\"color: #81A1C1\">implementation<\/span><span style=\"color: #D8DEE9FF\"> TJNAppDelegate<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">- <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">BOOL<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #88C0D0\">application<\/span><span style=\"color: #ECEFF4\">:(<\/span><span style=\"color: #D8DEE9FF\">UIApplication <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9\">application<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">didFinishLaunchingWithOptions<\/span><span style=\"color: #ECEFF4\">:(<\/span><span style=\"color: #8FBCBB\">NSDictionary<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9\">launchOptions<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">initialize<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">&lt;SDK_KEY&gt;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">connect<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">    <\/span><span style=\"color: #616E88\">\/\/All your other stuff<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    ...<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Steps for Swift projects<\/h3>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>Add Objective-C Bridging Header file for swift projects, If your project does not already have a bridging header, create one:\n<ol style=\"list-style-type:lower-alpha\" class=\"wp-block-list\">\n<li>Create a header file\n<ol style=\"list-style-type:lower-roman\" class=\"wp-block-list\">\n<li>File -&gt; New -&gt; File -&gt; &#8220;Sources&#8221;<\/li>\n\n\n\n<li>Choose &#8220;Header&#8221; File &#8211; &gt; Click Next<\/li>\n\n\n\n<li>The header file name should &#8220;YourProjectName-Bridging-Header&#8221; &#8211; Under &#8220;Targets&#8221; -&gt; Select the app target -&gt; Click Next<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>In the header file &#8211; &#8220;YourProjectName-Bridging-Header.h&#8221;\n<ol style=\"list-style-type:lower-roman\" class=\"wp-block-list\">\n<li>Add the following: <code>#import \"TenjinSDK.h\"<\/code><\/li>\n\n\n\n<li>Go to the app target and under &#8220;Build Settings&#8221;\n<ol style=\"list-style-type:lower-roman\" class=\"wp-block-list\">\n<li>Go to the section &#8220;Swift Compiler &#8211; General&#8221;<\/li>\n\n\n\n<li>Go to the sub-section &#8220;Objective-C Bridging Header&#8221; and drag the header file &#8211; &#8220;YourProjectName-Bridging-Header.h&#8221; to the field.<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<\/li>\n\n\n\n<li>Get your <code>SDK_KEY<\/code> from your app page. Note: <code>SDK_KEY<\/code> is unique for each of your app. You can create up to 3 keys for the same app.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/tenjin.com\/wp-content\/uploads\/2026\/01\/app_api_key1.png?ssl=1\" alt=\"app_api_key.png\" class=\"wp-image-13101\"\/><\/figure>\n\n\n\n<ol start=\"6\" class=\"wp-block-list\">\n<li>a. In your <code>didFinishLaunchingWithOptions<\/code> method add: <\/li>\n<\/ol>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#39404f;color:#c8d0e0\">Swift<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>TenjinSDK.getInstance(\"<SDK_KEY>\")\nTenjinSDK.connect()<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D8DEE9FF\">TenjinSDK.<\/span><span style=\"color: #88C0D0\">getInstance<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #A3BE8C\"><SDK_KEY><\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">TenjinSDK.<\/span><span style=\"color: #88C0D0\">connect<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>If you are using Swift 5, use the getInstance() method instead of init(). See our <a href=\"https:\/\/github.com\/tenjin\/tenjin-ios-sdk-swift-demo\">sample Swift app<\/a><\/p>\n\n\n\n<ol start=\"7\" class=\"wp-block-list\">\n<li>To enable Tenjin iOS SDK debug logs add: <\/li>\n<\/ol>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#2e3440ff;font-style:italic;color:#d8dee9ff\"><span style=\"border-bottom:1px solid rgba(201, 218, 248, 0.2)\">Swift<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>TenjinSDK.debugLogs();<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D8DEE9FF\">TenjinSDK.<\/span><span style=\"color: #88C0D0\">debugLogs<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Here&#8217;s an example of what your integration in Swift projects should look like in your <code>AppDelegate.swift<\/code> file:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#2e3440ff;font-style:italic;color:#d8dee9ff\"><span style=\"border-bottom:1px solid rgba(201, 218, 248, 0.2)\">Swift<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: &#91;UIApplication.LaunchOptionsKey: Any&#93;?) -> Bool {\n    \/\/ Override point for customization after application launch.\n    TenjinSDK.getInstance(\"&lt;SDK_KEY>\")\n    TenjinSDK.connect()\n    return true\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">func<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">application<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">_<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">application<\/span><span style=\"color: #D8DEE9FF\">: UIApplication, <\/span><span style=\"color: #88C0D0\">didFinishLaunchingWithOptions<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">launchOptions<\/span><span style=\"color: #D8DEE9FF\">: <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">UIApplication.LaunchOptionsKey<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Any<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">?<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">-&gt;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Bool<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">    <\/span><span style=\"color: #616E88\">\/\/ Override point for customization after application launch.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    TenjinSDK.<\/span><span style=\"color: #88C0D0\">getInstance<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">&lt;SDK_KEY&gt;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    TenjinSDK.<\/span><span style=\"color: #88C0D0\">connect<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">true<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><strong>NOTE:<\/strong> Please ensure you implement this code on every <code>didFinishLaunchingWithOptions<\/code>, not only on the first app open of the app.<\/p>\n\n\n\n<p>Alternate initialization to handle deep links from other services. If you use other services to produce deferred deep links, you can pass Tenjin those deep links to handle the attribution logic with your Tenjin enabled deep links.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#2e3440ff;font-style:italic;color:#d8dee9ff\"><span style=\"border-bottom:1px solid rgba(201, 218, 248, 0.2)\">Objective-C<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>#import \"TenjinSDK.h\"\n\n@implementation TJNAppDelegate\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions\n{\n\n    &#91;TenjinSDK init:@\"&lt;SDK_KEY>\"&#93;;\n\n    \/\/get your deep link from your other 3rd party service\n    NSURL *url = &#91;NSURL withString: @\"your_deep_link\"&#93;;\n\n    \/\/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\n    if(url) {\n      &#91;TenjinSDK connectWithDeferredDeeplink:url&#93;;\n    }\n    else{\n      &#91;TenjinSDK connect&#93;;\n    }\n\n    \/\/All your other stuff\n    \/\/...\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">#<\/span><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #5E81AC\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">TenjinSDK.h<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">@<\/span><span style=\"color: #81A1C1\">implementation<\/span><span style=\"color: #D8DEE9FF\"> TJNAppDelegate<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">- <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">BOOL<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #88C0D0\">application<\/span><span style=\"color: #ECEFF4\">:(<\/span><span style=\"color: #D8DEE9FF\">UIApplication <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9\">application<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">didFinishLaunchingWithOptions<\/span><span style=\"color: #ECEFF4\">:(<\/span><span style=\"color: #8FBCBB\">NSDictionary<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9\">launchOptions<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">init<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">&lt;SDK_KEY&gt;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">    <\/span><span style=\"color: #616E88\">\/\/get your deep link from your other 3rd party service<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">NSURL<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">url <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #8FBCBB\">NSURL<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">withString<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">your_deep_link<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">    <\/span><span style=\"color: #616E88\">\/\/if you have a deep link that&#39;s generated from a third party service then pass it to tenjin to handle the attribution of deep links holistically<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">url<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">connectWithDeferredDeeplink<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\">url<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">else<\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">connect<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">    <\/span><span style=\"color: #616E88\">\/\/All your other stuff<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">    <\/span><span style=\"color: #616E88\">\/\/...<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>You can verify if the integration is working through our <a href=\"https:\/\/www.tenjin.io\/dashboard\/sdk_diagnostics\">Live Test Device Data Tool<\/a>. Add your <code>advertising_id<\/code> or <code>IDFA\/GAID<\/code> to the list of test devices. You can find this under Support -\\&gt; <a href=\"https:\/\/www.tenjin.io\/dashboard\/debug_app_users\">Test Devices<\/a>. Go to the <a href=\"https:\/\/www.tenjin.io\/dashboard\/sdk_diagnostics\">Live Event Tool page<\/a> and send the test events from your app. You should see live events come in:<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Tenjin initialization with ATTrackingManager<\/h3>\n\n\n\n<p>Starting with iOS 14, you have the option to show the initial&nbsp;<a href=\"https:\/\/docs.tenjin.com\/\">ATTrackingManager<\/a>&nbsp;permissions prompt and selection to opt in\/opt out users.<br>If the device doesn&#8217;t accept tracking permission, IDFA will become zero. If the device accepts tracking permission, the&nbsp;<code>connect()<\/code>&nbsp;method will send the IDFA to our servers.<br>You can also still call Tenjin&nbsp;<code>connect()<\/code>, without using ATTrackingManager. You can choose not to implement ATT if you don&#8217;t intend to access or pass the IDFA for any users to Tenjin.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#2e3440ff;font-style:italic;color:#d8dee9ff\"><span style=\"border-bottom:1px solid rgba(201, 218, 248, 0.2)\">Objective-C<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>#import \"TenjinSDK.h\"\n\n@implementation TJNAppDelegate\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions\n{\n\n    &#91;TenjinSDK init:@\"&lt;SDK_KEY>\"&#93;;\n\n    if (@available(iOS 14, *)) {\n        [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {\n            &#91;TenjinSDK connect&#93;;\n        }];\n    } else {\n        &#91;TenjinSDK connect&#93;;\n    }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">#<\/span><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #5E81AC\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">TenjinSDK.h<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">@<\/span><span style=\"color: #81A1C1\">implementation<\/span><span style=\"color: #D8DEE9FF\"> TJNAppDelegate<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">- <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">BOOL<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #88C0D0\">application<\/span><span style=\"color: #ECEFF4\">:(<\/span><span style=\"color: #D8DEE9FF\">UIApplication <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9\">application<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">didFinishLaunchingWithOptions<\/span><span style=\"color: #ECEFF4\">:(<\/span><span style=\"color: #8FBCBB\">NSDictionary<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9\">launchOptions<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">init<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">&lt;SDK_KEY&gt;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">@<\/span><span style=\"color: #88C0D0\">available<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">iOS <\/span><span style=\"color: #B48EAD\">14<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #ECEFF4\">))<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">[<\/span><span style=\"color: #D8DEE9FF\">ATTrackingManager <\/span><span style=\"color: #88C0D0\">requestTrackingAuthorizationWithCompletionHandler<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #81A1C1\">^<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">ATTrackingManagerAuthorizationStatus status<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">connect<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">}]<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">else<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">connect<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Displaying an ATT permission prompt<\/h3>\n\n\n\n<p>To comply with Apple&#8217;s ATT guidelines, you must provide a description for the ATT permission prompt, then implement the permission request in your application.<\/p>\n\n\n\n<p>&gt; Note: You must implement the permission request before serving ads in your game.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Configuring a user tracking description<\/h3>\n\n\n\n<p>Apple requires a description for the ATT permission prompt. You need to set the description with the <code>NSUserTrackingUsageDescription<\/code> key in the <code>Info.plist<\/code> file of your Xcode project. You have to provide a message that informs the user why you are requesting permission to use device tracking data:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>In your Xcode project navigator, open the <code>Info.plist<\/code> file.<\/li>\n\n\n\n<li>Click the add button (+) beside any key in the property list editor to create a new property key.<\/li>\n\n\n\n<li>Enter the key name <code>NSUserTrackingUsageDescription<\/code>.<\/li>\n\n\n\n<li>Select a string value type.<\/li>\n\n\n\n<li>Enter the app tracking transparency message in the value field. Some examples include:\n<ul class=\"wp-block-list\">\n<li>&#8220;We will use your data to provide a better and personalized ad experience.&#8221;<\/li>\n\n\n\n<li>&#8220;We try to show ads for apps and products that will be most interesting to you based on the apps you use, the device you are on, and the country you are in.&#8221;<\/li>\n\n\n\n<li>&#8220;We try to show ads for apps and products that will be most interesting to you based on the apps you use.&#8221;<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>&gt; Note: Apple provides specific [app store guidelines][24] that define acceptable use and messaging for all end-user facing privacy-related features. Tenjin does not provide legal advice. Therefore, the information on this page is not a substitute for seeking your own legal counsel to determine the legal requirements of your business and processes, and how to address them.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">SKAdNetwork and Conversion value<\/h3>\n\n\n\n<p>As part of <a href=\"https:\/\/developer.apple.com\/documentation\/storekit\/skadnetwork\">SKAdNetwork<\/a>, we created wrapper method for <a href=\"https:\/\/developer.apple.com\/documentation\/storekit\/skadnetwork\/3919928-updatepostbackconversionvalue\"><code>updatePostbackConversionValue(_:)<\/code><\/a>. Our method will register the equivalent SKAdNetwork methods and also send the conversion values to our servers.<\/p>\n\n\n\n<p><code>updatePostbackConversionValue(\\_:)<\/code> you will provide an integer between 0 and 63 (decimal value, not binary). This value should directly reflect an in-app event or user milestone based on the specific conversion value strategy you establish for your app. We strongly recommend consulting [this][25] page o plan your conversion value implementation before coding this logic.<\/p>\n\n\n\n<p>As of iOS 16.1, which supports SKAdNetwork 4.0, you can now send <code>coarseValue<\/code> (String, with possible variants being &#8220;low&#8221;, &#8220;medium&#8221; or &#8220;high&#8221;) and <code>lockWindow<\/code> (Boolean) as parameters on the update postback method:<\/p>\n\n\n\n<p><code>updatePostbackConversionValue(_ conversionValue: Integer, coarseValue: String)<\/code><\/p>\n\n\n\n<p><code>updatePostbackConversionValue(_ conversionValue: Integer, coarseValue: String, lockWindow: Bool)<\/code><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>For iOS version 16.1+ which supports SKAdNetwork 4.0, you can call this method as many times as you want and can make the conversion value lower or higher than the previous value.<\/li>\n\n\n\n<li>For iOS versions lower than 16.1 supporting SKAdnetWork versions lower than 4.0, you can call this method and our SDK will automatically detect the iOS version and update <code>conversionValue<\/code> only.<\/li>\n<\/ul>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#2e3440ff;font-style:italic;color:#d8dee9ff\"><span style=\"border-bottom:1px solid rgba(201, 218, 248, 0.2)\">Objective-C<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>#import \"TenjinSDK.h\"\n\n@implementation TJNAppDelegate\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions\n{\n    &#91;TenjinSDK initialize:@\"&lt;SDK_KEY>\"&#93;;\n    &#91;TenjinSDK connect&#93;;\n\n    \/\/\n    \/\/ This will call &#91;SKAdNetwork updatePostbackConversionValue: &lt;Integer between 0 and 63>&#93;\n    \/\/ and also send conversion value to our servers.\n    \/\/\n    \/\/ You will need to use a value between 0-63.\n    \/\/\n    &#91;TenjinSDK updatePostbackConversionValue:&lt;Integer between 0 and 63>&#93;;\n\n    \/\/ For iOS 16.1+ (SKAN 4.0)\n    &#91;TenjinSDK updatePostbackConversionValue:&lt;Integer between 0 and 63> coarseValue:@\"medium\"&#93;;\n    &#91;TenjinSDK updatePostbackConversionValue:&lt;Integer between 0 and 63> coarseValue:@\"medium\" lockWindow:true&#93;;\n}\n\n@end<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">#<\/span><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #5E81AC\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">TenjinSDK.h<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">@<\/span><span style=\"color: #81A1C1\">implementation<\/span><span style=\"color: #D8DEE9FF\"> TJNAppDelegate<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">- <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">BOOL<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #88C0D0\">application<\/span><span style=\"color: #ECEFF4\">:(<\/span><span style=\"color: #D8DEE9FF\">UIApplication <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9\">application<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">didFinishLaunchingWithOptions<\/span><span style=\"color: #ECEFF4\">:(<\/span><span style=\"color: #8FBCBB\">NSDictionary<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9\">launchOptions<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">initialize<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">&lt;SDK_KEY&gt;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">connect<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">    <\/span><span style=\"color: #616E88\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">    <\/span><span style=\"color: #616E88\">\/\/ This will call &#91;SKAdNetwork updatePostbackConversionValue: &lt;Integer between 0 and 63&gt;&#93;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">    <\/span><span style=\"color: #616E88\">\/\/ and also send conversion value to our servers.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">    <\/span><span style=\"color: #616E88\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">    <\/span><span style=\"color: #616E88\">\/\/ You will need to use a value between 0-63.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">    <\/span><span style=\"color: #616E88\">\/\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">updatePostbackConversionValue<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #81A1C1\">&lt;<\/span><span style=\"color: #D8DEE9FF\">Integer between <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\"> and <\/span><span style=\"color: #B48EAD\">63<\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">    <\/span><span style=\"color: #616E88\">\/\/ For iOS 16.1+ (SKAN 4.0)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">updatePostbackConversionValue<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #81A1C1\">&lt;<\/span><span style=\"color: #D8DEE9FF\">Integer between <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\"> and <\/span><span style=\"color: #B48EAD\">63<\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">coarseValue<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">medium<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">updatePostbackConversionValue<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #81A1C1\">&lt;<\/span><span style=\"color: #D8DEE9FF\">Integer between <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\"> and <\/span><span style=\"color: #B48EAD\">63<\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">coarseValue<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">medium<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">lockWindow<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #81A1C1\">true<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">@<\/span><span style=\"color: #81A1C1\">end<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">SKAdNetwork and iOS 15+ Advertiser Postbacks<\/h3>\n\n\n\n<p>To specify Tenjin as the destination for your [SK Ad Network postbacks][26], do the following:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Select <code>Info.plist<\/code> in the Project navigator in Xcode.<\/li>\n\n\n\n<li>Click the Add button (+) beside a key in the property list editor and press Return.<\/li>\n\n\n\n<li>Type the key name <code>NSAdvertisingAttributionReportEndpoint<\/code>.<\/li>\n\n\n\n<li>Choose String from the pop-up menu in the Type column.<\/li>\n\n\n\n<li>Enter <code>https:\/\/tenjin-skan.com<\/code><\/li>\n<\/ol>\n\n\n\n<p>These steps are an adaption from Apple&#8217;s instructions at <a href=\"https:\/\/developer.apple.com\/documentation\/storekit\/configuring-an-advertised-app\">here<\/a>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">GDPR<\/h3>\n\n\n\n<p>As part of GDPR compliance, with Tenjin&#8217;s SDK you can opt-in, opt-out devices\/users, or select which specific device-related params to opt-in or opt-out.  <code>OptOut()<\/code> will not send any API requests to Tenjin, and we will not process any events.<\/p>\n\n\n\n<p>To opt-in\/opt-out:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#2e3440ff;font-style:italic;color:#d8dee9ff\"><span style=\"border-bottom:1px solid rgba(201, 218, 248, 0.2)\">Objective-C<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>#import \"TenjinSDK.h\"\n\n@implementation TJNAppDelegate\n\n- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions\n{\n\n  &#91;TenjinSDK initialize:@\"&lt;SDK_KEY>\"&#93;;\n\n  if (&#91;self checkOptInValue&#93;) {\n      &#91;TenjinSDK optIn&#93;;\n  }\n  else {\n      &#91;TenjinSDK optOut&#93;;\n  }\n\n  &#91;TenjinSDK connect&#93;;\n\n  \/\/All your other stuff\n  \/\/..\n}\n\n-(BOOL) checkOptInValue\n{\n  \/\/ check opt-in value\n  \/\/ return YES; \/\/ if user opted-in\n  return NO;\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">#<\/span><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #5E81AC\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">TenjinSDK.h<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">@<\/span><span style=\"color: #81A1C1\">implementation<\/span><span style=\"color: #D8DEE9FF\"> TJNAppDelegate<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">- <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">BOOL<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #88C0D0\">application<\/span><span style=\"color: #ECEFF4\">:(<\/span><span style=\"color: #D8DEE9FF\">UIApplication <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9\">application<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">didFinishLaunchingWithOptions<\/span><span style=\"color: #ECEFF4\">:(<\/span><span style=\"color: #8FBCBB\">NSDictionary<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9\">launchOptions<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">initialize<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">&lt;SDK_KEY&gt;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(&#91;<\/span><span style=\"color: #81A1C1\">self<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">checkOptInValue<\/span><span style=\"color: #ECEFF4\">&#93;)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">optIn<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">else<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">optOut<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">connect<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">  <\/span><span style=\"color: #616E88\">\/\/All your other stuff<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">  <\/span><span style=\"color: #616E88\">\/\/..<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">-<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">BOOL<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">checkOptInValue<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">  <\/span><span style=\"color: #616E88\">\/\/ check opt-in value<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">  <\/span><span style=\"color: #616E88\">\/\/ return YES; \/\/ if user opted-in<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">return<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">NO;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>To opt-in\/opt-out specific device-related parameters, you can use the <code>OptInParams()<\/code> or <code>OptOutParams()<\/code>.  <code>OptInParams()<\/code> will only send device-related parameters that are specified.  <code>OptOutParams()<\/code> will send all device-related parameters except ones that are specified.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Kindly note that we require the following parameter to properly track devices in Tenjin&#8217;s system. If the mandatory parameter is missing, the event will not be processed or recorded.\n<ul class=\"wp-block-list\">\n<li><code>developer_device_id<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>If you intend to use Google Ads, you will also need to add: <code>advertising_id<\/code>, <code>developer_device_id<\/code>, <code>platform<\/code>, <code>os_version<\/code>,<code>app_version<\/code>, <code>locale<\/code>, <code>device_model<\/code>, and <code>build_id<\/code>.<\/p>\n\n\n\n<p>If you want to only get specific device-related parameters, use <code>OptInParams()<\/code>. In example below, we will only these device-related parameters: <code>ip_address<\/code>, <code>advertising_id<\/code>, <code>developer_device_id<\/code>, and <code>limit_ad_tracking<\/code><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#2e3440ff;font-style:italic;color:#d8dee9ff\"><span style=\"border-bottom:1px solid rgba(201, 218, 248, 0.2)\">Objective-C<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&#91;TenjinSDK initialize:@\"&lt;SDK_KEY>\"&#93;;\n\nNSArray *optInParams = @&#91;@\"ip_address\", @\"advertising_id\", @\"developer_device_id\", @\"limit_ad_tracking\"&#93;;\n&#91;TenjinSDK optInParams:optInParams&#93;;\n\n&#91;TenjinSDK connect&#93;;<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">initialize<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">&lt;SDK_KEY&gt;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">NSArray<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">optInParams <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> @<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">ip_address<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">advertising_id<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">developer_device_id<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">limit_ad_tracking<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">optInParams<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\">optInParams<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">connect<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>If you want to send ALL parameters except specific device-related parameters, use <code>OptOutParams()<\/code>. In the example below, we will send ALL device-related parameters except: <code>locale<\/code>, <code>timezone<\/code>, and <code>build_id<\/code> parameters.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#2e3440ff;font-style:italic;color:#d8dee9ff\"><span style=\"border-bottom:1px solid rgba(201, 218, 248, 0.2)\">Objective-C<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&#91;TenjinSDK initialize:@\"&lt;SDK_KEY>\"&#93;;\n\nNSArray *optOutParams = @&#91;@\"country\", @\"timezone\", @\"language\"&#93;;\n&#91;TenjinSDK optOutParams:optOutParams&#93;;\n\n&#91;TenjinSDK connect&#93;;<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">initialize<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">&lt;SDK_KEY&gt;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">NSArray<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">optOutParams <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> @<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">country<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">timezone<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">language<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">optOutParams<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\">optOutParams<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">connect<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Opt in\/out using CMP<\/h3>\n\n\n\n<p>You can automatically opt in or opt out using your CMP consents (purpose 1) which are already saved in the user&#8217;s device. The method returns a boolean to let you know if it&#8217;s opted in or out.<\/p>\n\n\n\n<p><code>optInOutUsingCMP()<\/code><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#2e3440ff;font-style:italic;color:#d8dee9ff\"><span style=\"border-bottom:1px solid rgba(201, 218, 248, 0.2)\">Objective-C<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&#91;TenjinSDK initialize:@\"&lt;SDK_KEY>\"&#93;;\noptInOut = &#91;TenjinSDK optInOutUsingCMP&#93;; <\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">initialize<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">&lt;SDK_KEY&gt;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">optInOut <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">optInOutUsingCMP<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Device-Related Parameters<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Param<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td>ip_address<\/td><td>IP Address<\/td><\/tr><tr><td>advertising_id<\/td><td>Device Advertising ID<\/td><\/tr><tr><td>developer_device_id<\/td><td>ID for Vendor<\/td><\/tr><tr><td>limit_ad_tracking<\/td><td>limit ad tracking enabled<\/td><\/tr><tr><td>platform<\/td><td>platform<\/td><\/tr><tr><td>os_version<\/td><td>operating system version<\/td><\/tr><tr><td>device<\/td><td>device name<\/td><\/tr><tr><td>device_model<\/td><td>device model<\/td><\/tr><tr><td>device_model_name<\/td><td>device machine<\/td><\/tr><tr><td>device_cpu<\/td><td>device cpu name<\/td><\/tr><tr><td>os_version_release<\/td><td>operating system version<\/td><\/tr><tr><td>build_id<\/td><td>build ID<\/td><\/tr><tr><td>locale<\/td><td>device locale<\/td><\/tr><tr><td>country<\/td><td>locale country<\/td><\/tr><tr><td>timezone<\/td><td>timezone<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Purchase Events<\/h2>\n\n\n\n<p>Pass <code>(SKPaymentTransaction *) transaction<\/code> and <code>(NSData *)receipt<\/code> object, after the verification of the purchase, and then you can pass <code>SKPaymentTransactionStatePurchased<\/code> to Tenjin for the transaction which was purchased:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#2e3440ff;font-style:italic;color:#d8dee9ff\"><span style=\"border-bottom:1px solid rgba(201, 218, 248, 0.2)\">Objective-C<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\/\/Get the NSData receipt\nNSURL *receiptURL = [&#91;NSBundle mainBundle&#93; appStoreReceiptURL];\nNSData *receiptData = &#91;NSData dataWithContentsOfURL:receiptURL&#93;;\n\n\/\/Pass the transaction and the receiptData to Tenjin\n&#91;TenjinSDK transaction: transaction andReceipt: receiptData&#93;;<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #616E88\">\/\/Get the NSData receipt<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">NSURL<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">receiptURL <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">[&#91;<\/span><span style=\"color: #8FBCBB\">NSBundle<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">mainBundle<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">appStoreReceiptURL<\/span><span style=\"color: #ECEFF4\">]<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">NSData<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">receiptData <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #8FBCBB\">NSData<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">dataWithContentsOfURL<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\">receiptURL<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/Pass the transaction and the receiptData to Tenjin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">transaction<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> transaction <\/span><span style=\"color: #88C0D0\">andReceipt<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> receiptData<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">StoreKit 2 IAP<\/h2>\n\n\n\n<p>StoreKit 2 is a Swift-only API. For apps using StoreKit 2, you can extract the JWS representation and transaction details:<br><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#2e3440ff;font-style:italic;color:#d8dee9ff\"><span style=\"border-bottom:1px solid rgba(201, 218, 248, 0.2)\">Objective-C<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>import StoreKit\n\nfunc handlePurchase(_ result: VerificationResult&lt;Transaction>) async {\n    switch result {\n    case .verified(let transaction):\n        \/\/ Get the JWS representation (SK2 receipt)\n        let jwsRepresentation = transaction.jwsRepresentation\n\n        \/\/ Extract transaction details\n        let productId = transaction.productID\n        let transactionId = String(transaction.id)\n        let price = transaction.price ?? Decimal(0)\n        let currencyCode = transaction.currency?.identifier ?? \"USD\"\n\n        \/\/ Send to Tenjin\n        TenjinSDK.transaction(\n            withProductName: productId,\n            andCurrencyCode: currencyCode,\n            andQuantity: transaction.purchasedQuantity,\n            andUnitPrice: NSDecimalNumber(decimal: price),\n            andTransactionId: transactionId,\n            andBase64Receipt: jwsRepresentation\n        )\n\n        await transaction.finish()\n\n    case .unverified(_, _):\n        \/\/ Handle unverified transaction\n        break\n    }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D8DEE9FF\">import StoreKit<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">func <\/span><span style=\"color: #88C0D0\">handlePurchase<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">_ result: VerificationResult<\/span><span style=\"color: #81A1C1\">&lt;<\/span><span style=\"color: #D8DEE9FF\">Transaction<\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> async <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">switch<\/span><span style=\"color: #D8DEE9FF\"> result <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">case<\/span><span style=\"color: #D8DEE9FF\"> .<\/span><span style=\"color: #88C0D0\">verified<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">let <\/span><span style=\"color: #D8DEE9\">transaction<\/span><span style=\"color: #ECEFF4\">):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ Get the JWS representation (SK2 receipt)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        let jwsRepresentation <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">transaction<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">jwsRepresentation<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ Extract transaction details<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        let productId <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">transaction<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">productID<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        let transactionId <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">String<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">transaction.<\/span><span style=\"color: #81A1C1\">id<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        let price <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">transaction<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">price<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">??<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">Decimal<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        let currencyCode <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">transaction<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">currency<\/span><span style=\"color: #81A1C1\">?<\/span><span style=\"color: #D8DEE9FF\">.identifier <\/span><span style=\"color: #81A1C1\">??<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">USD<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ Send to Tenjin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #D8DEE9\">TenjinSDK<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">transaction<\/span><span style=\"color: #ECEFF4\">(<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            withProductName: productId<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            andCurrencyCode: currencyCode<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            andQuantity: <\/span><span style=\"color: #D8DEE9\">transaction<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">purchasedQuantity<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            andUnitPrice: <\/span><span style=\"color: #88C0D0\">NSDecimalNumber<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">decimal: price<\/span><span style=\"color: #ECEFF4\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            andTransactionId: transactionId<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            andBase64Receipt: jwsRepresentation<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        await <\/span><span style=\"color: #D8DEE9\">transaction<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">finish<\/span><span style=\"color: #ECEFF4\">()<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">case <\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">unverified<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">_<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> _<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ Handle unverified transaction<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">break<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    }<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><p class=\"has-text-color has-background has-link-color\" style=\"color:#664d03;background-color:#fff3cd\">(Flexible App Store Commission setup) Choose between 0%, 15% and 30% App Store&#8217;s revenue commission via our new setup. The steps are &#8211;<\/p><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Go to CONFIGURE &#8211;&gt; Apps<\/li>\n\n\n\n<li>Click on the app you want to change it for<\/li>\n\n\n\n<li>Under the &#8216;App Store Commission&#8217; section click &#8216;Edit&#8217;<\/li>\n\n\n\n<li>Choose 30%, 15% or 0% as your desired app store commission.<\/li>\n\n\n\n<li>Select the start date and end date (Or you can keep the end date blank if you dont want an end date)<\/li>\n\n\n\n<li>Click Save (note: the commission can be applied only to dates moving forward and not historical dates. So please set the start date from the date you make the change and forward)<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Subscription IAP<\/h2>\n\n\n\n<p><strong>IMPORTANT:<\/strong> If you have subscription IAP, you will need to add your app&#8217;s public key in the <a href=\"https:\/\/www.tenjin.io\/dashboard\/apps\" target=\"_new\"> Tenjin dashboard<\/a>. You can retrieve your iOS App-Specific Shared Secret from the <a href=\"https:\/\/itunesconnect.apple.com\/WebObjects\/iTunesConnect.woa\/ra\/ng\/app\/887212194\/addons\">iTunes Connect Console<\/a> \\&gt; Select your app \\&gt; App Information \\&gt;  App-Specific Shared Secret.<\/p>\n\n\n\n<p><strong>Kindly note that you are responsible to send a subscription transaction one time during each subscription interval (i.e., For example, for a monthly subscription, you will need to send us 1 transaction per month).<\/strong><\/p>\n\n\n\n<p>In the example timeline below, a transaction event should only be sent at the &#8220;First Charge&#8221; and &#8220;Renewal&#8221; events. During the trial period, do not send Tenjin the transaction event.<\/p>\n\n\n\n<p><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/docs-assets.developer.apple.com\/published\/6631e50f32\/110c0e3f-e0e3-4dbd-bc28-d8db4b28bd1c.png?ssl=1\"><\/p>\n\n\n\n<p>For more information on subscriptions, please see: <a href=\"https:\/\/developer.apple.com\/library\/archive\/documentation\/NetworkingInternet\/Conceptual\/StoreKitGuide\/Chapters\/Subscriptions.html\">Apple documentation on Working with Subscriptions<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Custom Events<\/h2>\n\n\n\n<p><strong>IMPORTANT: DO NOT SEND CUSTOM EVENTS BEFORE THE CONNECT\/INITIALIZATION<\/strong> event (above). The initialization must come before sending any custom events.<\/p>\n\n\n\n<p><strong>IMPORTANT: Limit custom event names to less than 80 characters. Do not exceed 500 unique custom event names.<\/strong><\/p>\n\n\n\n<p>You can also use the Tenjin SDK to pass a custom event:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>sendEventWithName: (NSString *)eventName<\/code> and<\/li>\n<\/ul>\n\n\n\n<p>You can use these to pass Tenjin custom interactions with your app to tie this to user level cost from each acquisition source that you use through Tenjin&#8217;s platform. Here are some examples of usage:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#39404f;color:#c8d0e0\">Objective-C<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\/\/send a particular event for when someone swipes on a part of your app\n&#91;TenjinSDK sendEventWithName:@\"swipe_right\"&#93;;<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #616E88\">\/\/send a particular event for when someone swipes on a part of your app<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">sendEventWithName<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #ECEFF4\">@\"<\/span><span style=\"color: #A3BE8C\">swipe_right<\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Custom events can also pass an <code>NSInteger<\/code> <code>eventValue<\/code>. Tenjin will use this <code>eventValue<\/code> as a count or sum for all custom events with the same <code>eventName<\/code>. The <code>eventValue<\/code> MUST BE AN INTEGER. If the <code>eventValue<\/code> is not an integer, we will not send the event.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#39404f;color:#c8d0e0\">Objective-C<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>\/\/send a particular event for when someone swipes and an event value on a part of your app\n&#91;TenjinSDK sendEventWithName:@\"swipe_right\" andEventValue:@\"1\"&#93;;<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #616E88\">\/\/send a particular event for when someone swipes and an event value on a part of your app<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">sendEventWithName<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #ECEFF4\">@\"<\/span><span style=\"color: #A3BE8C\">swipe_right<\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">andEventValue<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #ECEFF4\">@\"<\/span><span style=\"color: #A3BE8C\">1<\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Server-to-server integration<\/h2>\n\n\n\n<p>Tenjin offers <a href=\"https:\/\/docs.tenjin.com\/docs\/server-to-server-s2s\">server-to-server integration<\/a>. This allows you to send your install and post-install events directly from your servers to Tenjin servers without needing an SDK integration.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">App Subversion parameter for A\/B Testing (requires DataVault)<\/h2>\n\n\n\n<p>If you are running A\/B tests and want to report the differences, we can append a numeric value to your app version using the <code>appendAppSubversion<\/code> method.  For example, if your app version <code>1.0.1<\/code>, and set <code>appendAppSubversion: @8888<\/code>, it will report as <code>1.0.1.8888<\/code>.<\/p>\n\n\n\n<p>This data will appear within DataVault, where you will be able to run reports using the app subversion values.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#39404f;color:#c8d0e0\">Objective-C<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&#91;TenjinSDK initialize:@\"<SDK_KEY>\"&#93;;\n&#91;TenjinSDK appendAppSubversion:@8888&#93;;\n&#91;TenjinSDK connect&#93;;<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">initialize<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #ECEFF4\">@\"<\/span><span style=\"color: #A3BE8C\"><SDK_KEY><\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">appendAppSubversion<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\">@<\/span><span style=\"color: #B48EAD\">8888<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">connect<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Impression Level Ad Revenue Integration<\/h2>\n\n\n\n<p>Tenjin supports the ability to integrate with the Impression Level Ad Revenue (ILRD) feature from,<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>AppLovin<\/li>\n\n\n\n<li>Unity LevelPlay<\/li>\n\n\n\n<li>HyperBid<\/li>\n\n\n\n<li>AdMob<\/li>\n\n\n\n<li>TopOn<\/li>\n\n\n\n<li>CAS<\/li>\n\n\n\n<li>TradPlus<\/li>\n<\/ul>\n\n\n\n<p>This feature allows you to receive events which correspond to your ad revenue that is affected by each advertisement show to a user. Access to the integration guide is <a href=\"https:\/\/tenjin.com\/docs\/category\/ad-revenue-ad-mediation-setup\/\">here<\/a>.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">LiveOps Campaigns<\/h2>\n\n\n\n<p>Tenjin supports retrieving of user attribution information, like sourcing ad network and campaign, from the SDK. This will allow developers to collect and analyze user-level attribution data in real-time. Here are the possible use cases using Tenjin LiveOps Campaigns:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If you have your own data anlytics tool, S2S callback will allow you to tie the attribution data to your in-game data per device level.<\/li>\n\n\n\n<li>Show different app content depending on where the user comes from. For example, if user A is attributed to organic and user B is attributed to Meta and user B is likely to be more engaged with your app, then you want to show a special in-game offer after the user installs the app. If you want to discuss more specific use cases, please write to support@tenjin.com.<\/li>\n<\/ul>\n\n\n\n<p>Details on using LiveOps can be found <a href=\"https:\/\/tenjin.com\/docs\/liveops-campaigns\/\">here<\/a>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Customer User ID<\/h2>\n\n\n\n<p>You can set and get customer user id to send as a parameter on events.<\/p>\n\n\n\n<p><code>setCustomerUserId(userId: \"user_id\")<\/code> <code>getCustomerUserId()<\/code><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#2e3440ff;font-style:italic;color:#d8dee9ff\"><span style=\"border-bottom:1px solid rgba(201, 218, 248, 0.2)\">Objective-C<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&#91;TenjinSDK initialize:@\"&lt;SDK_KEY>\"&#93;;\n&#91;TenjinSDK setCustomerUserId:@\"user_id\"&#93;;\nuserId = &#91;TenjinSDK getCustomerUserId&#93;; <\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">initialize<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">&lt;SDK_KEY&gt;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">setCustomerUserId<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">user_id<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">userId <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">getCustomerUserId<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Analytics Installation ID<\/h2>\n\n\n\n<p>You can get the analytics id which is generated randomly and saved in the local storage of the device. <code>getAnalyticsInstallationId()<\/code><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#39404f;color:#c8d0e0\">Objective-C<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&#91;TenjinSDK initialize:@\"<SDK_KEY>\"&#93;;\nanalyticsId = &#91;TenjinSDK getAnalyticsInstallationId&#93;; <\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">initialize<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #ECEFF4\">@\"<\/span><span style=\"color: #A3BE8C\"><SDK_KEY><\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">analyticsId <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">getAnalyticsInstallationId<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">User Profile &#8211; LiveOps Metrics<\/h2>\n\n\n\n<p>The Tenjin SDK automatically tracks user engagement metrics to help you understand player behavior and lifetime value. These metrics are collected automatically and can be accessed programmatically.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Automatic Tracking<a href=\"https:\/\/github.com\/tenjin\/tenjin-ios-sdk?tab=readme-ov-file#automatic-tracking\"><\/a><\/h3>\n\n\n\n<p>The SDK automatically tracks:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Session metrics<\/strong>: Session count, duration, first\/last session dates<\/li>\n\n\n\n<li><strong>In-App Purchases (IAP)<\/strong>: Transaction count, revenue by currency, purchased product IDs<\/li>\n\n\n\n<li><strong>Ad Revenue (ILRD)<\/strong>: Impression-level revenue from supported ad networks<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Retrieving User Profile Data<a href=\"https:\/\/github.com\/tenjin\/tenjin-ios-sdk?tab=readme-ov-file#retrieving-user-profile-data\"><\/a><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Get Full Profile Object<a href=\"https:\/\/github.com\/tenjin\/tenjin-ios-sdk?tab=readme-ov-file#get-full-profile-object\"><\/a><\/h4>\n\n\n\n<p>Returns a&nbsp;<code>TJNUserProfileData<\/code>&nbsp;object with all metrics:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#2e3440ff;font-style:italic;color:#d8dee9ff\"><span style=\"border-bottom:1px solid rgba(201, 218, 248, 0.2)\">Objective-C<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>TJNUserProfileData *profile = &#91;TenjinSDK getUserProfile&#93;;\n\n\/\/ Session metrics\nNSInteger sessionCount = profile.sessionCount;\nlong long totalTime = profile.totalSessionTime;\nlong long avgLength = profile.averageSessionLength;\nlong long lastSession = profile.lastSessionLength;\nlong long currentSession = profile.currentSessionDuration;\nNSDate *firstSession = profile.firstSessionDate;\nNSDate *lastSession = profile.lastSessionDate;\n\n\/\/ IAP metrics\nNSInteger iapCount = profile.iapTransactionCount;\nNSDictionary *revenueByCurrency = profile.iapRevenueByCurrency;\nNSArray *productIDs = profile.purchasedProductIDsArray;\n\n\/\/ ILRD metrics\ndouble totalAdRevenue = profile.totalILRDRevenueUSD;\nNSDictionary *revenueByNetwork = profile.ilrdRevenueByNetwork;<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D8DEE9FF\">TJNUserProfileData <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">profile <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">getUserProfile<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Session metrics<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">NSInteger<\/span><span style=\"color: #D8DEE9FF\"> sessionCount <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> profile.sessionCount<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">long<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">long<\/span><span style=\"color: #D8DEE9FF\"> totalTime <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> profile.totalSessionTime<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">long<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">long<\/span><span style=\"color: #D8DEE9FF\"> avgLength <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> profile.averageSessionLength<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">long<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">long<\/span><span style=\"color: #D8DEE9FF\"> lastSession <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> profile.lastSessionLength<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">long<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">long<\/span><span style=\"color: #D8DEE9FF\"> currentSession <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> profile.currentSessionDuration<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">NSDate<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">firstSession <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> profile.firstSessionDate<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">NSDate<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">lastSession <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> profile.lastSessionDate<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ IAP metrics<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">NSInteger<\/span><span style=\"color: #D8DEE9FF\"> iapCount <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> profile.iapTransactionCount<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">NSDictionary<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">revenueByCurrency <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> profile.iapRevenueByCurrency<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">NSArray<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">productIDs <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> profile.purchasedProductIDsArray<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ ILRD metrics<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">double<\/span><span style=\"color: #D8DEE9FF\"> totalAdRevenue <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> profile.totalILRDRevenueUSD<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">NSDictionary<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">revenueByNetwork <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> profile.ilrdRevenueByNetwork<\/span><span style=\"color: #81A1C1\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><strong>Available Properties:<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Property<\/th><th>Type<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><code>sessionCount<\/code><\/td><td><code>NSInteger<\/code><\/td><td>Total number of sessions<\/td><\/tr><tr><td><code>totalSessionTime<\/code><\/td><td><code>long long<\/code><\/td><td>Total time in milliseconds<\/td><\/tr><tr><td><code>averageSessionLength<\/code><\/td><td><code>long long<\/code><\/td><td>Average session in milliseconds<\/td><\/tr><tr><td><code>lastSessionLength<\/code><\/td><td><code>long long<\/code><\/td><td>Last completed session in milliseconds<\/td><\/tr><tr><td><code>currentSessionDuration<\/code><\/td><td><code>long long<\/code><\/td><td>Current active session in milliseconds<\/td><\/tr><tr><td><code>firstSessionDate<\/code><\/td><td><code>NSDate?<\/code><\/td><td>First session date<\/td><\/tr><tr><td><code>lastSessionDate<\/code><\/td><td><code>NSDate?<\/code><\/td><td>Last completed session date<\/td><\/tr><tr><td><code>iapTransactionCount<\/code><\/td><td><code>NSInteger<\/code><\/td><td>Total IAP count<\/td><\/tr><tr><td><code>iapRevenueByCurrency<\/code><\/td><td><code>NSDictionary&lt;NSString*, NSNumber*&gt;<\/code><\/td><td>Revenue by currency code<\/td><\/tr><tr><td><code>purchasedProductIDsArray<\/code><\/td><td><code>NSArray&lt;NSString*&gt;<\/code><\/td><td>Sorted product IDs<\/td><\/tr><tr><td><code>totalILRDRevenueUSD<\/code><\/td><td><code>double<\/code><\/td><td>Total ad revenue USD<\/td><\/tr><tr><td><code>ilrdRevenueByNetwork<\/code><\/td><td><code>NSDictionary&lt;NSString*, NSNumber*&gt;<\/code><\/td><td>Ad revenue by network<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Get Profile as Dictionary<a href=\"https:\/\/github.com\/tenjin\/tenjin-ios-sdk?tab=readme-ov-file#get-profile-as-dictionary\"><\/a><\/h3>\n\n\n\n<p>Returns a dictionary with all metrics for easy serialization or display:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#2e3440ff;font-style:italic;color:#d8dee9ff\"><span style=\"border-bottom:1px solid rgba(201, 218, 248, 0.2)\">Objective-C<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>NSDictionary *profileDict = &#91;TenjinSDK getUserProfileAsDictionary&#93;;\n\n\/\/ Example usage\nNSNumber *sessionCount = profileDict&#91;@\"session_count\"&#93;;\nNSString *firstSession = profileDict&#91;@\"first_session_date\"&#93;;\nNSDictionary *iapRevenue = profileDict&#91;@\"iap_revenue_by_currency\"&#93;;\nNSArray *productIds = profileDict&#91;@\"purchased_product_ids\"&#93;;<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #8FBCBB\">NSDictionary<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">profileDict <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">getUserProfileAsDictionary<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Example usage<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">NSNumber<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">sessionCount <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> profileDict<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">session_count<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">NSString<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">firstSession <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> profileDict<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">first_session_date<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">NSDictionary<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">iapRevenue <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> profileDict<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">iap_revenue_by_currency<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #8FBCBB\">NSArray<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">productIds <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> profileDict<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">purchased_product_ids<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><strong>Dictionary Keys (Always Present):<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Key<\/th><th>Type<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><code>session_count<\/code><\/td><td><code>NSNumber<\/code><\/td><td>Total sessions<\/td><\/tr><tr><td><code>total_session_time<\/code><\/td><td><code>NSNumber<\/code><\/td><td>Total time (milliseconds)<\/td><\/tr><tr><td><code>average_session_length<\/code><\/td><td><code>NSNumber<\/code><\/td><td>Average session (milliseconds)<\/td><\/tr><tr><td><code>last_session_length<\/code><\/td><td><code>NSNumber<\/code><\/td><td>Last session (milliseconds)<\/td><\/tr><tr><td><code>iap_transaction_count<\/code><\/td><td><code>NSNumber<\/code><\/td><td>Total IAP count<\/td><\/tr><tr><td><code>total_ilrd_revenue_usd<\/code><\/td><td><code>NSNumber<\/code><\/td><td>Total ad revenue USD<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><strong>Dictionary Keys (Conditional &#8211; only if available):<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Key<\/th><th>Type<\/th><th>Description<\/th><\/tr><\/thead><tbody><tr><td><code>first_session_date<\/code><\/td><td><code>NSString<\/code><\/td><td>ISO8601 formatted date<\/td><\/tr><tr><td><code>last_session_date<\/code><\/td><td><code>NSString<\/code><\/td><td>ISO8601 formatted date<\/td><\/tr><tr><td><code>current_session_length<\/code><\/td><td><code>NSNumber<\/code><\/td><td>Active session duration (milliseconds)<\/td><\/tr><tr><td><code>iap_revenue_by_currency<\/code><\/td><td><code>NSDictionary<\/code><\/td><td>Map of currency \u2192 revenue<\/td><\/tr><tr><td><code>purchased_product_ids<\/code><\/td><td><code>NSArray<\/code><\/td><td>Sorted array of product IDs<\/td><\/tr><tr><td><code>ilrd_revenue_by_network<\/code><\/td><td><code>NSDictionary<\/code><\/td><td>Map of network \u2192 revenue<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Reset Profile<a href=\"https:\/\/github.com\/tenjin\/tenjin-ios-sdk?tab=readme-ov-file#reset-profile\"><\/a><\/h3>\n\n\n\n<p>Clears all user profile data (useful for testing or user logout):<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#2e3440ff;font-style:italic;color:#d8dee9ff\"><span style=\"border-bottom:1px solid rgba(201, 218, 248, 0.2)\">Objective-C<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&#91;TenjinSDK resetUserProfile&#93;;<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">resetUserProfile<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Session Configuration<a href=\"https:\/\/github.com\/tenjin\/tenjin-ios-sdk?tab=readme-ov-file#session-configuration\"><\/a><\/h3>\n\n\n\n<p>Customize session timeout (default 30 minutes):<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#2e3440ff;font-style:italic;color:#d8dee9ff\"><span style=\"border-bottom:1px solid rgba(201, 218, 248, 0.2)\">Objective-C<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>TJNUserProfileManager.sessionTimeoutInterval = 600; \/\/ 10 minutes<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #D8DEE9FF\">TJNUserProfileManager.sessionTimeoutInterval <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">600<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #616E88\">\/\/ 10 minutes<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Helper Methods<a href=\"https:\/\/github.com\/tenjin\/tenjin-ios-sdk?tab=readme-ov-file#helper-methods\"><\/a><\/h3>\n\n\n\n<p>Get revenue for specific currency:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#2e3440ff;font-style:italic;color:#d8dee9ff\"><span style=\"border-bottom:1px solid rgba(201, 218, 248, 0.2)\">Objective-C<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>double usdRevenue = &#91;profile getIAPRevenueForCurrency:@\"USD\"&#93;;<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">double<\/span><span style=\"color: #D8DEE9FF\"> usdRevenue <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">profile <\/span><span style=\"color: #88C0D0\">getIAPRevenueForCurrency<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">USD<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Get ILRD revenue for specific network:<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#2e3440ff;font-style:italic;color:#d8dee9ff\"><span style=\"border-bottom:1px solid rgba(201, 218, 248, 0.2)\">Objective-C<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>double appLovinRevenue = &#91;profile getILRDRevenueForNetwork:TJNAdNetworkAppLovin&#93;;<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #81A1C1\">double<\/span><span style=\"color: #D8DEE9FF\"> appLovinRevenue <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">profile <\/span><span style=\"color: #88C0D0\">getILRDRevenueForNetwork<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\">TJNAdNetworkAppLovin<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p><a href=\"https:\/\/github.com\/tenjin\/tenjin-ios-sdk?tab=readme-ov-file#user-profile---liveops-metrics\"><\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Retry\/cache events<\/h2>\n\n\n\n<p>You can enable\/disable retrying and caching all events when requests fail or users don&#8217;t have internet connection. These events will be sent after a new event has been added to the queue and user has recovered connection.<\/p>\n\n\n\n<p><code>setCacheEventSetting(true)<\/code><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#39404f;color:#c8d0e0\">Objective-C<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&#91;TenjinSDK setCacheEventSetting:true&#93;;<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">setCacheEventSetting<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #81A1C1\">true<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Google DMA Parameters<\/h2>\n\n\n\n<p><strong>If you already have a CMP integrated, Google DMA parameters will be automatically collected by the Tenjin SDK. There&#8217;s nothing to implement in the Tenjin SDK if you have a CMP integrated<\/strong>. If you want to override your CMP, or simply want to build your own consent mechanisms, you can use the following:<\/p>\n\n\n\n<p><code>setGoogleDMAParametersWithAdPersonalization(bool, bool)<\/code><\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#39404f;color:#c8d0e0\">Objective-C<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>[&#91;TeninSDK sharedInstance&#93; setGoogleDMAParametersWithAdPersonalization:adPersonalization adUserData:adUserData]; <\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">[&#91;<\/span><span style=\"color: #D8DEE9FF\">TeninSDK <\/span><span style=\"color: #88C0D0\">sharedInstance<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">setGoogleDMAParametersWithAdPersonalization<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\">adPersonalization <\/span><span style=\"color: #88C0D0\">adUserData<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\">adUserData<\/span><span style=\"color: #ECEFF4\">]<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>To explicitly manage the collection of Google DMA parameters, you have the flexibility to opt in or opt out at any time. While the default setting is to opt in, you can easily adjust your preferences using the optInGoogleDMA or optOutGoogleDMA methods, ensuring full control over your data privacy settings.<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro\" data-code-block-pro-font-family=\"Code-Pro-JetBrains-Mono\" style=\"font-size:1rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.5rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 10px 16px;margin-bottom:-2px;width:100%;text-align:left;background-color:#39404f;color:#c8d0e0\">Objective-C<\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&#91;TeninSDK optInGoogleDMA&#93;; \n&#91;TeninSDK optOutGoogleDMA&#93;; <\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TeninSDK <\/span><span style=\"color: #88C0D0\">optInGoogleDMA<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TeninSDK <\/span><span style=\"color: #88C0D0\">optOutGoogleDMA<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n","protected":false},"excerpt":{"rendered":"<p>Integrate using LLMs (AI) &#8211; Use following prompt:Add Tenjin SDK to my project using: https:\/\/raw.githubusercontent.com\/tenjin\/sdk-llm-guides\/main\/guides\/ios\/llm-guide.md Summary The Tenjin iOS SDK allows users to track events and installs in their iOS apps. To learn more about Tenjin and our product offering, please visit https:\/\/www.tenjin.com. Notes: SDK Integration Cocoapods If you use pods, add pod &#8216;TenjinSDK&#8217; to&#8230;<\/p>","protected":false},"author":25,"featured_media":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"doc_category":[153],"glossaries":[],"doc_tag":[],"class_list":["post-15446","docs","type-docs","status-publish","hentry","doc_category-add-the-tenjin-sdk"],"acf":[],"year_month":"2026-04","word_count":4020,"total_views":0,"reactions":{"happy":0,"normal":0,"sad":0},"author_info":{"name":"mariusz.bijok","author_nicename":"mariusz-bijok","author_url":"https:\/\/tenjin.com\/ja\/blog\/author\/mariusz-bijok\/"},"doc_category_info":[{"term_name":"Tenjin SDKs","term_url":"https:\/\/tenjin.com\/ja\/docs\/category\/add-the-tenjin-sdk\/"}],"doc_tag_info":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>MMP SDK iOS<\/title>\n<meta name=\"description\" content=\"Track events and installs in your iOS apps with the Tenjin SDK. Learn integration steps, privacy compliance, and support options for optimal performance.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/tenjin.com\/ja\/docs\/mmp-sdk-ios\/\" \/>\n<meta property=\"og:locale\" content=\"ja_JP\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"MMP SDK iOS\" \/>\n<meta property=\"og:description\" content=\"Track events and installs in your iOS apps with the Tenjin SDK. Learn integration steps, privacy compliance, and support options for optimal performance.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/tenjin.com\/ja\/docs\/mmp-sdk-ios\/\" \/>\n<meta property=\"og:site_name\" content=\"Tenjin\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-17T15:22:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/tenjin.com\/wp-content\/uploads\/2026\/01\/app_api_key1.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@TenjinMMP\" \/>\n<meta name=\"twitter:label1\" content=\"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593\" \/>\n\t<meta name=\"twitter:data1\" content=\"12\u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/tenjin.com\/docs\/mmp-sdk-ios\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/tenjin.com\/docs\/mmp-sdk-ios\/\"},\"author\":{\"name\":\"mariusz.bijok\",\"@id\":\"https:\/\/tenjin.com\/#\/schema\/person\/2df6a56c45e0493e93ec6d7100750b77\"},\"headline\":\"Mobile Measurement Partner (MMP) SDK for iOS\",\"datePublished\":\"2026-02-20T07:06:10+00:00\",\"dateModified\":\"2026-04-17T15:22:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/tenjin.com\/docs\/mmp-sdk-ios\/\"},\"wordCount\":2602,\"publisher\":{\"@id\":\"https:\/\/tenjin.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/tenjin.com\/docs\/mmp-sdk-ios\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/tenjin.com\/wp-content\/uploads\/2026\/01\/app_api_key1.png\",\"inLanguage\":\"ja\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/tenjin.com\/docs\/mmp-sdk-ios\/\",\"url\":\"https:\/\/tenjin.com\/docs\/mmp-sdk-ios\/\",\"name\":\"MMP SDK iOS\",\"isPartOf\":{\"@id\":\"https:\/\/tenjin.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/tenjin.com\/docs\/mmp-sdk-ios\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/tenjin.com\/docs\/mmp-sdk-ios\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/tenjin.com\/wp-content\/uploads\/2026\/01\/app_api_key1.png\",\"datePublished\":\"2026-02-20T07:06:10+00:00\",\"dateModified\":\"2026-04-17T15:22:41+00:00\",\"description\":\"Track events and installs in your iOS apps with the Tenjin SDK. Learn integration steps, privacy compliance, and support options for optimal performance.\",\"breadcrumb\":{\"@id\":\"https:\/\/tenjin.com\/docs\/mmp-sdk-ios\/#breadcrumb\"},\"inLanguage\":\"ja\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/tenjin.com\/docs\/mmp-sdk-ios\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/tenjin.com\/docs\/mmp-sdk-ios\/#primaryimage\",\"url\":\"https:\/\/tenjin.com\/wp-content\/uploads\/2026\/01\/app_api_key1.png\",\"contentUrl\":\"https:\/\/tenjin.com\/wp-content\/uploads\/2026\/01\/app_api_key1.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/tenjin.com\/docs\/mmp-sdk-ios\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/tenjin.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Docs\",\"item\":\"https:\/\/tenjin.com\/docs\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Mobile Measurement Partner (MMP) SDK for iOS\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/tenjin.com\/#website\",\"url\":\"https:\/\/tenjin.com\/\",\"name\":\"Tenjin\",\"description\":\"Growth Made Simple\",\"publisher\":{\"@id\":\"https:\/\/tenjin.com\/#organization\"},\"alternateName\":\"Tenjin - Mobile Measurement Partner\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/tenjin.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ja\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/tenjin.com\/#organization\",\"name\":\"Tenjin\",\"url\":\"https:\/\/tenjin.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/tenjin.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/tenjin.com\/wp-content\/uploads\/2026\/04\/images.webp\",\"contentUrl\":\"https:\/\/tenjin.com\/wp-content\/uploads\/2026\/04\/images.webp\",\"width\":429,\"height\":117,\"caption\":\"Tenjin\"},\"image\":{\"@id\":\"https:\/\/tenjin.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/TenjinMMP\",\"https:\/\/www.youtube.com\/@TenjinMMP\",\"https:\/\/www.linkedin.com\/company\/tenjin\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/tenjin.com\/#\/schema\/person\/2df6a56c45e0493e93ec6d7100750b77\",\"name\":\"mariusz.bijok\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ja\",\"@id\":\"https:\/\/tenjin.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ed77b923271ae0c54cf6cc2b3d031d191c17791d92b8a5f5d186753477fbbdb9?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ed77b923271ae0c54cf6cc2b3d031d191c17791d92b8a5f5d186753477fbbdb9?s=96&d=mm&r=g\",\"caption\":\"mariusz.bijok\"},\"url\":\"https:\/\/tenjin.com\/ja\/blog\/author\/mariusz-bijok\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"MMP SDK iOS","description":"Track events and installs in your iOS apps with the Tenjin SDK. Learn integration steps, privacy compliance, and support options for optimal performance.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/tenjin.com\/ja\/docs\/mmp-sdk-ios\/","og_locale":"ja_JP","og_type":"article","og_title":"MMP SDK iOS","og_description":"Track events and installs in your iOS apps with the Tenjin SDK. Learn integration steps, privacy compliance, and support options for optimal performance.","og_url":"https:\/\/tenjin.com\/ja\/docs\/mmp-sdk-ios\/","og_site_name":"Tenjin","article_modified_time":"2026-04-17T15:22:41+00:00","og_image":[{"url":"https:\/\/tenjin.com\/wp-content\/uploads\/2026\/01\/app_api_key1.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","twitter_site":"@TenjinMMP","twitter_misc":{"\u63a8\u5b9a\u8aad\u307f\u53d6\u308a\u6642\u9593":"12\u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/tenjin.com\/docs\/mmp-sdk-ios\/#article","isPartOf":{"@id":"https:\/\/tenjin.com\/docs\/mmp-sdk-ios\/"},"author":{"name":"mariusz.bijok","@id":"https:\/\/tenjin.com\/#\/schema\/person\/2df6a56c45e0493e93ec6d7100750b77"},"headline":"Mobile Measurement Partner (MMP) SDK for iOS","datePublished":"2026-02-20T07:06:10+00:00","dateModified":"2026-04-17T15:22:41+00:00","mainEntityOfPage":{"@id":"https:\/\/tenjin.com\/docs\/mmp-sdk-ios\/"},"wordCount":2602,"publisher":{"@id":"https:\/\/tenjin.com\/#organization"},"image":{"@id":"https:\/\/tenjin.com\/docs\/mmp-sdk-ios\/#primaryimage"},"thumbnailUrl":"https:\/\/tenjin.com\/wp-content\/uploads\/2026\/01\/app_api_key1.png","inLanguage":"ja"},{"@type":"WebPage","@id":"https:\/\/tenjin.com\/docs\/mmp-sdk-ios\/","url":"https:\/\/tenjin.com\/docs\/mmp-sdk-ios\/","name":"MMP SDK iOS","isPartOf":{"@id":"https:\/\/tenjin.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/tenjin.com\/docs\/mmp-sdk-ios\/#primaryimage"},"image":{"@id":"https:\/\/tenjin.com\/docs\/mmp-sdk-ios\/#primaryimage"},"thumbnailUrl":"https:\/\/tenjin.com\/wp-content\/uploads\/2026\/01\/app_api_key1.png","datePublished":"2026-02-20T07:06:10+00:00","dateModified":"2026-04-17T15:22:41+00:00","description":"Track events and installs in your iOS apps with the Tenjin SDK. Learn integration steps, privacy compliance, and support options for optimal performance.","breadcrumb":{"@id":"https:\/\/tenjin.com\/docs\/mmp-sdk-ios\/#breadcrumb"},"inLanguage":"ja","potentialAction":[{"@type":"ReadAction","target":["https:\/\/tenjin.com\/docs\/mmp-sdk-ios\/"]}]},{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/tenjin.com\/docs\/mmp-sdk-ios\/#primaryimage","url":"https:\/\/tenjin.com\/wp-content\/uploads\/2026\/01\/app_api_key1.png","contentUrl":"https:\/\/tenjin.com\/wp-content\/uploads\/2026\/01\/app_api_key1.png"},{"@type":"BreadcrumbList","@id":"https:\/\/tenjin.com\/docs\/mmp-sdk-ios\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/tenjin.com\/"},{"@type":"ListItem","position":2,"name":"Docs","item":"https:\/\/tenjin.com\/docs\/"},{"@type":"ListItem","position":3,"name":"Mobile Measurement Partner (MMP) SDK for iOS"}]},{"@type":"WebSite","@id":"https:\/\/tenjin.com\/#website","url":"https:\/\/tenjin.com\/","name":"Tenjin","description":"Growth Made Simple","publisher":{"@id":"https:\/\/tenjin.com\/#organization"},"alternateName":"Tenjin - Mobile Measurement Partner","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/tenjin.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ja"},{"@type":"Organization","@id":"https:\/\/tenjin.com\/#organization","name":"Tenjin","url":"https:\/\/tenjin.com\/","logo":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/tenjin.com\/#\/schema\/logo\/image\/","url":"https:\/\/tenjin.com\/wp-content\/uploads\/2026\/04\/images.webp","contentUrl":"https:\/\/tenjin.com\/wp-content\/uploads\/2026\/04\/images.webp","width":429,"height":117,"caption":"Tenjin"},"image":{"@id":"https:\/\/tenjin.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/TenjinMMP","https:\/\/www.youtube.com\/@TenjinMMP","https:\/\/www.linkedin.com\/company\/tenjin"]},{"@type":"Person","@id":"https:\/\/tenjin.com\/#\/schema\/person\/2df6a56c45e0493e93ec6d7100750b77","name":"mariusz.bijok","image":{"@type":"ImageObject","inLanguage":"ja","@id":"https:\/\/tenjin.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ed77b923271ae0c54cf6cc2b3d031d191c17791d92b8a5f5d186753477fbbdb9?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ed77b923271ae0c54cf6cc2b3d031d191c17791d92b8a5f5d186753477fbbdb9?s=96&d=mm&r=g","caption":"mariusz.bijok"},"url":"https:\/\/tenjin.com\/ja\/blog\/author\/mariusz-bijok\/"}]}},"knowledge_base_info":[],"knowledge_base_slug":[],"_links":{"self":[{"href":"https:\/\/tenjin.com\/ja\/wp-json\/wp\/v2\/docs\/15446","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tenjin.com\/ja\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/tenjin.com\/ja\/wp-json\/wp\/v2\/types\/docs"}],"author":[{"embeddable":true,"href":"https:\/\/tenjin.com\/ja\/wp-json\/wp\/v2\/users\/25"}],"replies":[{"embeddable":true,"href":"https:\/\/tenjin.com\/ja\/wp-json\/wp\/v2\/comments?post=15446"}],"version-history":[{"count":29,"href":"https:\/\/tenjin.com\/ja\/wp-json\/wp\/v2\/docs\/15446\/revisions"}],"predecessor-version":[{"id":17474,"href":"https:\/\/tenjin.com\/ja\/wp-json\/wp\/v2\/docs\/15446\/revisions\/17474"}],"wp:attachment":[{"href":"https:\/\/tenjin.com\/ja\/wp-json\/wp\/v2\/media?parent=15446"}],"wp:term":[{"taxonomy":"doc_category","embeddable":true,"href":"https:\/\/tenjin.com\/ja\/wp-json\/wp\/v2\/doc_category?post=15446"},{"taxonomy":"glossaries","embeddable":true,"href":"https:\/\/tenjin.com\/ja\/wp-json\/wp\/v2\/glossaries?post=15446"},{"taxonomy":"doc_tag","embeddable":true,"href":"https:\/\/tenjin.com\/ja\/wp-json\/wp\/v2\/doc_tag?post=15446"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}