{"id":17717,"date":"2026-05-21T16:32:49","date_gmt":"2026-05-21T16:32:49","guid":{"rendered":"https:\/\/tenjin.com\/?post_type=docs&#038;p=17717"},"modified":"2026-06-15T10:28:27","modified_gmt":"2026-06-15T10:28:27","password":"","slug":"ios-cloudx","status":"publish","type":"docs","link":"https:\/\/tenjin.com\/vi\/docs\/ios-cloudx\/","title":{"rendered":"iOS \u2013 CloudX"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The Tenjin SDK can listen to CloudX impression level revenue data and send revenue events to Tenjin. This integration will send revenue related data for each ad impression served from CloudX. Here are the steps to integrate:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Install the CloudX iOS SDK by following the integration guide:<a href=\"https:\/\/docs.cloudx.io\/en\/ios\/integration\"> https:\/\/docs.cloudx.io\/en\/ios\/integration<br><br><\/a> Please ensure you have the latest Tenjin iOS SDK installed (&gt;= 1.17.0), which adds CloudX support via the TenjinSDK+CloudXILRD category.<br><\/li>\n\n\n\n<li>Pass the revenue data to Tenjin from the CloudX revenueListener (or CloudXAdRevenueListener) callback, using the following sample code.<br><\/li>\n<\/ol>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Objective-C<\/strong><\/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:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#2e3440ff;font-style:italic;color:#d8dee9ff\"><span style=\"border-bottom:1px solid rgba(201, 218, 248, 0.2)\">Objective-C<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>#import &lt;TenjinSDK\/TenjinSDK.h>\n#import &lt;TenjinSDK\/TenjinSDK+CloudXILRD.h>\n\n\/**\n Invoked when CloudX records an impression and reports revenue for the ad\n *\/\n- (void)didPayRevenueForAd:(CloudXAd *)cloudXAd {\n    NSLog(@\"%s\", __PRETTY_FUNCTION__);\n\n    \/\/ Create JSON object for Tenjin\n    NSDictionary *impressionDict = @{\n        @\"format\":             cloudXAd.adFormat         ?: @\"\",\n        @\"ad_unit_id\":         cloudXAd.adUnitId         ?: @\"\",\n        @\"network_name\":       cloudXAd.networkName      ?: @\"\",\n        @\"network_placement\":  cloudXAd.networkPlacement ?: @\"\",\n        @\"placement\":          cloudXAd.placement        ?: @\"\",\n        @\"revenue\":            @(cloudXAd.revenue),\n        @\"currency\":           @\"USD\"\n    };\n\n    \/\/ Convert to JSON string\n    NSError *error;\n    NSData *jsonData = &#91;NSJSONSerialization dataWithJSONObject:impressionDict\n                                                      options:0\n                                                        error:&amp;error&#93;;\n\n    if (jsonData &amp;&amp; !error) {\n        NSString *jsonString = [&#91;NSString alloc&#93; initWithData:jsonData\n                                                    encoding:NSUTF8StringEncoding];\n\n        \/\/ Send to Tenjin\n        &#91;TenjinSDK cloudXImpressionFromJSON:jsonString&#93;;\n        NSLog(@\"Sent CloudX impression to Tenjin: %@\", jsonString);\n    } else {\n        NSLog(@\"Error creating JSON: %@\", error.localizedDescription);\n    }\n}<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki nord\" style=\"background-color: #2e3440ff\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ECEFF4\">#<\/span><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #5E81AC\"> <\/span><span style=\"color: #ECEFF4\">&lt;<\/span><span style=\"color: #A3BE8C\">TenjinSDK\/TenjinSDK.h<\/span><span style=\"color: #ECEFF4\">&gt;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">#<\/span><span style=\"color: #81A1C1\">import<\/span><span style=\"color: #5E81AC\"> <\/span><span style=\"color: #ECEFF4\">&lt;<\/span><span style=\"color: #A3BE8C\">TenjinSDK\/TenjinSDK+CloudXILRD.h<\/span><span style=\"color: #ECEFF4\">&gt;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/**<\/span><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"> Invoked when CloudX records an impression and reports revenue for the ad<\/span><\/span>\n<span class=\"line\"><span style=\"color: #616E88\"> *\/<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">-<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #81A1C1\">void<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\">didPayRevenueForAd:<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">CloudXAd <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\">cloudXAd <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">    <\/span><span style=\"color: #88C0D0\">NSLog<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">%s<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> __PRETTY_FUNCTION__<\/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\">\/\/ Create JSON object for Tenjin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">NSDictionary<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">impressionDict <\/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\">        <\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">format<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\">:             <\/span><span style=\"color: #D8DEE9\">cloudXAd<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">adFormat<\/span><span style=\"color: #D8DEE9FF\">         <\/span><span style=\"color: #81A1C1\">?:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">@&quot;&quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">ad_unit_id<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\">:         <\/span><span style=\"color: #D8DEE9\">cloudXAd<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">adUnitId<\/span><span style=\"color: #D8DEE9FF\">         <\/span><span style=\"color: #81A1C1\">?:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">@&quot;&quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">network_name<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\">:       <\/span><span style=\"color: #D8DEE9\">cloudXAd<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">networkName<\/span><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #81A1C1\">?:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">@&quot;&quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">network_placement<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\">:  <\/span><span style=\"color: #D8DEE9\">cloudXAd<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">networkPlacement<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">?:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">@&quot;&quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">placement<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\">:          <\/span><span style=\"color: #D8DEE9\">cloudXAd<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">placement<\/span><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">?:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">@&quot;&quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">revenue<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\">:            @<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9\">cloudXAd<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">revenue<\/span><span style=\"color: #ECEFF4\">),<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">currency<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #D8DEE9FF\">:           <\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">USD<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/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\">\/\/ Convert to JSON string<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">NSError<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">error<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #8FBCBB\">NSData<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">jsonData <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">NSJSONSerialization <\/span><span style=\"color: #88C0D0\">dataWithJSONObject<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\">impressionDict<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                                                      <\/span><span style=\"color: #88C0D0\">options<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #B48EAD\">0<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                                                        <\/span><span style=\"color: #88C0D0\">error<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #81A1C1\">&amp;<\/span><span style=\"color: #D8DEE9FF\">error<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #81A1C1\">if<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #D8DEE9FF\">jsonData <\/span><span style=\"color: #81A1C1\">&amp;&amp;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">!<\/span><span style=\"color: #D8DEE9FF\">error<\/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: #8FBCBB\">NSString<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">*<\/span><span style=\"color: #D8DEE9FF\">jsonString <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">[&#91;<\/span><span style=\"color: #8FBCBB\">NSString<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">alloc<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">initWithData<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\">jsonData<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">                                                    <\/span><span style=\"color: #88C0D0\">encoding<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #81A1C1\">NSUTF8StringEncoding<\/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\">\/\/ Send to Tenjin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #D8DEE9FF\">TenjinSDK <\/span><span style=\"color: #88C0D0\">cloudXImpressionFromJSON<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\">jsonString<\/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: #88C0D0\">NSLog<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">Sent CloudX impression to Tenjin: %@<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> jsonString<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #81A1C1\">;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">    <\/span><span style=\"color: #ECEFF4\">}<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">else<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">{<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ECEFF4\">        <\/span><span style=\"color: #88C0D0\">NSLog<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">@&quot;<\/span><span style=\"color: #A3BE8C\">Error creating JSON: %@<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #ECEFF4\">,<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">error<\/span><span style=\"color: #ECEFF4\">.<\/span><span style=\"color: #D8DEE9\">localizedDescription<\/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 class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Swift<\/strong><\/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:1.125rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.625rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#2e3440ff;font-style:italic;color:#d8dee9ff\"><span style=\"border-bottom:1px solid rgba(201, 218, 248, 0.2)\">Swift<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#d8dee9ff;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>import TenjinSDK\n\n\/\/ Conform to CloudX's revenue listener protocol on your ad delegate\nextension MyAdDelegate: CloudXAdRevenueListener {\n\n    func onAdRevenuePaid(_ cloudXAd: CloudXAd) {\n        let impressionDict: &#91;String: Any&#93; = &#91;\n            \"ad_format\":         cloudXAd.adFormat         ?? \"\",\n            \"ad_unit_id\":        cloudXAd.adUnitId         ?? \"\",\n            \"network_name\":      cloudXAd.networkName      ?? \"\",\n            \"network_placement\": cloudXAd.networkPlacement ?? \"\",\n            \"placement\":         cloudXAd.placement        ?? \"\",\n            \"revenue\":           cloudXAd.revenue,\n            \"currency\":          \"USD\"\n        &#93;\n\n        guard\n            let jsonData = try? JSONSerialization.data(withJSONObject: impressionDict, options: []),\n            let jsonString = String(data: jsonData, encoding: .utf8)\n        else {\n            print(\"Error creating CloudX impression JSON\")\n            return\n        }\n\n        \/\/ Send to Tenjin\n        TenjinSDK.cloudXImpression(fromJSON: jsonString)\n        print(\"Sent CloudX impression to Tenjin: \\(jsonString)\")\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\">import<\/span><span style=\"color: #D8DEE9FF\"> TenjinSDK<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #616E88\">\/\/ Conform to CloudX&#39;s revenue listener protocol on your ad delegate<\/span><\/span>\n<span class=\"line\"><span style=\"color: #81A1C1\">extension<\/span><span style=\"color: #D8DEE9FF\"> MyAdDelegate<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB; font-weight: bold\">CloudXAdRevenueListener <\/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\">func<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #88C0D0\">onAdRevenuePaid<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">_<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #D8DEE9\">cloudXAd<\/span><span style=\"color: #D8DEE9FF\">: CloudXAd<\/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\">let<\/span><span style=\"color: #D8DEE9FF\"> impressionDict: <\/span><span style=\"color: #ECEFF4\">&#91;<\/span><span style=\"color: #8FBCBB\">String<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">Any<\/span><span style=\"color: #ECEFF4\">&#93;<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> &#91;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">ad_format<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #D8DEE9FF\">         cloudXAd.<\/span><span style=\"color: #D8DEE9\">adFormat<\/span><span style=\"color: #D8DEE9FF\">         <\/span><span style=\"color: #81A1C1\">??<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;&quot;<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">ad_unit_id<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #D8DEE9FF\">        cloudXAd.<\/span><span style=\"color: #D8DEE9\">adUnitId<\/span><span style=\"color: #D8DEE9FF\">         <\/span><span style=\"color: #81A1C1\">??<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;&quot;<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">network_name<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #D8DEE9FF\">      cloudXAd.<\/span><span style=\"color: #D8DEE9\">networkName<\/span><span style=\"color: #D8DEE9FF\">      <\/span><span style=\"color: #81A1C1\">??<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;&quot;<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">network_placement<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #D8DEE9FF\"> cloudXAd.<\/span><span style=\"color: #D8DEE9\">networkPlacement<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">??<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;&quot;<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">placement<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #D8DEE9FF\">         cloudXAd.<\/span><span style=\"color: #D8DEE9\">placement<\/span><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">??<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #ECEFF4\">&quot;&quot;<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">revenue<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #D8DEE9FF\">           cloudXAd.<\/span><span style=\"color: #D8DEE9\">revenue<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">currency<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #81A1C1\">:<\/span><span style=\"color: #D8DEE9FF\">          <\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">USD<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        &#93;<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #81A1C1\">guard<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">let<\/span><span style=\"color: #D8DEE9FF\"> jsonData <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #81A1C1\">try?<\/span><span style=\"color: #D8DEE9FF\"> JSONSerialization.<\/span><span style=\"color: #88C0D0\">data<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">withJSONObject<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> impressionDict, <\/span><span style=\"color: #88C0D0\">options<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> []<\/span><span style=\"color: #ECEFF4\">)<\/span><span style=\"color: #D8DEE9FF\">,<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">            <\/span><span style=\"color: #81A1C1\">let<\/span><span style=\"color: #D8DEE9FF\"> jsonString <\/span><span style=\"color: #81A1C1\">=<\/span><span style=\"color: #D8DEE9FF\"> <\/span><span style=\"color: #8FBCBB\">String<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">data<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> jsonData, <\/span><span style=\"color: #88C0D0\">encoding<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> .utf8<\/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: #88C0D0\">print<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Error creating CloudX impression JSON<\/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: #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: #ECEFF4\">        <\/span><span style=\"color: #616E88\">\/\/ Send to Tenjin<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        TenjinSDK.<\/span><span style=\"color: #88C0D0\">cloudXImpression<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #88C0D0\">fromJSON<\/span><span style=\"color: #ECEFF4\">:<\/span><span style=\"color: #D8DEE9FF\"> jsonString<\/span><span style=\"color: #ECEFF4\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #D8DEE9FF\">        <\/span><span style=\"color: #88C0D0\">print<\/span><span style=\"color: #ECEFF4\">(<\/span><span style=\"color: #ECEFF4\">&quot;<\/span><span style=\"color: #A3BE8C\">Sent CloudX impression to Tenjin: <\/span><span style=\"color: #81A1C1\">\\(<\/span><span style=\"color: #A3BE8C\">jsonString<\/span><span style=\"color: #81A1C1\">)<\/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: #ECEFF4\">}<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Attach the listener to each ad object (banner, MREC, interstitial, rewarded) before loading the ad, for example:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>bannerAd.revenueListener = self<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here is an example impression level revenue data entry from CloudX:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Parameter<\/strong><\/td><td><strong>Required?<\/strong><\/td><td><strong>Example<\/strong><\/td><\/tr><tr><td>format<\/td><td>No<\/td><td>&#8220;banner&#8221;, &#8220;mrec&#8221;, &#8220;interstitial&#8221;, &#8220;rewarded&#8221;<\/td><\/tr><tr><td>ad_unit_id<\/td><td>No<\/td><td>abc-123-banner<\/td><\/tr><tr><td>network_name<\/td><td>No<\/td><td>meta<\/td><\/tr><tr><td>network_placement<\/td><td>No<\/td><td>1234567890_9876543210<\/td><\/tr><tr><td>placement<\/td><td>No<\/td><td>home_screen<\/td><\/tr><tr><td>revenue<\/td><td>Yes<\/td><td>0.0123<\/td><\/tr><tr><td>currency<\/td><td>No<\/td><td>USD<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">reference:<a href=\"https:\/\/docs.cloudx.io\/en\/ios\/integration\"> https:\/\/docs.cloudx.io\/en\/ios\/integration<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>SDK Tenjin c\u00f3 th\u1ec3 thu th\u1eadp d\u1eef li\u1ec7u doanh thu \u1edf c\u1ea5p \u0111\u1ed9 hi\u1ec3n th\u1ecb qu\u1ea3ng c\u00e1o t\u1eeb CloudX v\u00e0 g\u1eedi c\u00e1c s\u1ef1 ki\u1ec7n doanh thu \u0111\u1ebfn Tenjin. T\u00edch h\u1ee3p n\u00e0y s\u1ebd g\u1eedi d\u1eef li\u1ec7u li\u00ean quan \u0111\u1ebfn doanh thu cho m\u1ed7i l\u1ea7n hi\u1ec3n th\u1ecb qu\u1ea3ng c\u00e1o \u0111\u01b0\u1ee3c ph\u00e2n ph\u1ed1i t\u1eeb CloudX. D\u01b0\u1edbi \u0111\u00e2y l\u00e0 c\u00e1c b\u01b0\u1edbc \u0111\u1ec3 t\u00edch h\u1ee3p: Objective-C Swift G\u1eafn tr\u00ecnh l\u1eafng nghe v\u00e0o t\u1eebng \u0111\u1ed1i t\u01b0\u1ee3ng qu\u1ea3ng c\u00e1o (banner, MREC, interstitial, rewarded) tr\u01b0\u1edbc khi t\u1ea3i qu\u1ea3ng c\u00e1o, \u0111\u1ec3\u2026<\/p>","protected":false},"author":17,"featured_media":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"footnotes":""},"doc_category":[250],"glossaries":[],"doc_tag":[],"class_list":["post-17717","docs","type-docs","status-publish","hentry","doc_category-cloudx"],"acf":[],"year_month":"2026-07","word_count":610,"total_views":0,"reactions":{"happy":0,"normal":0,"sad":0},"author_info":{"name":"Anurag","author_nicename":"anurag","author_url":"https:\/\/tenjin.com\/vi\/blog\/author\/anurag\/"},"doc_category_info":[{"term_name":"CloudX","term_url":"https:\/\/tenjin.com\/vi\/docs\/category\/cloudx\/"}],"doc_tag_info":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>iOS \u2013 CloudX | Tenjin<\/title>\n<meta name=\"description\" content=\"iOS \u2013 CloudX Tenjin | %\" \/>\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\/vi\/docs\/ios-cloudx\/\" \/>\n<meta property=\"og:locale\" content=\"vi_VN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"iOS \u2013 CloudX | Tenjin\" \/>\n<meta property=\"og:description\" content=\"iOS \u2013 CloudX Tenjin | %\" \/>\n<meta property=\"og:url\" content=\"https:\/\/tenjin.com\/vi\/docs\/ios-cloudx\/\" \/>\n<meta property=\"og:site_name\" content=\"Tenjin\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-15T10:28:27+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:site\" content=\"@TenjinMMP\" \/>\n<meta name=\"twitter:label1\" content=\"\u01af\u1edbc t\u00ednh th\u1eddi gian \u0111\u1ecdc\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 ph\u00fat\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/tenjin.com\\\/docs\\\/ios-cloudx\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/tenjin.com\\\/docs\\\/ios-cloudx\\\/\"},\"author\":{\"name\":\"anurag\",\"@id\":\"https:\\\/\\\/tenjin.com\\\/#\\\/schema\\\/person\\\/e039df04bf002f4a0825fce9d6d5f13b\"},\"headline\":\"iOS \u2013 CloudX\",\"datePublished\":\"2026-05-21T16:32:49+00:00\",\"dateModified\":\"2026-06-15T10:28:27+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/tenjin.com\\\/docs\\\/ios-cloudx\\\/\"},\"wordCount\":165,\"publisher\":{\"@id\":\"https:\\\/\\\/tenjin.com\\\/#organization\"},\"inLanguage\":\"vi\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/tenjin.com\\\/docs\\\/ios-cloudx\\\/\",\"url\":\"https:\\\/\\\/tenjin.com\\\/docs\\\/ios-cloudx\\\/\",\"name\":\"iOS \u2013 CloudX | Tenjin\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/tenjin.com\\\/#website\"},\"datePublished\":\"2026-05-21T16:32:49+00:00\",\"dateModified\":\"2026-06-15T10:28:27+00:00\",\"description\":\"iOS \u2013 CloudX Tenjin | %\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/tenjin.com\\\/docs\\\/ios-cloudx\\\/#breadcrumb\"},\"inLanguage\":\"vi\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/tenjin.com\\\/docs\\\/ios-cloudx\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/tenjin.com\\\/docs\\\/ios-cloudx\\\/#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\":\"iOS \u2013 CloudX\"}]},{\"@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\":\"vi\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/tenjin.com\\\/#organization\",\"name\":\"Tenjin\",\"url\":\"https:\\\/\\\/tenjin.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"vi\",\"@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\\\/e039df04bf002f4a0825fce9d6d5f13b\",\"name\":\"anurag\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"vi\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/dc89d050d7f8053be5b8856ebaaabf82adb98e0ea57d1579b8397fb09de189c8?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/dc89d050d7f8053be5b8856ebaaabf82adb98e0ea57d1579b8397fb09de189c8?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/dc89d050d7f8053be5b8856ebaaabf82adb98e0ea57d1579b8397fb09de189c8?s=96&d=mm&r=g\",\"caption\":\"anurag\"},\"url\":\"https:\\\/\\\/tenjin.com\\\/vi\\\/blog\\\/author\\\/anurag\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"iOS \u2013 CloudX | Tenjin","description":"iOS \u2013 CloudX Tenjin | %","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\/vi\/docs\/ios-cloudx\/","og_locale":"vi_VN","og_type":"article","og_title":"iOS \u2013 CloudX | Tenjin","og_description":"iOS \u2013 CloudX Tenjin | %","og_url":"https:\/\/tenjin.com\/vi\/docs\/ios-cloudx\/","og_site_name":"Tenjin","article_modified_time":"2026-06-15T10:28:27+00:00","twitter_card":"summary_large_image","twitter_site":"@TenjinMMP","twitter_misc":{"\u01af\u1edbc t\u00ednh th\u1eddi gian \u0111\u1ecdc":"1 ph\u00fat"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/tenjin.com\/docs\/ios-cloudx\/#article","isPartOf":{"@id":"https:\/\/tenjin.com\/docs\/ios-cloudx\/"},"author":{"name":"anurag","@id":"https:\/\/tenjin.com\/#\/schema\/person\/e039df04bf002f4a0825fce9d6d5f13b"},"headline":"iOS \u2013 CloudX","datePublished":"2026-05-21T16:32:49+00:00","dateModified":"2026-06-15T10:28:27+00:00","mainEntityOfPage":{"@id":"https:\/\/tenjin.com\/docs\/ios-cloudx\/"},"wordCount":165,"publisher":{"@id":"https:\/\/tenjin.com\/#organization"},"inLanguage":"vi"},{"@type":"WebPage","@id":"https:\/\/tenjin.com\/docs\/ios-cloudx\/","url":"https:\/\/tenjin.com\/docs\/ios-cloudx\/","name":"iOS \u2013 CloudX | Tenjin","isPartOf":{"@id":"https:\/\/tenjin.com\/#website"},"datePublished":"2026-05-21T16:32:49+00:00","dateModified":"2026-06-15T10:28:27+00:00","description":"iOS \u2013 CloudX Tenjin | %","breadcrumb":{"@id":"https:\/\/tenjin.com\/docs\/ios-cloudx\/#breadcrumb"},"inLanguage":"vi","potentialAction":[{"@type":"ReadAction","target":["https:\/\/tenjin.com\/docs\/ios-cloudx\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/tenjin.com\/docs\/ios-cloudx\/#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":"iOS \u2013 CloudX"}]},{"@type":"WebSite","@id":"https:\/\/tenjin.com\/#website","url":"https:\/\/tenjin.com\/","name":"Th\u1ea7n Tenjin","description":"Ph\u00e1t tri\u1ec3n \u0111\u01a1n gi\u1ea3n","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":"vi"},{"@type":"Organization","@id":"https:\/\/tenjin.com\/#organization","name":"Th\u1ea7n Tenjin","url":"https:\/\/tenjin.com\/","logo":{"@type":"ImageObject","inLanguage":"vi","@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\/e039df04bf002f4a0825fce9d6d5f13b","name":"Anurag","image":{"@type":"ImageObject","inLanguage":"vi","@id":"https:\/\/secure.gravatar.com\/avatar\/dc89d050d7f8053be5b8856ebaaabf82adb98e0ea57d1579b8397fb09de189c8?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/dc89d050d7f8053be5b8856ebaaabf82adb98e0ea57d1579b8397fb09de189c8?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/dc89d050d7f8053be5b8856ebaaabf82adb98e0ea57d1579b8397fb09de189c8?s=96&d=mm&r=g","caption":"anurag"},"url":"https:\/\/tenjin.com\/vi\/blog\/author\/anurag\/"}]}},"knowledge_base_info":[],"knowledge_base_slug":[],"_links":{"self":[{"href":"https:\/\/tenjin.com\/vi\/wp-json\/wp\/v2\/docs\/17717","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tenjin.com\/vi\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/tenjin.com\/vi\/wp-json\/wp\/v2\/types\/docs"}],"author":[{"embeddable":true,"href":"https:\/\/tenjin.com\/vi\/wp-json\/wp\/v2\/users\/17"}],"replies":[{"embeddable":true,"href":"https:\/\/tenjin.com\/vi\/wp-json\/wp\/v2\/comments?post=17717"}],"version-history":[{"count":3,"href":"https:\/\/tenjin.com\/vi\/wp-json\/wp\/v2\/docs\/17717\/revisions"}],"predecessor-version":[{"id":17782,"href":"https:\/\/tenjin.com\/vi\/wp-json\/wp\/v2\/docs\/17717\/revisions\/17782"}],"wp:attachment":[{"href":"https:\/\/tenjin.com\/vi\/wp-json\/wp\/v2\/media?parent=17717"}],"wp:term":[{"taxonomy":"doc_category","embeddable":true,"href":"https:\/\/tenjin.com\/vi\/wp-json\/wp\/v2\/doc_category?post=17717"},{"taxonomy":"glossaries","embeddable":true,"href":"https:\/\/tenjin.com\/vi\/wp-json\/wp\/v2\/glossaries?post=17717"},{"taxonomy":"doc_tag","embeddable":true,"href":"https:\/\/tenjin.com\/vi\/wp-json\/wp\/v2\/doc_tag?post=17717"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}