> ## 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

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

Connectors pass data between the CloudX SDK and another product. The AppsFlyer connector forwards CloudX ad revenue to your mobile measurement partner (MMP) so ad revenue appears alongside your other AppsFlyer data. 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 'CloudXAppsFlyerConnector', '~> 6.15.0.0'
```

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

No code changes are required. The connector never initializes AppsFlyer; it uses your existing AppsFlyer setup and dev key.

### 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 <CloudXAppsFlyerConnector/CloudXAppsFlyerConnector.h>

  CloudXAppsFlyerConnectorRegister();
  ```

  ```swift Swift theme={null}
  CloudXAppsFlyerConnectorRegister()
  ```
</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 AppsFlyer SDK with your own dev key. The connector never bundles or initializes AppsFlyer; CocoaPods dedupes the dependency against your app's existing `AppsFlyerFramework`, so your runtime version is the one used.
* A supported AppsFlyer SDK version: `AppsFlyerFramework` `6.15.0` or newer. There is no upper bound — AppsFlyer's integrated ad-revenue API is stable across the 6.15+ and 7.x lines.

## What gets reported

The connector calls AppsFlyer's `logAdRevenue` once per CloudX-won impression, across all CloudX ad formats — banner, MREC, interstitial, rewarded, native, and app open. Each call carries the winning ad network, the CloudX revenue estimate for the impression in USD, and the CloudX ad unit, format, and placement.

<Warning>
  If your app already calls `AppsFlyerLib.shared().logAdRevenue` from a CloudX ad-revenue delegate, remove that code when you add this connector. Otherwise every impression is reported to AppsFlyer twice.
</Warning>

## Compatibility

| Connector version | AppsFlyer SDK                    | Minimum CloudXCore |
| ----------------- | -------------------------------- | ------------------ |
| `6.15.0.0`        | `AppsFlyerFramework` `>= 6.15.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 AppsFlyer, 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)
