> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cloudx.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Integration

> Adjust ad-revenue connector for CloudX iOS SDK. Forwards CloudX ad revenue to Adjust with no publisher glue code.

Connectors pass data between the CloudX SDK and another product. The Adjust connector forwards CloudX ad revenue to your mobile measurement partner (MMP) so ad revenue appears alongside your other Adjust data and feeds ROAS measurement. Add the dependency and revenue reporting is automatic — the connector registers itself with the CloudX SDK at load time, joining the same global ad-revenue delegate list that `CloudXCore.addAdRevenueDelegate(_:)` uses.

## Installation

### CocoaPods

```ruby Podfile theme={null}
pod 'CloudXAdjustConnector', '~> 5.0.0.0'
```

```bash theme={null}
pod install --repo-update
```

No code changes are required. The connector never initializes Adjust; it uses your existing Adjust setup and app token.

### Manual registration

The pod sets `-ObjC` on your target so the connector's `+load` runs in the host app and it self-registers. If your build does not link with `-ObjC`, register it once before or after initializing the CloudX SDK:

<CodeGroup>
  ```objc Objective-C theme={null}
  #import <CloudXAdjustConnector/CloudXAdjustConnector.h>

  CloudXAdjustConnectorRegister();
  ```

  ```swift Swift theme={null}
  CloudXAdjustConnectorRegister()
  ```
</CodeGroup>

## Requirements

* CloudXCore `3.6.0` or newer — the first version that ships the global ad-revenue delegate API the connector attaches through.
* Your app already integrates and initializes the Adjust SDK with your own app token. The connector never bundles or initializes Adjust; CocoaPods dedupes the dependency against your app's existing `Adjust` pod, so your runtime version is the one used.
* A supported Adjust SDK version: `Adjust` `5.0.0` or newer (the v5 line). There is no upper bound.

## What gets reported

The connector creates one Adjust `ADJAdRevenue` event per CloudX-won impression, across all CloudX ad formats — banner, MREC, interstitial, rewarded, native, and app open. Each event carries the winning ad network, the CloudX revenue estimate for the impression in USD, and callback parameters with the CloudX ad unit, format (`ad_type`), and placement.

The `ad_type` format names match the CloudX Android connector exactly, so grouping Adjust revenue by `ad_type` gives one bucket per format across both platforms.

<Note>
  Revenue is reported on Adjust's generic `publisher_sdk` source — Adjust has confirmed this is the supported path until a dedicated CloudX source ships in a future Adjust release. Revenue lands in Adjust and feeds ROAS identically; it just appears under the generic publisher source rather than a named CloudX one. When the named source ships, historical revenue stays under `publisher_sdk`, so a report spanning the cutover must union both sources.
</Note>

<Warning>
  If your app already builds `ADJAdRevenue` events from a CloudX ad-revenue delegate, remove that code when you add this connector. Otherwise every impression is reported to Adjust twice.
</Warning>

## Compatibility

| Connector version | Adjust SDK          | Minimum CloudXCore |
| ----------------- | ------------------- | ------------------ |
| `5.0.0.0`         | `Adjust` `>= 5.0.0` | `3.6.0`            |

## Reporting revenue yourself instead

If you would rather control the reporting call, skip the connector and register your own ad-revenue delegate directly:

<CodeGroup>
  ```swift Swift theme={null}
  final class MyAdRevenueDelegate: NSObject, CLXAdRevenueDelegate {
      func didPayRevenue(for ad: CLXAd) {
          // Forward to Adjust, or any other destination, using your own mapping.
      }
  }

  CloudXCore.addAdRevenueDelegate(myAdRevenueDelegate)
  ```

  ```objc Objective-C theme={null}
  [CloudXCore addAdRevenueDelegate:myAdRevenueDelegate];
  ```
</CodeGroup>

`+[CloudXCore addAdRevenueDelegate:]` is the stable public surface; `removeAdRevenueDelegate:` unregisters. Use either the connector or your own delegate — not both.

## Support

For support, contact [mobile@cloudx.io](mailto:mobile@cloudx.io)
