Integration
Singular ad-revenue connector for CloudX iOS SDK. Forwards CloudX ad revenue to Singular with no publisher glue code.
Connectors pass data between the CloudX SDK and another product. The Singular connector forwards CloudX ad revenue to your mobile measurement partner (MMP) so ad revenue appears alongside your other Singular 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
pod 'CloudXSingularConnector', '~> 12.6.0.0'pod install --repo-updateNo code changes are required. The connector never initializes Singular; it uses your existing Singular setup and SDK 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:
#import <CloudXSingularConnector/CloudXSingularConnector.h>
CloudXSingularConnectorRegister();CloudXSingularConnectorRegister()Requirements
- CloudXCore
3.6.0or newer — the first version that ships the global ad-revenue delegate API the connector attaches through. - Your app already integrates and initializes the Singular SDK with your own SDK key and secret. The connector never bundles or initializes Singular; CocoaPods dedupes the dependency against your app’s existing
Singular-SDKpod, so your runtime version is the one used. - A supported Singular SDK version:
Singular-SDK12.6.0or newer. There is no upper bound.12.6.0is the floor because it introduced the correctly spelled ad-revenue initializer the connector calls.
What gets reported
The connector sends one [Singular adRevenue:] event per CloudX-won impression, across all CloudX ad formats — banner, MREC, interstitial, rewarded, native, and app open. Each event carries:
| Singular field | Value |
|---|---|
| Ad platform | CloudX |
| Currency | USD |
| Revenue | The CloudX revenue estimate for the impression |
| Revenue precision | estimated |
| Network name | The winning ad network, or CloudX when the network is not reported |
| Ad unit id | The CloudX ad unit id |
| Ad type | BANNER, MREC, INTERSTITIAL, REWARDED, NATIVE, or APP_OPEN |
| Ad placement name | The CloudX placement |
| Ad unit name | The network placement |
The ad type names match the CloudX Android connector exactly, so grouping Singular revenue by ad type gives one bucket per format across both platforms.
Optional fields are omitted when CloudX reports them empty, so an event may arrive without an ad unit id, ad placement name, or ad unit name. The Android connector always sends the ad unit id, so a report joining the two platforms on that field will show gaps on iOS only.
Compatibility
| Connector version | Singular SDK | Minimum CloudXCore |
|---|---|---|
12.6.0.0 | Singular-SDK >= 12.6.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:
final class MyAdRevenueDelegate: NSObject, CLXAdRevenueDelegate {
func didPayRevenue(for ad: CLXAd) {
// Forward to Singular, or any other destination, using your own mapping.
}
}
CloudXCore.addAdRevenueDelegate(myAdRevenueDelegate)[CloudXCore addAdRevenueDelegate:myAdRevenueDelegate];+[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