{"id":15428,"date":"2026-02-20T07:06:10","date_gmt":"2026-02-20T07:06:10","guid":{"rendered":"http:\/\/mariusz.bijok"},"modified":"2026-04-20T08:31:59","modified_gmt":"2026-04-20T08:31:59","password":"","slug":"mmp-unity-sdk","status":"publish","type":"docs","link":"https:\/\/tenjin.com\/zh\/docs\/mmp-unity-sdk\/","title":{"rendered":"Unity\u7684MMP SDK"},"content":{"rendered":"\n<p class=\"has-info-bg-background-color has-background\"><strong>Integrate using LLMs (AI) &#8211; Use following prompt:<\/strong><br>Add Tenjin SDK to my project using: <a href=\"https:\/\/raw.githubusercontent.com\/tenjin\/sdk-llm-guides\/main\/guides\/unity\/llm-guide.md\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/raw.githubusercontent.com\/tenjin\/sdk-llm-guides\/main\/guides\/unity\/llm-guide.md<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Summary<\/h2>\n\n\n\n<p>The below documentation describes the Unity SDK for Tenjin. 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-unity-sdk\/blob\/master\/RELEASE_NOTES.md\" target=\"_new\">Release Notes<\/a> to see detailed version history of changes.<\/li>\n\n\n\n<li>Tenjin Unity SDK supports both iOS and Android.\n<\/li>\n\n\n\n<li>Review the iOS and Android documentations and apply the proper platform settings to your builds. (<a href=\"https:\/\/tenjin.com\/docs\/mmp-sdk-ios\">iOS<\/a>, <a href=\"https:\/\/tenjin.com\/docs\/mmp-sdk-android\">Android<\/a>)<\/li>\n\n\n\n<li>For any issues or support, please contact: support@tenjin.com.<\/li>\n<\/ul>\n\n\n\n<p><p class=\"has-text-color has-background has-link-color\" style=\"color:#055160;background-color:#cff4fc\">If you are using Unity SDK v1.12.29 or lower, please follow <a href=\"https:\/\/docs.google.com\/document\/d\/1AXn_IJXc4z_C-0Dzu7r8stOPFchxd3gCfQiO6tscdFI\/edit?usp=sharing\">these<\/a> steps before completing the SDK integration.<\/p><\/p>\n\n\n\n<p><p class=\"has-text-color has-background has-link-color\" style=\"color:#055160;background-color:#cff4fc\">To upgrade to v.1.12.30 or higher from lower versions, please ensure to remove the Tenjin binaries before installing the latest Unity version.<\/p><\/p>\n\n\n\n<p><p class=\"has-text-color has-background has-link-color\" style=\"color:#664d03;background-color:#fff3cd\">If you get this error when compiling on iOS: <code>Library not loaded: @rpath\/TenjinSDK.framework\/TenjinSDK<\/code> you need to go to &#8220;Frameworks, Libraries and Embedded Content&#8221; and add TenjinSDK, then select &#8216;Embed &amp; Sign&#8217;<\/p><\/p>\n\n\n\n<p><p class=\"has-text-color has-background has-link-color\" style=\"color:#664d03;background-color:#fff3cd\">If you have <code>libTenjinSDK.a<\/code> and\/or <code>libTenjinSDKUniversal.a<\/code> from older Tenjin SDK versions, please delete them and run <code>pod install<\/code> to integrate it on iOS<\/p><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Unity Package Manager (UPM)<\/h2>\n\n\n\n<p>To install a UPM package from a Git URL:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Open the Package Manager window, if it&#8217;s not already open.<\/li>\n\n\n\n<li>Open the Add (+) menu in the Package Manager&#8217;s toolbar.<\/li>\n\n\n\n<li>Select&nbsp;<strong>Install package from git URL<\/strong>&nbsp;from the install menu. A text box and an Install button appear.<\/li>\n\n\n\n<li>Enter the following valid Git URL in the text box (you must append\u00a0<code>#<\/code>\u00a0followed by the version tag):\u00a0<code>https:\/\/github.com\/tenjin\/tenjin-unity-sdk.git#1.16.5<\/code><\/li>\n\n\n\n<li>Click&nbsp;<strong>Install<\/strong>.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Manual Installation (.unitypackage)<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Download the latest Unity SDK from <a href=\"https:\/\/github.com\/tenjin\/tenjin-unity-sdk\/releases\" target=\"_new\">here.<\/a><\/li>\n\n\n\n<li>Import the <code>TenjinUnityPackage.unitypackage<\/code> into your project: <code>Assets -&gt; Import Package<\/code>.<\/li>\n<\/ol>\n\n\n\n<h4 class=\"wp-block-heading\">Important Note for Android<a href=\"https:\/\/github.com\/tenjin\/tenjin-unity-sdk?tab=readme-ov-file#important-note-for-android\"><\/a><\/h4>\n\n\n\n<p>To ensure Tenjin works seamlessly with the latest features and fixes, please make sure your Maven (Gradle) dependencies are up to date, as we distribute our Tenjin Android SDK through Maven. We&#8217;ve noticed some developers still using outdated versions, which might cause issues.<\/p>\n\n\n\n<p>If you build through Android Studio, please make sure to run Gradle sync to update the dependencies.<\/p>\n\n\n\n<p>If you don&#8217;t use Android Studio, please update your dependencies in Unity by following these steps:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Open Unity.<\/li>\n\n\n\n<li>Navigate to Assets &gt; External Dependency Manager &gt; Android Resolver.<\/li>\n\n\n\n<li>Select Force Resolve to update your Gradle dependencies to the latest versions.<\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Google Play<\/h3>\n\n\n\n<p>By default, <b>unspecified<\/b> is the default App Store. Update the app store value to <b>googleplay<\/b>, if you distribute your app on Google Play Store.<\/p>\n\n\n\n<p>Set your App Store Type value to <code>googleplay<\/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\">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>BaseTenjin instance = Tenjin.getInstance(\"<SDK_KEY>\");\ninstance.SetAppStoreType(AppStoreType.googleplay);<\/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\">BaseTenjin instance <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Tenjin<\/span><span style=\"color: #ECEFF4\">.<\/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 style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">SetAppStoreType<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">AppStoreType<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">googleplay<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>The Tenjin SDK requires the following permissions:<\/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)\">XML<\/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>&lt;uses-permission android:name=\"android.permission.INTERNET\" \/>\n&lt;uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" \/> &lt;!-- Required to get network connectivity (i.e. wifi vs. mobile) --><\/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\">&lt;uses-permission<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">android<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #D8DEE9FF\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">android.permission.INTERNET<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">\/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">&lt;uses-permission<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">android<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #D8DEE9FF\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">android.permission.ACCESS_NETWORK_STATE<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">\/&gt;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #616E88\">&lt;!-- Required to get network connectivity (i.e. wifi vs. mobile) --&gt;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Google Play Services requires all API level 32 (Android 13) apps using the advertising_id(Android Advertising ID (AAID)) to declare the Google Play Services AD_ID permission (shown below) in their manifest file. You are required to update the tenjin-android-sdk to version 1.12.8 in order to use the below permission.<\/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)\">XML<\/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>&lt;uses-permission android:name=\"com.google.android.gms.permission.AD_ID\"\/><\/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\">&lt;uses-permission<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">android<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #D8DEE9FF\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">com.google.android.gms.permission.AD_ID<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">\/&gt;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Android Advertising ID (AAID) and Install Referrer<\/h3>\n\n\n\n<p>Add <a href=\"https:\/\/developers.google.com\/android\/guides\/setup#list-dependencies\" target=\"_new\">Android Advertising ID (AAID)<\/a> and <a href=\"https:\/\/developer.android.com\/google\/play\/installreferrer\/library\" target=\"_new\">Install Referrer<\/a> libraries, add it to your build.gradle 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: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\">Java<\/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>dependencies {\n  implementation 'com.google.android.gms:play-services-ads-identifier:{version}'\n  implementation 'com.android.installreferrer:installreferrer:{version}'\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\">dependencies <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  implementation <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">com.google.android.gms:play-services-ads-identifier:{version}<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  implementation <\/span><span style=\"color: #ECEFF4\">&#39;<\/span><span style=\"color: #A3BE8C\">com.android.installreferrer:installreferrer:{version}<\/span><span style=\"color: #ECEFF4\">&#39;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>To be able to collect <a href=\"https:\/\/developers.facebook.com\/docs\/app-ads\/meta-install-referrer\/\">Meta&#8217;s Install Referrer,<\/a> add these queries to your Android Manifest: <\/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)\">XML<\/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>&lt;queries>\n  &lt;package android:name=\"com.facebook.katana\" \/>\n&lt;\/queries>\n\n&lt;queries>\n  &lt;package android:name=\"com.instagram.android\" \/>\n&lt;\/queries><\/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\">&lt;queries&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">&lt;package<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">android<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #D8DEE9FF\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">com.facebook.katana<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">\/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">&lt;\/queries&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">&lt;queries&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">&lt;package<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">android<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #D8DEE9FF\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">com.instagram.android<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">\/&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">&lt;\/queries&gt;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>Next, add the following to your strings.xml file (you can create this template file for storing the the string value based on <a href=\"https:\/\/docs.google.com\/document\/d\/178m9h_prG6aKhGk0QhCFbc3l-p98Ni3fitf6fk_b4v0\/edit?tab=t.0\">this<\/a> guide):<\/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)\">XML<\/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>&lt;string name=\"facebook_app_id\" translatable=\"false\">YOUR_META_APP_ID&lt;\/string><\/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\">&lt;string<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #D8DEE9FF\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">facebook_app_id<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">translatable<\/span><span style=\"color: #D8DEE9FF\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">false<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #D8DEE9FF\">YOUR_META_APP_ID<\/span><span style=\"color: #81A1C1\">&lt;\/string&gt;<\/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\">Amazon store<\/h3>\n\n\n\n<p>By default, <b>unspecified<\/b> is the default App Store. Update the app store value to <b>amazon<\/b>, if you distribute your app on Amazon store.<\/p>\n\n\n\n<p>Set your App Store Type value to <code>amazon<\/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\">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>BaseTenjin instance = Tenjin.getInstance(\"<SDK_KEY>\");\ninstance.SetAppStoreType(AppStoreType.amazon);<\/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\">BaseTenjin instance <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Tenjin<\/span><span style=\"color: #ECEFF4\">.<\/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 style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">SetAppStoreType<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">AppStoreType<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">amazon<\/span><span style=\"color: #ECEFF4\">)<\/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\">OAID and other Android App Stores<\/h3>\n\n\n\n<p>Tenjin supports promoting your app on other Android App Stores using the Android OAID. We have the following requirements for integrating OAID libraries. <strong>If you plan to release your app outside of Google Play, make sure to implement these OAID libraries.<\/strong><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">MSA OAID<\/h3>\n\n\n\n<p>MSA OAID is an advertising ID for devices manufactured in China that the MSA (Mobile Security Alliance) provides. For integration with the <a href=\"http:\/\/www.msa-alliance.cn\/col.jsp?id=120\" target=\"_new\">MSA library<\/a>, download the following <a href=\"https:\/\/github.com\/tenjin\/tenjin-unity-sdk\/blob\/master\/msa-oaid\/oaid_sdk_1.0.25.aar\" target=\"_new\">oaid\\_sdk\\_1.0.25.aar<\/a>.<\/p>\n\n\n\n<p>Place the <code>oaid_sdk_1.0.25.aar<\/code> file in your project&#8217;s Android libs directory: <code>\/Assets\/Plugins\/Android<\/code><\/p>\n\n\n\n<p>Set your App Store Type value to <code>other<\/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\">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>BaseTenjin instance = Tenjin.getInstance(\"<SDK_KEY>\");\ninstance.SetAppStoreType(AppStoreType.other);<\/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\">BaseTenjin instance <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Tenjin<\/span><span style=\"color: #ECEFF4\">.<\/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 style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">SetAppStoreType<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">AppStoreType<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">other<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Huawei OAID<\/h3>\n\n\n\n<p>For outside of China, you can collect OAID using the library provided by Huawei. For integration with the <a href=\"https:\/\/developer.huawei.com\/consumer\/en\/codelab\/HMSAdsOAID\/index.html#3\" target=\"_new\">Huawei OAID library<\/a>, download the following Huawei AAR file: <a href=\"https:\/\/github.com\/tenjin\/tenjin-unity-sdk\/blob\/master\/huawei\/huawei-ads-identifier.aar\" target=\"_new\">huawei-ads-identifier.aar<\/a>. If your app is in the <a href=\"https:\/\/appgallery.huawei.com\/\" target=\"_new\">Huawei App Gallery<\/a>, download and add the Huawei Install Referrer file: <a href=\"https:\/\/github.com\/tenjin\/tenjin-unity-sdk\/blob\/master\/huawei\/huawei-ads-installreferrer.aar\" target=\"_new\">huawei-ads-installreferrer.aar<\/a>.<\/p>\n\n\n\n<p>Place the Huawei files in your project&#8217;s Android libs directory: <code>\/Assets\/Plugins\/Android<\/code><\/p>\n\n\n\n<p>Set your App Store Type value to <code>other<\/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\">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>BaseTenjin instance = Tenjin.getInstance(\"<SDK_KEY>\");\ninstance.SetAppStoreType(AppStoreType.other);<\/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\">BaseTenjin instance <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Tenjin<\/span><span style=\"color: #ECEFF4\">.<\/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 style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">SetAppStoreType<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">AppStoreType<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">other<\/span><span style=\"color: #ECEFF4\">)<\/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\">Proguard Settings<\/h3>\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\">Java<\/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>-keep class com.tenjin.** { *; }\n-keep public class com.google.android.gms.ads.identifier.** { *; }\n-keep public class com.google.android.gms.common.** { *; }\n-keep public class com.android.installreferrer.** { *; }\n-keep class * extends java.util.ListResourceBundle {\n    protected java.lang.Object[][] getContents();\n}\n-keepattributes *Annotation*<\/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\">-keep <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">com<\/span><span style=\"color: #D8DEE9FF\">.tenjin.** <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">-keep <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">com<\/span><span style=\"color: #D8DEE9FF\">.google.android.gms.ads.identifier.** <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">-keep <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">com<\/span><span style=\"color: #D8DEE9FF\">.google.android.gms.common.** <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">-keep <\/span><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">com<\/span><span style=\"color: #D8DEE9FF\">.android.installreferrer.** <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\">keep class <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\"> extends <\/span><span style=\"color: #D8DEE9\">java<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">util<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">ListResourceBundle<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">protected<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">java<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">lang<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">Object<\/span><span style=\"color: #ECEFF4\">[][]<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">getContents<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\">keepattributes <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">Annotation<\/span><span style=\"color: #81A1C1\">*<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>If you are using Huawei libraries, you can to use these 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\">Java<\/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>-keep class com.huawei.hms.ads.** { *; }\n-keep interface com.huawei.hms.ads.** { *; }<\/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\">-keep <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">com<\/span><span style=\"color: #D8DEE9FF\">.huawei.hms.ads.** <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">-keep <\/span><span style=\"color: #81A1C1\">interface<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">com<\/span><span style=\"color: #D8DEE9FF\">.huawei.hms.ads.** <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><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\">App Initialization<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\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=\"2\" class=\"wp-block-list\">\n<li>In your project&#8217;s first <code>Start()<\/code> method, add the following line of code. Also add to <code>OnApplicationPause()<\/code> if you want to send sessions data when a user resumes using the app from the background.<\/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\">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>using UnityEngine;\nusing System.Collections;\npublic class TenjinExampleScript : MonoBehaviour {\n  void Start() {\n    TenjinConnect();\n  }\n  void OnApplicationPause(bool pauseStatus) {\n    if (!pauseStatus) {\n      TenjinConnect();\n    }\n  }\n  public void TenjinConnect() {\n    BaseTenjin instance = Tenjin.getInstance(\"<SDK_KEY>\");\n    \/\/ Sends install\/open event to Tenjin\n    instance.Connect();\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: #81A1C1\">using<\/span><span style=\"color: #D8DEE9FF\"> UnityEngine<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">using<\/span><span style=\"color: #D8DEE9FF\"> System<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">Collections<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">TenjinExampleScript<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> MonoBehaviour <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">Start<\/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: #88C0D0\">TenjinConnect<\/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>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">OnApplicationPause<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">bool<\/span><span style=\"color: #D8DEE9FF\"> pauseStatus<\/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: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">!<\/span><span style=\"color: #D8DEE9\">pauseStatus<\/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: #88C0D0\">TenjinConnect<\/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>\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: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">TenjinConnect<\/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\">    BaseTenjin instance <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Tenjin<\/span><span style=\"color: #ECEFF4\">.<\/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 style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">    <\/span><span style=\"color: #616E88\">\/\/ Sends install\/open event to Tenjin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Connect<\/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>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><strong>NOTE:<\/strong> Please ensure to implement this code on every Start() and OnApplicationPause(), not only on the first app open of the app.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">App Store<\/h3>\n\n\n\n<p>We support three app store options,<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>googleplay<\/li>\n\n\n\n<li>amazon<\/li>\n\n\n\n<li>other<\/li>\n<\/ol>\n\n\n\n<p>By default, <b>unspecified<\/b> is the default App Store. If you are publishing in a specific App Store, update the app store value to the appropriate app store value. The app store value <b>other<\/b> is used for Huawei AppGallery and other app stores:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><code>AndroidManifest.xml<\/code>:<\/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)\">XML<\/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>&lt;meta-data\n    android:name=\"TENJIN_APP_STORE\"\n    android:value=\"{{SET_APP_STORE_TYPE_VALUE}}\" \/><\/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\">&lt;meta-data<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">android<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #8FBCBB\">name<\/span><span style=\"color: #D8DEE9FF\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">TENJIN_APP_STORE<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">android<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #8FBCBB\">value<\/span><span style=\"color: #D8DEE9FF\">=<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">{{SET_APP_STORE_TYPE_VALUE}}<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">\/&gt;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><code>SetAppStoreType()<\/code>:<\/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\">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>BaseTenjin instance = Tenjin.getInstance(\"<SDK_KEY>\");\ninstance.SetAppStoreType(AppStoreType.{{SET_APP_STORE_TYPE_VALUE}});<\/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\">BaseTenjin instance <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Tenjin<\/span><span style=\"color: #ECEFF4\">.<\/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 style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">SetAppStoreType<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">AppStoreType<\/span><span style=\"color: #D8DEE9FF\">.<\/span><span style=\"color: #ECEFF4\">{{<\/span><span style=\"color: #D8DEE9\">SET_APP_STORE_TYPE_VALUE<\/span><span style=\"color: #ECEFF4\">}})<\/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\">ATTrackingManager (iOS)<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>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.<\/li>\n\n\n\n<li>If the device doesn&#8217;t accept tracking permission, IDFA will become zero. If the device accepts tracking permission, the <code>Connect()<\/code> method will send the IDFA to our servers.<\/li>\n\n\n\n<li>You can also still call Tenjin <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.<\/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)\">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>using UnityEngine;\nusing System.Collections;\nusing UnityEngine.iOS;\n\npublic class TenjinExampleScript : MonoBehaviour {\n\n    void Start() {\n        TenjinConnect();\n    }\n\n    void OnApplicationPause(bool pauseStatus) {\n        if (!pauseStatus) {\n            TenjinConnect();\n        }\n    }\n\n    public void TenjinConnect() {\n        BaseTenjin instance = Tenjin.getInstance(\"SDK_KEY\");\n\n        #if UNITY_IOS\n        if (new Version(Device.systemVersion).CompareTo(new Version(\"14.0\")) >= 0) {\n            \/\/ Tenjin wrapper for requestTrackingAuthorization\n            instance.RequestTrackingAuthorizationWithCompletionHandler((status) => {\n                Debug.Log(\"===> App Tracking Transparency Authorization Status: \" + status);\n                \/\/ Sends install\/open event to Tenjin\n                instance.Connect();\n            });\n        }\n        else {\n            instance.Connect();\n        }\n        #elif UNITY_ANDROID\n        \/\/ Sends install\/open event to Tenjin\n        instance.Connect();\n        #endif\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: #81A1C1\">using<\/span><span style=\"color: #D8DEE9FF\"> UnityEngine<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">using<\/span><span style=\"color: #D8DEE9FF\"> System<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">Collections<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">using<\/span><span style=\"color: #D8DEE9FF\"> UnityEngine<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">iOS<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">TenjinExampleScript<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> MonoBehaviour <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">Start<\/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: #88C0D0\">TenjinConnect<\/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>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">OnApplicationPause<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">bool<\/span><span style=\"color: #D8DEE9FF\"> pauseStatus<\/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: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">!<\/span><span style=\"color: #D8DEE9\">pauseStatus<\/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: #88C0D0\">TenjinConnect<\/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>\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: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">TenjinConnect<\/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\">        BaseTenjin instance <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Tenjin<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">getInstance<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">SDK_KEY<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #5E81AC\">        <\/span><span style=\"color: #ECEFF4\">#<\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #5E81AC\"> UNITY_IOS<\/span><\/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: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> Version<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">Device<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">systemVersion<\/span><span style=\"color: #ECEFF4\">).<\/span><span style=\"color: #88C0D0\">CompareTo<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> Version<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">14.0<\/span><span style=\"color: #ECEFF4\">&quot;<\/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: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">)<\/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\">\/\/ Tenjin wrapper for requestTrackingAuthorization<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">RequestTrackingAuthorizationWithCompletionHandler<\/span><span style=\"color: #ECEFF4\">((<\/span><span style=\"color: #D8DEE9FF\">status<\/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: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #D8DEE9\">Debug<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Log<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">===&gt; App Tracking Transparency Authorization Status: <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">status<\/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\">\/\/ Sends install\/open event to Tenjin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                <\/span><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Connect<\/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: #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: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Connect<\/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>\n<span class=\"line\"><span style=\"color: #5E81AC\">        <\/span><span style=\"color: #ECEFF4\">#<\/span><span style=\"color: #81A1C1\">elif<\/span><span style=\"color: #5E81AC\"> UNITY_ANDROID<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ Sends install\/open event to Tenjin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Connect<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #5E81AC\">        <\/span><span style=\"color: #ECEFF4\">#<\/span><span style=\"color: #81A1C1\">endif<\/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 <a href=\"https:\/\/developer.apple.com\/app-store\/user-privacy-and-data-use\/\">app store guidelines<\/a> 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 Values<\/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> 6 bit value should correspond to the in-app event and shouldn&#8217;t be entered as binary representation but 0-63 integer. Our server will reject any invalid values.<\/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)\">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>using UnityEngine;\nusing System.Collections;\n\npublic class TenjinExampleScript : MonoBehaviour {\n\n    void Start() {\n        TenjinConnect();\n    }\n\n    void OnApplicationPause(bool pauseStatus) {\n        if (!pauseStatus) {\n            TenjinConnect();\n        }\n    }\n\n    public void TenjinConnect() {\n        BaseTenjin instance = Tenjin.getInstance(\"SDK_KEY\");\n\n        #if UNITY_IOS\n        \/\/ Sends install\/open event to Tenjin\n        instance.Connect();\n\n        \/\/ Sets SKAdNetwork Conversion Value\n        \/\/ You will need to use a value between 0-63\n        instance.updatePostbackConversionValue(&lt;Integer between 0 and 63>);\n\n        \/\/ For iOS 16.1+ (SKAN 4.0)\n        instance.updatePostbackConversionValue(&lt;Integer between 0 and 63>, \"medium\");\n        instance.updatePostbackConversionValue(&lt;Integer between 0 and 63>, \"medium\", true);\n        #elif UNITY_ANDROID\n        \/\/ Sends install\/open event to Tenjin\n        instance.Connect();\n        #endif\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: #81A1C1\">using<\/span><span style=\"color: #D8DEE9FF\"> UnityEngine<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">using<\/span><span style=\"color: #D8DEE9FF\"> System<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9FF\">Collections<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">class<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">TenjinExampleScript<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> MonoBehaviour <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">Start<\/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: #88C0D0\">TenjinConnect<\/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>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">OnApplicationPause<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">bool<\/span><span style=\"color: #D8DEE9FF\"> pauseStatus<\/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: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">!<\/span><span style=\"color: #D8DEE9\">pauseStatus<\/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: #88C0D0\">TenjinConnect<\/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>\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: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">TenjinConnect<\/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\">        BaseTenjin instance <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Tenjin<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">getInstance<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">SDK_KEY<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #5E81AC\">        <\/span><span style=\"color: #ECEFF4\">#<\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #5E81AC\"> UNITY_IOS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ Sends install\/open event to Tenjin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Connect<\/span><span style=\"color: #ECEFF4\">()<\/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\">\/\/ Sets SKAdNetwork Conversion Value<\/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: #D8DEE9FF\">        <\/span><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">updatePostbackConversionValue<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">&lt;<\/span><span style=\"color: #D8DEE9\">Integer<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">between<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">and<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">63<\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #ECEFF4\">)<\/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: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">updatePostbackConversionValue<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">&lt;<\/span><span style=\"color: #D8DEE9\">Integer<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">between<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">and<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">63<\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">medium<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">updatePostbackConversionValue<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">&lt;<\/span><span style=\"color: #D8DEE9\">Integer<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">between<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">and<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">63<\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">medium<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">true<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #5E81AC\">        <\/span><span style=\"color: #ECEFF4\">#<\/span><span style=\"color: #81A1C1\">elif<\/span><span style=\"color: #5E81AC\"> UNITY_ANDROID<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ Sends install\/open event to Tenjin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Connect<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #5E81AC\">        <\/span><span style=\"color: #ECEFF4\">#<\/span><span style=\"color: #81A1C1\">endif<\/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\">SKAdNetwork and iOS 15+ Advertiser Postbacks<\/h3>\n\n\n\n<p>To specify Tenjin as the destination for your SK Ad Network <a href=\"https:\/\/developer.apple.com\/documentation\/storekit\/receiving-ad-attributions-and-postbacks\">postbacks<\/a>, 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 adapted from Apple&#8217;s instructions at <a href=\"https:\/\/developer.apple.com\/documentation\/storekit\/skadnetwork\/configuring_an_advertised_app\">https:\/\/developer.apple.com\/documentation\/storekit\/skadnetwork\/configuring_an_advertised_app<\/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: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\">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>void Start () {\n  BaseTenjin instance = Tenjin.getInstance(\"SDK_KEY\");\n  boolean userOptIn = CheckOptInValue();\n  if (userOptIn) {\n    instance.OptIn();\n  }\n  else {\n    instance.OptOut();\n  }\n  instance.Connect();\n}\nboolean CheckOptInValue()\n{\n  \/\/ check opt-in value\n  \/\/ return true; \/\/ if user opted-in\n  return false;\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\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">Start<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  BaseTenjin instance <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Tenjin<\/span><span style=\"color: #ECEFF4\">.<\/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 style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  boolean userOptIn <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">CheckOptInValue<\/span><span style=\"color: #ECEFF4\">()<\/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: #D8DEE9\">userOptIn<\/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: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">OptIn<\/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>\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: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">OptOut<\/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>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Connect<\/span><span style=\"color: #ECEFF4\">()<\/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: #D8DEE9FF\">boolean <\/span><span style=\"color: #88C0D0\">CheckOptInValue<\/span><span style=\"color: #ECEFF4\">()<\/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 true; \/\/ 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\">false;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<ul class=\"wp-block-list\">\n<li>To opt-in\/opt-out specific device-related parameters, you can use the <code>OptInParams()<\/code> or <code>OptOutParams()<\/code>.<\/li>\n\n\n\n<li><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.<\/li>\n\n\n\n<li>Kindly note that we require the following parameters to properly track devices in Tenjin&#8217;s system. If one of these mandatory parameters is missing, the event will not be processed or recorded.<\/li>\n\n\n\n<li>For Android,\n<ul class=\"wp-block-list\">\n<li><code>advertising_id<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>For iOS\n<ul class=\"wp-block-list\">\n<li><code>developer_device_id<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>If you are targeting IMEI and\/or OAID Ad Networks for Android, add:\n<ul class=\"wp-block-list\">\n<li><code>imei<\/code><\/li>\n\n\n\n<li><code>oaid<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>If you intend to use Google Ad Words, you will also need to add:\n<ul class=\"wp-block-list\">\n<li><code>platform<\/code><\/li>\n\n\n\n<li><code>os_version<\/code><\/li>\n\n\n\n<li><code>app_version<\/code><\/li>\n\n\n\n<li><code>locale<\/code><\/li>\n\n\n\n<li><code>device_model<\/code><\/li>\n\n\n\n<li><code>build_id<\/code><\/li>\n\n\n\n<li><code>advertising_id<\/code><\/li>\n\n\n\n<li><code>developer_device_id<\/code> (for iOS)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\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>, <code>limit_ad_tracking<\/code>, and <code>referrer<\/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\">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>BaseTenjin instance = Tenjin.getInstance(\"SDK_KEY\");\nList<string> optInParams = new List<string> {\"ip_address\", \"advertising_id\", \"developer_device_id\", \"limit_ad_tracking\", \"referrer\"};\ninstance.OptInParams(optInParams);\ninstance.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\">BaseTenjin instance <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Tenjin<\/span><span style=\"color: #ECEFF4\">.<\/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 style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">List<\/span><span style=\"color: #ECEFF4\"><<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">><\/span><span style=\"color: #D8DEE9FF\"> optInParams <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> List<\/span><span style=\"color: #ECEFF4\"><<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">><\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #A3BE8C\">ip_address<\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #A3BE8C\">advertising_id<\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #A3BE8C\">developer_device_id<\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #A3BE8C\">limit_ad_tracking<\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #A3BE8C\">referrer<\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #A3BE8C\">iad<\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">OptInParams<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">optInParams<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Connect<\/span><span style=\"color: #ECEFF4\">()<\/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: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\">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>BaseTenjin instance = Tenjin.getInstance(\"SDK_KEY\");\nList<string> optOutParams = new List<string> {\"locale\", \"timezone\", \"build_id\"};\ninstance.OptOutParams(optOutParams);\ninstance.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\">BaseTenjin instance <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Tenjin<\/span><span style=\"color: #ECEFF4\">.<\/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 style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">List<\/span><span style=\"color: #ECEFF4\"><<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">><\/span><span style=\"color: #D8DEE9FF\"> optOutParams <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">new<\/span><span style=\"color: #D8DEE9FF\"> List<\/span><span style=\"color: #ECEFF4\"><<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">><\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #A3BE8C\">locale<\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #A3BE8C\">timezone<\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #A3BE8C\">build_id<\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">OptOutParams<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">optOutParams<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Connect<\/span><span style=\"color: #ECEFF4\">()<\/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: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\">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>BaseTenjin instance = Tenjin.getInstance(\"<SDK_KEY>\");\noptInOut = instance.OptInOutUsingCMP(); <\/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\">BaseTenjin instance <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Tenjin<\/span><span style=\"color: #ECEFF4\">.<\/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 style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">optInOut<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">OptInOutUsingCMP<\/span><span style=\"color: #ECEFF4\">()<\/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><th>Platform<\/th><\/tr><\/thead><tbody><tr><td>ip_address<\/td><td>IP Address<\/td><td>All<\/td><\/tr><tr><td>advertising_id<\/td><td>Device Advertising ID<\/td><td>All<\/td><\/tr><tr><td>developer_device_id<\/td><td>ID for Vendor<\/td><td>iOS<\/td><\/tr><tr><td>oaid<\/td><td>Open Advertising ID<\/td><td>Android<\/td><\/tr><tr><td>imei<\/td><td>Device IMEI<\/td><td>Android<\/td><\/tr><tr><td>limit_ad_tracking<\/td><td>limit ad tracking enabled<\/td><td>All<\/td><\/tr><tr><td>platform<\/td><td>platform<\/td><td>All<\/td><\/tr><tr><td>referrer<\/td><td>Google Play Install Referrer<\/td><td>Android<\/td><\/tr><tr><td>os_version<\/td><td>operating system version<\/td><td>All<\/td><\/tr><tr><td>device<\/td><td>device name<\/td><td>All<\/td><\/tr><tr><td>device_manufacturer<\/td><td>device manufactuer<\/td><td>Android<\/td><\/tr><tr><td>device_model<\/td><td>device model<\/td><td>All<\/td><\/tr><tr><td>device_brand<\/td><td>device brand<\/td><td>Android<\/td><\/tr><tr><td>device_product<\/td><td>device product<\/td><td>Android<\/td><\/tr><tr><td>device_model_name<\/td><td>device machine<\/td><td>iOS<\/td><\/tr><tr><td>device_cpu<\/td><td>device cpu name<\/td><td>iOS<\/td><\/tr><tr><td>carrier<\/td><td>phone carrier<\/td><td>Android<\/td><\/tr><tr><td>connection_type<\/td><td>cellular or wifi<\/td><td>Android<\/td><\/tr><tr><td>screen_width<\/td><td>device screen width<\/td><td>Android<\/td><\/tr><tr><td>screen_height<\/td><td>device screen height<\/td><td>Android<\/td><\/tr><tr><td>os_version_release<\/td><td>operating system version<\/td><td>All<\/td><\/tr><tr><td>build_id<\/td><td>build ID<\/td><td>All<\/td><\/tr><tr><td>locale<\/td><td>device locale<\/td><td>All<\/td><\/tr><tr><td>country<\/td><td>locale country<\/td><td>All<\/td><\/tr><tr><td>timezone<\/td><td>timezone<\/td><td>All<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><br><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Purchase Events<\/h3>\n\n\n\n<h3 class=\"wp-block-heading\">iOS IAP Validation<\/h3>\n\n\n\n<p>iOS receipt validation requires transactionId and receipt. The signature will be set to null. For receipt, be sure to send the receipt Payload (the base64 encoded ASN.1 receipt) from Unity.<\/p>\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:\/\/dashboard.tenjin.com\/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<h3 class=\"wp-block-heading\">Android IAP Validation<\/h3>\n\n\n\n<p><strong>Google Play App Store<\/strong><\/p>\n\n\n\n<p>Google Play receipt validation requires receipt and signature are required (transactionId is set to null).<\/p>\n\n\n\n<p><strong>IMPORTANT:<\/strong> You will need to add your app&#8217;s public key in the <a href=\"https:\/\/dashboard.tenjin.com\/dashboard\/apps\" target=\"_new\">Tenjin dashboard<\/a> (under the app &#8216;edit&#8217; page). You can retrieve your Base64-encoded RSA public key from the <a href=\"https:\/\/play.google.com\/apps\/publish\/\" target=\"_new\">Google Play Developer Console<\/a> &gt; Select your app &gt; Monetize &gt; Monetization setup &gt; Google Play Billing &gt; Licensing: Base64-encoded RSA public key. Please note that for Android, we currently only support IAP transactions from Google Play.<\/p>\n\n\n\n<p><p class=\"has-text-color has-background has-link-color\" style=\"color:#664d03;background-color:#fff3cd\">(NOTE) For Google Play, Please ensure to &#8216;acknowledge&#8217; the purchase event before sending it to Tenjin. For more details, read <a href=\"https:\/\/developer.android.com\/google\/play\/billing\/integrate#non-consumable-products\" target=\"_blank\" rel=\"noreferrer noopener\">here<\/a><\/p><\/p>\n\n\n\n<p><strong>Amazon AppStore<\/strong><\/p>\n\n\n\n<p>Amazon AppStore receipt validation requires <code>receiptId<\/code> and <code>userId<\/code> parameters.<\/p>\n\n\n\n<p><strong>IMPORTANT:<\/strong> You will need to add your Amazon app&#8217;s Shared Key in the <a href=\"https:\/\/www.tenjin.io\/dashboard\/apps\" target=\"_new\">Tenjin dashboard<\/a>. The shared secret can be found on the Shared Key in your developer account with the <a href=\"https:\/\/developer.amazon.com\/settings\/console\/sdk\/shared-key\/\" target=\"_new\">Amazon Appstore account<\/a><\/p>\n\n\n\n<h3 class=\"wp-block-heading\">iOS and Android IAP Example<\/h3>\n\n\n\n<p>In the example below, we are using the widely used <a href=\"https:\/\/gist.github.com\/darktable\/1411710\" target=\"_new\">MiniJSON<\/a> library for JSON deserializing.<\/p>\n\n\n\n<p>If you&#8217;re using Unity IAP version 5 and above:<\/p>\n\n\n\n<p><strong>For consumable products<\/strong>, the receipt is only available in&nbsp;<strong>PendingOrder<\/strong>. Once confirmed (<code>ConfirmedOrder<\/code>), the receipt becomes empty. Always process purchases and send to Tenjin in OnPurchasePending for consumables.<\/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)\">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>public static void OnPurchasePending(PendingOrder pendingOrder) {\n    ProcessOrder(pendingOrder);\n    \/\/ Confirm the purchase after processing\n    UnityIAPServices.DefaultPurchase().ConfirmPurchase(pendingOrder);\n}\n\npublic static void ProcessOrder(Order order) {\n    \/\/ Get the first item from the cart\n    var item = order.CartOrdered.Items().FirstOrDefault();\n    if (item == null) return;\n\n    var product = item.Product;\n    var price = product.metadata.localizedPrice;\n    double lPrice = decimal.ToDouble(price);\n    var currencyCode = product.metadata.isoCurrencyCode;\n    var productId = product.definition.id;\n    var info = order.Info;\n\n#if UNITY_ANDROID\n\n    \/\/ Parse the unified receipt JSON\n    var wrapper = Json.Deserialize(info.Receipt) as Dictionary&lt;string, object>;  \/\/ https:\/\/gist.github.com\/darktable\/1411710\n    if (wrapper == null) return;\n\n    var store   = (string)wrapper&#91;\"Store\"&#93;;\n    var payload = (string)wrapper&#91;\"Payload\"&#93;;\n\n    if (store.Equals(\"GooglePlay\")) {\n        var googleDetails = Json.Deserialize(payload) as Dictionary&lt;string, object>;\n        var googleJson    = (string)googleDetails&#91;\"json\"&#93;;\n        var googleSig     = (string)googleDetails&#91;\"signature\"&#93;;\n\n        CompletedAndroidPurchase(productId, currencyCode, 1, lPrice, googleJson, googleSig);\n    }\n\n    if (store.Equals(\"AmazonAppStore\")) {\n        var amazonDetails   = Json.Deserialize(payload) as Dictionary&lt;string, object>;\n        var amazonReceiptId = (string)amazonDetails&#91;\"receiptId\"&#93;;\n        var amazonUserId    = (string)amazonDetails&#91;\"userId\"&#93;;\n\n        CompletedAmazonPurchase(productId, currencyCode, 1, lPrice, amazonReceiptId, amazonUserId);\n    }\n\n#elif UNITY_IOS\n\n    \/\/ Try SK2 first (Unity IAP 5.1+ on iOS 15+), fall back to SK1\n    var receipt = info.Apple?.jwsRepresentation;\n    if (string.IsNullOrEmpty(receipt)) {\n        receipt = info.Apple?.AppReceipt;\n    }\n\n    if (string.IsNullOrEmpty(receipt)) {\n        Debug.LogError(\"No receipt available\");\n        return;\n    }\n\n    var transactionId = info.TransactionID;\n    CompletedIosPurchase(productId, currencyCode, 1, lPrice, transactionId, receipt);\n\n#endif\n}\n\nprivate static void CompletedAndroidPurchase(string ProductId, string CurrencyCode, int Quantity,\n                                            double UnitPrice, string Receipt, string Signature)\n{\n    BaseTenjin instance = Tenjin.getInstance(\"SDK_KEY\");\n    instance.Transaction(ProductId, CurrencyCode, Quantity, UnitPrice, null, Receipt, Signature);\n}\n\nprivate static void CompletedIosPurchase(string ProductId, string CurrencyCode, int Quantity,\n                                        double UnitPrice, string TransactionId, string Receipt)\n{\n    BaseTenjin instance = Tenjin.getInstance(\"SDK_KEY\");\n    instance.Transaction(ProductId, CurrencyCode, Quantity, UnitPrice, TransactionId, Receipt, null);\n}\n\nprivate static void CompletedAmazonPurchase(string ProductId, string CurrencyCode, int Quantity,\n                                            double UnitPrice, string ReceiptId, string UserId)\n{\n    BaseTenjin instance = Tenjin.getInstance(\"SDK_KEY\");\n    instance.TransactionAmazon(ProductId, CurrencyCode, Quantity, UnitPrice, ReceiptId, UserId);\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\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">static<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">OnPurchasePending<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">PendingOrder pendingOrder<\/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: #88C0D0\">ProcessOrder<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">pendingOrder<\/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\">\/\/ Confirm the purchase after processing<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">UnityIAPServices<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">DefaultPurchase<\/span><span style=\"color: #ECEFF4\">().<\/span><span style=\"color: #88C0D0\">ConfirmPurchase<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">pendingOrder<\/span><span style=\"color: #ECEFF4\">)<\/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: #81A1C1\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">static<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">ProcessOrder<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">Order order<\/span><span style=\"color: #ECEFF4\">)<\/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\">\/\/ Get the first item from the cart<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> item <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">order<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">CartOrdered<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Items<\/span><span style=\"color: #ECEFF4\">().<\/span><span style=\"color: #88C0D0\">FirstOrDefault<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/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: #D8DEE9\">item<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">null<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">return;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> product <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">item<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">Product<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> price <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">product<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">metadata<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">localizedPrice<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">double<\/span><span style=\"color: #D8DEE9FF\"> lPrice <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">decimal<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">ToDouble<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">price<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> currencyCode <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">product<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">metadata<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">isoCurrencyCode<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> productId <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">product<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">definition<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">id<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> info <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">order<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">Info<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">#<\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #5E81AC\"> UNITY_ANDROID<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">    <\/span><span style=\"color: #616E88\">\/\/ Parse the unified receipt JSON<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> wrapper <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Json<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Deserialize<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">info<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">Receipt<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">as<\/span><span style=\"color: #D8DEE9FF\"> Dictionary<\/span><span style=\"color: #ECEFF4\">&lt;<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">object<\/span><span style=\"color: #ECEFF4\">&gt;<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #616E88\">\/\/ https:\/\/gist.github.com\/darktable\/1411710<\/span><\/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: #D8DEE9\">wrapper<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">null<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">return;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> store   <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9\">wrapper<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Store<\/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: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> payload <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9\">wrapper<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Payload<\/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: #D8DEE9\">store<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Equals<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">GooglePlay<\/span><span style=\"color: #ECEFF4\">&quot;<\/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: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> googleDetails <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Json<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Deserialize<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">payload<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">as<\/span><span style=\"color: #D8DEE9FF\"> Dictionary<\/span><span style=\"color: #ECEFF4\">&lt;<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">object<\/span><span style=\"color: #ECEFF4\">&gt;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> googleJson    <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9\">googleDetails<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">json<\/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: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> googleSig     <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9\">googleDetails<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">signature<\/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: #88C0D0\">CompletedAndroidPurchase<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">productId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">currencyCode<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">lPrice<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">googleJson<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">googleSig<\/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>\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: #D8DEE9\">store<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Equals<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">AmazonAppStore<\/span><span style=\"color: #ECEFF4\">&quot;<\/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: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> amazonDetails   <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Json<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Deserialize<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">payload<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">as<\/span><span style=\"color: #D8DEE9FF\"> Dictionary<\/span><span style=\"color: #ECEFF4\">&lt;<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">object<\/span><span style=\"color: #ECEFF4\">&gt;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> amazonReceiptId <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9\">amazonDetails<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">receiptId<\/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: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> amazonUserId    <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9\">amazonDetails<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">userId<\/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: #88C0D0\">CompletedAmazonPurchase<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">productId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">currencyCode<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">lPrice<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">amazonReceiptId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">amazonUserId<\/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>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">#<\/span><span style=\"color: #81A1C1\">elif<\/span><span style=\"color: #5E81AC\"> UNITY_IOS<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">    <\/span><span style=\"color: #616E88\">\/\/ Try SK2 first (Unity IAP 5.1+ on iOS 15+), fall back to SK1<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> receipt <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">info<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">Apple<\/span><span style=\"color: #81A1C1\">?<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">jwsRepresentation<\/span><span style=\"color: #81A1C1\">;<\/span><\/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: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">IsNullOrEmpty<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">receipt<\/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: #D8DEE9\">receipt<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">info<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">Apple<\/span><span style=\"color: #81A1C1\">?<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">AppReceipt<\/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: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">IsNullOrEmpty<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">receipt<\/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: #D8DEE9\">Debug<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">LogError<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">No receipt available<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">return;<\/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: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> transactionId <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">info<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">TransactionID<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">CompletedIosPurchase<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">productId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">currencyCode<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">lPrice<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">transactionId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">receipt<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">#<\/span><span style=\"color: #81A1C1\">endif<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">private<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">static<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">CompletedAndroidPurchase<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> ProductId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> CurrencyCode<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">int<\/span><span style=\"color: #D8DEE9FF\"> Quantity<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                                            <\/span><span style=\"color: #81A1C1\">double<\/span><span style=\"color: #D8DEE9FF\"> UnitPrice<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> Receipt<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> Signature<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    BaseTenjin instance <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Tenjin<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">getInstance<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">SDK_KEY<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Transaction<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">ProductId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">CurrencyCode<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Quantity<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">UnitPrice<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">null<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Receipt<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Signature<\/span><span style=\"color: #ECEFF4\">)<\/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: #81A1C1\">private<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">static<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">CompletedIosPurchase<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> ProductId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> CurrencyCode<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">int<\/span><span style=\"color: #D8DEE9FF\"> Quantity<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                                        <\/span><span style=\"color: #81A1C1\">double<\/span><span style=\"color: #D8DEE9FF\"> UnitPrice<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> TransactionId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> Receipt<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    BaseTenjin instance <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Tenjin<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">getInstance<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">SDK_KEY<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Transaction<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">ProductId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">CurrencyCode<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Quantity<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">UnitPrice<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">TransactionId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Receipt<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">null<\/span><span style=\"color: #ECEFF4\">)<\/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: #81A1C1\">private<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">static<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">CompletedAmazonPurchase<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> ProductId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> CurrencyCode<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">int<\/span><span style=\"color: #D8DEE9FF\"> Quantity<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                                            <\/span><span style=\"color: #81A1C1\">double<\/span><span style=\"color: #D8DEE9FF\"> UnitPrice<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> ReceiptId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> UserId<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    BaseTenjin instance <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Tenjin<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">getInstance<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">SDK_KEY<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">TransactionAmazon<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">ProductId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">CurrencyCode<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Quantity<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">UnitPrice<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">ReceiptId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">UserId<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>If you&#8217;re using Unity IAP version 4 (or earlier):<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)\">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>public static void OnProcessPurchase(PurchaseEventArgs purchaseEventArgs) {\n    var price = purchaseEventArgs.purchasedProduct.metadata.localizedPrice;\n    double lPrice = decimal.ToDouble(price);\n    var currencyCode = purchaseEventArgs.purchasedProduct.metadata.isoCurrencyCode;\n\n    var wrapper = Json.Deserialize(purchaseEventArgs.purchasedProduct.receipt) as Dictionary&lt;string, object>;\n    \/\/ https:\/\/gist.github.com\/darktable\/1411710\n    if (null == wrapper) {\n        return;\n    }\n\n    var store     = (string)wrapper&#91;\"Store\"&#93;;    \/\/ GooglePlay, AmazonAppStore, AppleAppStore, etc.\n    var payload   = (string)wrapper&#91;\"Payload\"&#93;;  \/\/ For Apple: base64 encoded ASN.1 receipt. For Android: raw JSON receipt.\n    var productId = purchaseEventArgs.purchasedProduct.definition.id;\n\n    #if UNITY_ANDROID\n    if (store.Equals(\"GooglePlay\")) {\n        var googleDetails = Json.Deserialize(payload) as Dictionary&lt;string, object>;\n        var googleJson    = (string)googleDetails&#91;\"json\"&#93;;\n        var googleSig     = (string)googleDetails&#91;\"signature\"&#93;;\n        CompletedAndroidPurchase(productId, currencyCode, 1, lPrice, googleJson, googleSig);\n    }\n    if (store.Equals(\"AmazonApps\")) {\n        var amazonDetails   = Json.Deserialize(payload) as Dictionary&lt;string, object>;\n        var amazonReceiptId = (string)amazonDetails&#91;\"receiptId\"&#93;;\n        var amazonUserId    = (string)amazonDetails&#91;\"userId\"&#93;;\n        CompletedAmazonPurchase(productId, currencyCode, 1, lPrice, amazonReceiptId, amazonUserId);\n    }\n    #elif UNITY_IOS\n    var transactionId = purchaseEventArgs.purchasedProduct.transactionID;\n    CompletedIosPurchase(productId, currencyCode, 1, lPrice, transactionId, payload);\n    #endif\n}\n\nprivate static void CompletedAndroidPurchase(string ProductId, string CurrencyCode, int Quantity, double UnitPrice, string Receipt, string Signature) {\n    BaseTenjin instance = Tenjin.getInstance(\"SDK_KEY\");\n    instance.Transaction(ProductId, CurrencyCode, Quantity, UnitPrice, null, Receipt, Signature);\n}\n\nprivate static void CompletedIosPurchase(string ProductId, string CurrencyCode, int Quantity, double UnitPrice, string TransactionId, string Receipt) {\n    BaseTenjin instance = Tenjin.getInstance(\"SDK_KEY\");\n    instance.Transaction(ProductId, CurrencyCode, Quantity, UnitPrice, TransactionId, Receipt, null);\n}\n\nprivate static void CompletedAmazonPurchase(string ProductId, string CurrencyCode, int Quantity, double UnitPrice, string ReceiptId, string UserId) {\n    BaseTenjin instance = Tenjin.getInstance(\"SDK_KEY\");\n    instance.TransactionAmazon(ProductId, CurrencyCode, Quantity, UnitPrice, ReceiptId, UserId);\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\">public<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">static<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">OnProcessPurchase<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">PurchaseEventArgs purchaseEventArgs<\/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: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> price <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">purchaseEventArgs<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">purchasedProduct<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">metadata<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">localizedPrice<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">double<\/span><span style=\"color: #D8DEE9FF\"> lPrice <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">decimal<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">ToDouble<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">price<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> currencyCode <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">purchaseEventArgs<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">purchasedProduct<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">metadata<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">isoCurrencyCode<\/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\">var<\/span><span style=\"color: #D8DEE9FF\"> wrapper <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Json<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Deserialize<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">purchaseEventArgs<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">purchasedProduct<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">receipt<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">as<\/span><span style=\"color: #D8DEE9FF\"> Dictionary<\/span><span style=\"color: #ECEFF4\">&lt;<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">object<\/span><span style=\"color: #ECEFF4\">&gt;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">    <\/span><span style=\"color: #616E88\">\/\/ https:\/\/gist.github.com\/darktable\/1411710<\/span><\/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: #81A1C1\">null<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">==<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">wrapper<\/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: #81A1C1\">return;<\/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: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> store     <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9\">wrapper<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Store<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #616E88\">\/\/ GooglePlay, AmazonAppStore, AppleAppStore, etc.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> payload   <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9\">wrapper<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Payload<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\">  <\/span><span style=\"color: #616E88\">\/\/ For Apple: base64 encoded ASN.1 receipt. For Android: raw JSON receipt.<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> productId <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">purchaseEventArgs<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">purchasedProduct<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">definition<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">id<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #5E81AC\">    <\/span><span style=\"color: #ECEFF4\">#<\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #5E81AC\"> UNITY_ANDROID<\/span><\/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: #D8DEE9\">store<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Equals<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">GooglePlay<\/span><span style=\"color: #ECEFF4\">&quot;<\/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: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> googleDetails <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Json<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Deserialize<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">payload<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">as<\/span><span style=\"color: #D8DEE9FF\"> Dictionary<\/span><span style=\"color: #ECEFF4\">&lt;<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">object<\/span><span style=\"color: #ECEFF4\">&gt;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> googleJson    <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9\">googleDetails<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">json<\/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: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> googleSig     <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9\">googleDetails<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">signature<\/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: #88C0D0\">CompletedAndroidPurchase<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">productId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">currencyCode<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">lPrice<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">googleJson<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">googleSig<\/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>\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: #D8DEE9\">store<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Equals<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">AmazonApps<\/span><span style=\"color: #ECEFF4\">&quot;<\/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: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> amazonDetails   <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Json<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Deserialize<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">payload<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">as<\/span><span style=\"color: #D8DEE9FF\"> Dictionary<\/span><span style=\"color: #ECEFF4\">&lt;<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">object<\/span><span style=\"color: #ECEFF4\">&gt;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> amazonReceiptId <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9\">amazonDetails<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">receiptId<\/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: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> amazonUserId    <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9\">amazonDetails<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">userId<\/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: #88C0D0\">CompletedAmazonPurchase<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">productId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">currencyCode<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">lPrice<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">amazonReceiptId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">amazonUserId<\/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>\n<span class=\"line\"><span style=\"color: #5E81AC\">    <\/span><span style=\"color: #ECEFF4\">#<\/span><span style=\"color: #81A1C1\">elif<\/span><span style=\"color: #5E81AC\"> UNITY_IOS<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">var<\/span><span style=\"color: #D8DEE9FF\"> transactionId <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">purchaseEventArgs<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">purchasedProduct<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">transactionID<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #88C0D0\">CompletedIosPurchase<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">productId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">currencyCode<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">1<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">lPrice<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">transactionId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">payload<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #5E81AC\">    <\/span><span style=\"color: #ECEFF4\">#<\/span><span style=\"color: #81A1C1\">endif<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">private<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">static<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">CompletedAndroidPurchase<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> ProductId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> CurrencyCode<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">int<\/span><span style=\"color: #D8DEE9FF\"> Quantity<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">double<\/span><span style=\"color: #D8DEE9FF\"> UnitPrice<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> Receipt<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> Signature<\/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\">    BaseTenjin instance <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Tenjin<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">getInstance<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">SDK_KEY<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Transaction<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">ProductId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">CurrencyCode<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Quantity<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">UnitPrice<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">null<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Receipt<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Signature<\/span><span style=\"color: #ECEFF4\">)<\/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: #81A1C1\">private<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">static<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">CompletedIosPurchase<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> ProductId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> CurrencyCode<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">int<\/span><span style=\"color: #D8DEE9FF\"> Quantity<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">double<\/span><span style=\"color: #D8DEE9FF\"> UnitPrice<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> TransactionId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> Receipt<\/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\">    BaseTenjin instance <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Tenjin<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">getInstance<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">SDK_KEY<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Transaction<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">ProductId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">CurrencyCode<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Quantity<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">UnitPrice<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">TransactionId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Receipt<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">null<\/span><span style=\"color: #ECEFF4\">)<\/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: #81A1C1\">private<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">static<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">CompletedAmazonPurchase<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> ProductId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> CurrencyCode<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">int<\/span><span style=\"color: #D8DEE9FF\"> Quantity<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">double<\/span><span style=\"color: #D8DEE9FF\"> UnitPrice<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> ReceiptId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> UserId<\/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\">    BaseTenjin instance <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Tenjin<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">getInstance<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">SDK_KEY<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">TransactionAmazon<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">ProductId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">CurrencyCode<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Quantity<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">UnitPrice<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">ReceiptId<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">UserId<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/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<h3 class=\"wp-block-heading\">Subscription IAP<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>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). 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.<\/li>\n<\/ul>\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<ul class=\"wp-block-list\">\n<li>Tenjin does not de-dupe duplicate transactions.<\/li>\n\n\n\n<li>If you have iOS subscription IAP, you will need to add your app&#8217;s public key in the <a href=\"https:\/\/www.tenjin.com\/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; Features \\&gt; In-App Purchases \\&gt; App-Specific Shared Secret.<\/li>\n\n\n\n<li>For more information on iOS subscriptions, please see: <a href=\"https:\/\/developer.apple.com\/documentation\/storekit\/in-app_purchase\/subscriptions_and_offers\">Apple documentation on Working with Subscriptions<\/a><\/li>\n\n\n\n<li>For more information on Android subscriptions, please see: <a href=\"https:\/\/developer.android.com\/distribute\/best-practices\/earn\/subscriptionss\">Google Play Billing subscriptions documentation<\/a><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Custom Events<\/h3>\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<ul class=\"wp-block-list\">\n<li>Include the Assets folder in your Unity project<\/li>\n\n\n\n<li>In your projects&#8217; method for the custom event, write the following for a named event: <code>Tenjin.getInstance(\"<sdk_key>\").SendEvent(\"name\")<\/sdk_key><\/code> and the following for a named event with an integer value: <code>Tenjin.getInstance(\"<sdk_key>\").SendEvent(\"nameWithValue\",\"value\")<\/sdk_key><\/code><\/li>\n\n\n\n<li>Make sure <code>value<\/code> passed is an integer value(&#8220;2000&#8221; for example, not &#8220;0.02&#8221;). If <code>value<\/code> is not an integer value, <code>value<\/code> parameter will be omitted.<\/li>\n<\/ul>\n\n\n\n<p>Here&#8217;s an example of the 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\">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>void MethodWithCustomEvent(){\n    \/\/event with name\n    BaseTenjin instance = Tenjin.getInstance (\"SDK_KEY\");\n    instance.SendEvent(\"name\");\n    \/\/event with name and integer value\n    instance.SendEvent(\"nameWithValue\", \"value\");\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\">void<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">MethodWithCustomEvent<\/span><span style=\"color: #ECEFF4\">(){<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">    <\/span><span style=\"color: #616E88\">\/\/event with name<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    BaseTenjin instance <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Tenjin<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">getInstance<\/span><span style=\"color: #D8DEE9FF\"> <\/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 style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">SendEvent<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #A3BE8C\">name<\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #ECEFF4\">)<\/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\">\/\/event with name and integer value<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">SendEvent<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #A3BE8C\">nameWithValue<\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #A3BE8C\">value<\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p><code>.SendEvent(\"name\")<\/code> is for events that are static markers or milestones. This would include things like <code>tutorial_complete<\/code>, <code>registration<\/code>, or <code>level_1<\/code>.<\/p>\n\n\n\n<p><code>.SendEvent(\"name\", \"value\")<\/code> is for events that you want to do math on a property of that event. For example, <code>(\"coins_purchased\", \"100\")<\/code> will let you analyze a sum or average of the coins that are purchased for that event.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Server-to-server integration<\/h3>\n\n\n\n<p>Tenjin offers <a href=\"https:\/\/tenjin.com\/docs\/server-to-server-s2s-setup\/\">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<h3 class=\"wp-block-heading\">App Subversion parameter for A\/B Testing<\/h3>\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 app version 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\">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>BaseTenjin instance = Tenjin.getInstance(\"<API KEY>\");\ninstance.AppendAppSubversion(8888);\ninstance.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\">BaseTenjin instance <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Tenjin<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">getInstance<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #A3BE8C\"><API KEY><\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">AppendAppSubversion<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #B48EAD\">8888<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Connect<\/span><span style=\"color: #ECEFF4\">()<\/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\">LiveOps Campaigns<\/h3>\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 Facebook 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<p><\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Customer User ID<\/h3>\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(\"user_id\")<\/code><\/p>\n\n\n\n<p><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: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\">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>BaseTenjin instance = Tenjin.getInstance(\"<SDK_KEY>\");\ninstance.SetCustomerUserId(\"user_id\");\nstring userId = instance.GetCustomerUserId(); <\/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\">BaseTenjin instance <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Tenjin<\/span><span style=\"color: #ECEFF4\">.<\/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 style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">SetCustomerUserId<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #A3BE8C\">user_id<\/span><span style=\"color: #ECEFF4\">\"<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #D8DEE9FF\"> userId <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">GetCustomerUserId<\/span><span style=\"color: #ECEFF4\">()<\/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\">Analytics Installation ID<\/h3>\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\">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>BaseTenjin instance = Tenjin.getInstance(\"<SDK_KEY>\");\nanalyticsId = instance.GetAnalyticsInstallationId; <\/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\">BaseTenjin instance <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Tenjin<\/span><span style=\"color: #ECEFF4\">.<\/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 style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">analyticsId<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">GetAnalyticsInstallationId<\/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\">Retry\/cache events<\/h3>\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\">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>BaseTenjin instance = Tenjin.getInstance(\"<SDK_KEY>\");\ninstance.SetCacheEventSetting(true); <\/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\">BaseTenjin instance <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Tenjin<\/span><span style=\"color: #ECEFF4\">.<\/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 style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">SetCacheEventSetting<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">true<\/span><span style=\"color: #ECEFF4\">)<\/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\">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>SetGoogleDMAParameters(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\">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>BaseTenjin instance = Tenjin.getInstance(\"<SDK_KEY>\");\ninstance.SetGoogleDMAParameters(adPersonalization, 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: #D8DEE9FF\">BaseTenjin instance <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Tenjin<\/span><span style=\"color: #ECEFF4\">.<\/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 style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">SetGoogleDMAParameters<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">adPersonalization<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">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\">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>instance.OptInGoogleDMA(); \ninstance.OptOutGoogleDMA(); <\/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: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">OptInGoogleDMA<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">OptOutGoogleDMA<\/span><span style=\"color: #ECEFF4\">()<\/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 and aggregates user session and revenue metrics that can be used for LiveOps campaigns, user segmentation, and analytics. The User Profile feature provides real-time access to these metrics for individual users.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Tracked Metrics<a href=\"https:\/\/github.com\/tenjin\/tenjin-unity-sdk?tab=readme-ov-file#tracked-metrics\"><\/a><\/h3>\n\n\n\n<p>The SDK automatically tracks the following metrics per user:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Metric<\/th><th>Description<\/th><th>Type<\/th><\/tr><\/thead><tbody><tr><td><code>session_count<\/code><\/td><td>Total number of sessions<\/td><td>Integer<\/td><\/tr><tr><td><code>total_session_time<\/code><\/td><td>Cumulative session time in&nbsp;<strong>milliseconds<\/strong><\/td><td>Number<\/td><\/tr><tr><td><code>average_session_length<\/code><\/td><td>Average session duration in&nbsp;<strong>milliseconds<\/strong><\/td><td>Number<\/td><\/tr><tr><td><code>last_session_length<\/code><\/td><td>Last completed session duration in&nbsp;<strong>milliseconds<\/strong><\/td><td>Number<\/td><\/tr><tr><td><code>iap_transaction_count<\/code><\/td><td>Total number of IAP transactions<\/td><td>Integer<\/td><\/tr><tr><td><code>total_ilrd_revenue_usd<\/code><\/td><td>Total ILRD ad revenue in USD<\/td><td>Number<\/td><\/tr><tr><td><code>first_session_date<\/code><\/td><td>ISO8601 timestamp of first session<\/td><td>String<\/td><\/tr><tr><td><code>last_session_date<\/code><\/td><td>ISO8601 timestamp of most recent completed session<\/td><td>String<\/td><\/tr><tr><td><code>current_session_length<\/code><\/td><td>Current active session duration in&nbsp;<strong>milliseconds<\/strong><\/td><td>Number<\/td><\/tr><tr><td><code>iap_revenue_by_currency<\/code><\/td><td>Revenue breakdown by currency code<\/td><td>JSON String<\/td><\/tr><tr><td><code>purchased_product_ids<\/code><\/td><td>Array of purchased product IDs<\/td><td>JSON String<\/td><\/tr><tr><td><code>ilrd_revenue_by_network<\/code><\/td><td>ILRD revenue by ad network<\/td><td>JSON String<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><strong>Note:<\/strong>&nbsp;Conditional fields (dates, current session, revenue maps, product arrays) are only included in the dictionary if data exists.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Available Methods<a href=\"https:\/\/github.com\/tenjin\/tenjin-unity-sdk?tab=readme-ov-file#available-methods\"><\/a><\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Get User Profile Dictionary<a href=\"https:\/\/github.com\/tenjin\/tenjin-unity-sdk?tab=readme-ov-file#get-user-profile-dictionary\"><\/a><\/h4>\n\n\n\n<p>Returns a dictionary containing all tracked metrics for the current user. All values are returned as strings (numbers, JSON arrays, and JSON objects are converted to strings).<\/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)\">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>BaseTenjin instance = Tenjin.getInstance(\"&lt;SDK_KEY>\");\nDictionary&lt;string, string> profile = instance.GetUserProfileDictionary();\n\nif (profile != null &amp;&amp; profile.Count > 0)\n{\n    Debug.Log(\"Session Count: \" + profile&#91;\"session_count\"&#93;);\n    Debug.Log(\"Total Session Time (ms): \" + profile&#91;\"total_session_time\"&#93;);\n    Debug.Log(\"Average Session Length (ms): \" + profile&#91;\"average_session_length\"&#93;);\n    Debug.Log(\"Last Session Length (ms): \" + profile&#91;\"last_session_length\"&#93;);\n    Debug.Log(\"IAP Transaction Count: \" + profile&#91;\"iap_transaction_count\"&#93;);\n    Debug.Log(\"Total ILRD Revenue USD: \" + profile&#91;\"total_ilrd_revenue_usd\"&#93;);\n\n    \/\/ Convert milliseconds to seconds if needed\n    long totalTimeMs = long.Parse(profile&#91;\"total_session_time\"&#93;);\n    Debug.Log($\"Total Session Time: {totalTimeMs \/ 1000.0:F1} seconds\");\n\n    \/\/ Revenue by currency is a JSON string (conditional)\n    if (profile.ContainsKey(\"iap_revenue_by_currency\"))\n    {\n        Debug.Log(\"IAP Revenue by Currency: \" + profile&#91;\"iap_revenue_by_currency\"&#93;);\n        \/\/ Example: {\"USD\":99.99,\"EUR\":49.99}\n    }\n\n    \/\/ Product IDs is a JSON array string (conditional)\n    if (profile.ContainsKey(\"purchased_product_ids\"))\n    {\n        Debug.Log(\"Purchased Products: \" + profile&#91;\"purchased_product_ids\"&#93;);\n        \/\/ Example: &#91;\"com.app.coins100\",\"com.app.coins500\"&#93;\n    }\n}\nelse\n{\n    Debug.Log(\"User profile not available yet\");\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\">BaseTenjin instance <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Tenjin<\/span><span style=\"color: #ECEFF4\">.<\/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 style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">Dictionary<\/span><span style=\"color: #ECEFF4\">&lt;<\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">string<\/span><span style=\"color: #ECEFF4\">&gt;<\/span><span style=\"color: #D8DEE9FF\"> profile <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">GetUserProfileDictionary<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">profile<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">!=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">null<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">&amp;&amp;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">profile<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">Count<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">&gt;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #B48EAD\">0<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">Debug<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Log<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Session Count: <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">profile<\/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: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">Debug<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Log<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Total Session Time (ms): <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">profile<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">total_session_time<\/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: #D8DEE9\">Debug<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Log<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Average Session Length (ms): <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">profile<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">average_session_length<\/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: #D8DEE9\">Debug<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Log<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Last Session Length (ms): <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">profile<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">last_session_length<\/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: #D8DEE9\">Debug<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Log<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">IAP Transaction Count: <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">profile<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">iap_transaction_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: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">Debug<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Log<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Total ILRD Revenue USD: <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">profile<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">total_ilrd_revenue_usd<\/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\">\/\/ Convert milliseconds to seconds if needed<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">long<\/span><span style=\"color: #D8DEE9FF\"> totalTimeMs <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">long<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Parse<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">profile<\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">total_session_time<\/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: #D8DEE9\">Debug<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Log<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">$&quot;<\/span><span style=\"color: #A3BE8C\">Total Session Time: <\/span><span style=\"color: #ECEFF4\">{<\/span><span style=\"color: #D8DEE9\">totalTimeMs<\/span><span style=\"color: #A3BE8C\"> <\/span><span style=\"color: #81A1C1\">\/<\/span><span style=\"color: #A3BE8C\"> <\/span><span style=\"color: #B48EAD\">1000.0<\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #D8DEE9\">F1<\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #A3BE8C\"> seconds<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/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\">\/\/ Revenue by currency is a JSON string (conditional)<\/span><\/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: #D8DEE9\">profile<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">ContainsKey<\/span><span style=\"color: #ECEFF4\">(<\/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\">))<\/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: #D8DEE9\">Debug<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Log<\/span><span style=\"color: #ECEFF4\">(<\/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: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">profile<\/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: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ Example: {&quot;USD&quot;:99.99,&quot;EUR&quot;:49.99}<\/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\">\/\/ Product IDs is a JSON array string (conditional)<\/span><\/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: #D8DEE9\">profile<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">ContainsKey<\/span><span style=\"color: #ECEFF4\">(<\/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\">))<\/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: #D8DEE9\">Debug<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Log<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Purchased Products: <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">+<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">profile<\/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>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ Example: &#91;&quot;com.app.coins100&quot;,&quot;com.app.coins500&quot;&#93;<\/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>\n<span class=\"line\"><span style=\"color: #81A1C1\">else<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #D8DEE9\">Debug<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Log<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">User profile not available yet<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Reset User Profile<a href=\"https:\/\/github.com\/tenjin\/tenjin-unity-sdk?tab=readme-ov-file#reset-user-profile\"><\/a><\/h3>\n\n\n\n<p>Clears all tracked metrics for the current user. Useful for testing or when a user logs 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)\">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>BaseTenjin instance = Tenjin.getInstance(\"&lt;SDK_KEY>\");\ninstance.ResetUserProfile();\nDebug.Log(\"User profile has been reset\");<\/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\">BaseTenjin instance <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">Tenjin<\/span><span style=\"color: #ECEFF4\">.<\/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 style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">instance<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">ResetUserProfile<\/span><span style=\"color: #ECEFF4\">()<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9\">Debug<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #88C0D0\">Log<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">User profile has been reset<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Platform-Specific Notes<a href=\"https:\/\/github.com\/tenjin\/tenjin-unity-sdk?tab=readme-ov-file#platform-specific-notes\"><\/a><\/h3>\n\n\n\n<p><strong>Data Availability<\/strong>: <\/p>\n\n\n\n<p>User profile data becomes available after the first session is tracked. The&nbsp;<code>GetUserProfileDictionary()<\/code>&nbsp;method returns real-time data from the SDK&#8217;s in-memory cache.<a href=\"https:\/\/github.com\/tenjin\/tenjin-unity-sdk?tab=readme-ov-file#user-profile---liveops-metrics\"><\/a><\/p>\n\n\n\n<p><strong>Time Units<\/strong>:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>All time values are now in milliseconds<\/strong>&nbsp;on both iOS and Android for consistency<\/li>\n\n\n\n<li>Convert to seconds if needed:&nbsp;<code>milliseconds \/ 1000.0<\/code><\/li>\n<\/ol>\n\n\n\n<p><strong>Complex Data Types<\/strong>:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Revenue maps (<code>iap_revenue_by_currency<\/code>,&nbsp;<code>ilrd_revenue_by_network<\/code>) are returned as JSON strings:&nbsp;<code>{\"USD\":99.99,\"EUR\":49.99}<\/code><\/li>\n\n\n\n<li>Product ID arrays (<code>purchased_product_ids<\/code>) are returned as JSON strings:&nbsp;<code>[\"product1\",\"product2\"]<\/code><\/li>\n<\/ol>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">Impression Level Ad Revenue Integration<\/h3>\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 MAX<\/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 which is affected by each advertisement shown 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\">Testing<\/h2>\n\n\n\n<p>You can verify if the integration is working correctly with our <a href=\"https:\/\/www.tenjin.com\/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.com\/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<p><\/p>\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\/unity\/llm-guide.md Summary The below documentation describes the Unity SDK for Tenjin. To learn more about Tenjin and our product offering, please visit https:\/\/www.tenjin.com. If you are using Unity SDK v1.12.29 or lower, please follow these steps before completing the SDK integration&#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-15428","docs","type-docs","status-publish","hentry","doc_category-add-the-tenjin-sdk"],"acf":[],"year_month":"2026-04","word_count":6161,"total_views":0,"reactions":{"happy":0,"normal":0,"sad":0},"author_info":{"name":"mariusz.bijok","author_nicename":"mariusz-bijok","author_url":"https:\/\/tenjin.com\/zh\/blog\/author\/mariusz-bijok\/"},"doc_category_info":[{"term_name":"Tenjin SDKs","term_url":"https:\/\/tenjin.com\/zh\/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 Unity<\/title>\n<meta name=\"description\" content=\"Explore the Tenjin Unity SDK for iOS and Android, featuring app store integration, user attribution, and support for in-app purchases.\" \/>\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\/zh\/docs\/mmp-unity-sdk\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"MMP SDK Unity\" \/>\n<meta property=\"og:description\" content=\"Explore the Tenjin Unity SDK for iOS and Android, featuring app store integration, user attribution, and support for in-app purchases.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/tenjin.com\/zh\/docs\/mmp-unity-sdk\/\" \/>\n<meta property=\"og:site_name\" content=\"Tenjin\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-20T08:31:59+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=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data1\" content=\"15 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/tenjin.com\/docs\/mmp-unity-sdk\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/tenjin.com\/docs\/mmp-unity-sdk\/\"},\"author\":{\"name\":\"mariusz.bijok\",\"@id\":\"https:\/\/tenjin.com\/#\/schema\/person\/2df6a56c45e0493e93ec6d7100750b77\"},\"headline\":\"Mobile Measurement Partner (MMP) SDK for Unity\",\"datePublished\":\"2026-02-20T07:06:10+00:00\",\"dateModified\":\"2026-04-20T08:31:59+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/tenjin.com\/docs\/mmp-unity-sdk\/\"},\"wordCount\":3351,\"publisher\":{\"@id\":\"https:\/\/tenjin.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/tenjin.com\/docs\/mmp-unity-sdk\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/tenjin.com\/wp-content\/uploads\/2026\/01\/app_api_key1.png\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/tenjin.com\/docs\/mmp-unity-sdk\/\",\"url\":\"https:\/\/tenjin.com\/docs\/mmp-unity-sdk\/\",\"name\":\"MMP SDK Unity\",\"isPartOf\":{\"@id\":\"https:\/\/tenjin.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/tenjin.com\/docs\/mmp-unity-sdk\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/tenjin.com\/docs\/mmp-unity-sdk\/#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-20T08:31:59+00:00\",\"description\":\"Explore the Tenjin Unity SDK for iOS and Android, featuring app store integration, user attribution, and support for in-app purchases.\",\"breadcrumb\":{\"@id\":\"https:\/\/tenjin.com\/docs\/mmp-unity-sdk\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/tenjin.com\/docs\/mmp-unity-sdk\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/tenjin.com\/docs\/mmp-unity-sdk\/#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-unity-sdk\/#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 Unity\"}]},{\"@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\":\"zh-Hans\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/tenjin.com\/#organization\",\"name\":\"Tenjin\",\"url\":\"https:\/\/tenjin.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@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\":\"zh-Hans\",\"@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\/zh\/blog\/author\/mariusz-bijok\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"MMP SDK Unity","description":"Explore the Tenjin Unity SDK for iOS and Android, featuring app store integration, user attribution, and support for in-app purchases.","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\/zh\/docs\/mmp-unity-sdk\/","og_locale":"zh_CN","og_type":"article","og_title":"MMP SDK Unity","og_description":"Explore the Tenjin Unity SDK for iOS and Android, featuring app store integration, user attribution, and support for in-app purchases.","og_url":"https:\/\/tenjin.com\/zh\/docs\/mmp-unity-sdk\/","og_site_name":"Tenjin","article_modified_time":"2026-04-20T08:31:59+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":{"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"15 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/tenjin.com\/docs\/mmp-unity-sdk\/#article","isPartOf":{"@id":"https:\/\/tenjin.com\/docs\/mmp-unity-sdk\/"},"author":{"name":"mariusz.bijok","@id":"https:\/\/tenjin.com\/#\/schema\/person\/2df6a56c45e0493e93ec6d7100750b77"},"headline":"Mobile Measurement Partner (MMP) SDK for Unity","datePublished":"2026-02-20T07:06:10+00:00","dateModified":"2026-04-20T08:31:59+00:00","mainEntityOfPage":{"@id":"https:\/\/tenjin.com\/docs\/mmp-unity-sdk\/"},"wordCount":3351,"publisher":{"@id":"https:\/\/tenjin.com\/#organization"},"image":{"@id":"https:\/\/tenjin.com\/docs\/mmp-unity-sdk\/#primaryimage"},"thumbnailUrl":"https:\/\/tenjin.com\/wp-content\/uploads\/2026\/01\/app_api_key1.png","inLanguage":"zh-Hans"},{"@type":"WebPage","@id":"https:\/\/tenjin.com\/docs\/mmp-unity-sdk\/","url":"https:\/\/tenjin.com\/docs\/mmp-unity-sdk\/","name":"MMP SDK Unity","isPartOf":{"@id":"https:\/\/tenjin.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/tenjin.com\/docs\/mmp-unity-sdk\/#primaryimage"},"image":{"@id":"https:\/\/tenjin.com\/docs\/mmp-unity-sdk\/#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-20T08:31:59+00:00","description":"Explore the Tenjin Unity SDK for iOS and Android, featuring app store integration, user attribution, and support for in-app purchases.","breadcrumb":{"@id":"https:\/\/tenjin.com\/docs\/mmp-unity-sdk\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/tenjin.com\/docs\/mmp-unity-sdk\/"]}]},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/tenjin.com\/docs\/mmp-unity-sdk\/#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-unity-sdk\/#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 Unity"}]},{"@type":"WebSite","@id":"https:\/\/tenjin.com\/#website","url":"https:\/\/tenjin.com\/","name":"Tenjin","description":"\u8ba9\u589e\u957f\u53d8\u7b80\u5355","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":"zh-Hans"},{"@type":"Organization","@id":"https:\/\/tenjin.com\/#organization","name":"Tenjin","url":"https:\/\/tenjin.com\/","logo":{"@type":"ImageObject","inLanguage":"zh-Hans","@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":"zh-Hans","@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\/zh\/blog\/author\/mariusz-bijok\/"}]}},"knowledge_base_info":[],"knowledge_base_slug":[],"_links":{"self":[{"href":"https:\/\/tenjin.com\/zh\/wp-json\/wp\/v2\/docs\/15428","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tenjin.com\/zh\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/tenjin.com\/zh\/wp-json\/wp\/v2\/types\/docs"}],"author":[{"embeddable":true,"href":"https:\/\/tenjin.com\/zh\/wp-json\/wp\/v2\/users\/25"}],"replies":[{"embeddable":true,"href":"https:\/\/tenjin.com\/zh\/wp-json\/wp\/v2\/comments?post=15428"}],"version-history":[{"count":47,"href":"https:\/\/tenjin.com\/zh\/wp-json\/wp\/v2\/docs\/15428\/revisions"}],"predecessor-version":[{"id":17477,"href":"https:\/\/tenjin.com\/zh\/wp-json\/wp\/v2\/docs\/15428\/revisions\/17477"}],"wp:attachment":[{"href":"https:\/\/tenjin.com\/zh\/wp-json\/wp\/v2\/media?parent=15428"}],"wp:term":[{"taxonomy":"doc_category","embeddable":true,"href":"https:\/\/tenjin.com\/zh\/wp-json\/wp\/v2\/doc_category?post=15428"},{"taxonomy":"glossaries","embeddable":true,"href":"https:\/\/tenjin.com\/zh\/wp-json\/wp\/v2\/glossaries?post=15428"},{"taxonomy":"doc_tag","embeddable":true,"href":"https:\/\/tenjin.com\/zh\/wp-json\/wp\/v2\/doc_tag?post=15428"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}