> For the complete documentation index, see [llms.txt](https://aatkit.gitbook.io/ios-integration/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://aatkit.gitbook.io/ios-integration/advanced/ad-quality.md).

# Ad Quality

{% hint style="info" %}
AdQuality is supported only with AATKit version 3.10.x and later.

For better ad experience, AATKit added support for ad quality management of fullscreen and rewarded video formats using [AppHarbr](https://appharbr.com/).

**If you have an own AppHarbr account, you can use this feature by following the below steps.**
{% endhint %}

For better ad experience, AATKit added support for ad quality management in fullscreen and rewarded video formats using AppHarbr SDK.

Integration Steps:

* Add AppHarbr SDK
  * Cocoapdos:
    * Add `pod 'AATKit/AppHarbr'` to your Podfile.
  * Swift Package Manager:

    * Follow the same SPM steps [here](https://aatkit.gitbook.io/ios-integration/start/setup/swift-package-manager).
    * Repeat the last step, and add `AATKit-AppHarbr`.

    <figure><img src="https://3006681101-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FC07HayBzqyav5R2yFhOr%2Fuploads%2FAwg7WIWGXzvxHbCK25gT%2FScreenshot%202025-04-17%20at%2011.54.45%E2%80%AFAM.png?alt=media&amp;token=7b5be638-ba21-4941-9492-4aaad1251d4e" alt=""><figcaption></figcaption></figure>
* Create an ad quality manager instance:
  * `let adQualityManager = AATAppHarbrManager(key: "<APPHARBR_KEY>")`
* Pass the ad quality manager to the AAT configuration:

  ```
  let configuration = AATConfiguration()
  ...
  configuration.adQualityManager = adQualityManager
  ...
  AATSDK.initAATKit(with: configuration)
  ```
* Faulty ads are automatically discarded, and AATKit will move to the next rule in the waterfall.
* **Optional:** You can get notified of the faulty ads by making your class conform to `AATAdQualityDelegate` and pass it to the fullscreen/RV placement:
  * `placement?.adQualityDelegate = self`
  * You will be notified via the following delegate methods:

    ```
    @objc public protocol AATAdQualityDelegate {
        func didAdIncident(placement: AATPlacement, blockReasons: [String], reportReasons: [String], adNetworkSdk: AATAdNetwork)
        func didAdIncidentOnDisplay(placement: AATPlacement, blockReasons: [String], reportReasons: [String], adNetworkSdk: AATAdNetwork) -> Boolfunc didAdIncidentOnDisplay(placement: AATPlacement, blockReasons: [String], reportReasons: [String], adNetworkSdk: AATAdNetwork)
        func didAdVerified(placement: AATPlacement, adNetworkSdk: AATAdNetwork)
        func didAdNotVerified(placement: AATPlacement, error: Error, adNetworkSdk: AATAdNetwork)
    }
    ```
