Get Started
Release version: 3.0.0 | Release date: 23.05.2022
Follow this guide to get the best out of Appodeal.
The Appodeal SDK gives you access to 70+ Ad Demand Sources and makes them compete against each other in a real-time auction, maximizing your ad revenues. The Appodeal SDK also provides In-app Bidding, Automatic UA Optimization, User Segmentation & A/B Testing, Cross-Promotion and Direct Deals, Instant Payouts, and much more.
The following document shows how to integrate Appodeal in your iOS project with your desired networks via CocoaPods and manual setup, and configure all your ad formats.
Minimum requirements:
- iOS 10.0 or higher. You still can integrate Appodeal SDK into a project with a lower value of minimum iOS version. However, on devices that don’t support iOS 10.0+ our SDK will just be disabled.
- Appodeal SDK is compatible with both ARC and non-ARC projects.
- Use Xcode 13 or higher.
You can use our demo app as a reference project.
Step 1. Import SDK
Fat and CocoaPods 3.0.0 versions work in pure Obj-C, and Swift as well as mixed Obj-C or Swift projects.
If your project is a pure Objective-C project, you should add an empty Swift file. For example, Dummy.swift
.
1. Podfile configuration
CocoaPods 1.10.0 or higher is required. To get information about CocoaPods update, please see this documentation.
Please select the ad types that are used in your application and the ad networks that you want to include. Then press Generate Podfile
button and copy the resulting configuration in your project's Podfile.
2. Call pod install
Call $ pod install
to install CocoaPods dependencies or $ pod update
to update. If you do not have an installed pod, Install CocoaPods to simplify dependency management
sudo gem install cocoapods
rm -rf "${HOME}/Library/Caches/CocoaPods" rm -rf "`pwd`/Pods/" pod update
source 'https://github.com/appodeal/CocoaPods.git' source 'https://cdn.cocoapods.org/'
Step 2. Prepare your application
2.1 Add SKAdNetworkIds
Ad networks used in Appodeal mediation support conversion tracking using Apple's SKAdNetwork
, which means ad networks are able to attribute an app install even when IDFA is unavailable. To enable this functionality, you will need to update the SKAdNetworkItems
key with an additional dictionary in your Info.plist
.
- Select Info.plist in the Project navigator in Xcode
- Click the Add button (+) beside a key in the property list editor and press Return
- Type the key name SKAdNetworkItems
- Choose an Array type
- Add Key-Value pair where the key is SKAdNetworkIdentifier and the value is the ad network identifier
There is SKAdNetworks IDs in Info.plist
format:
2.2 Configure App Transport Security settings
In order to serve ads, the SDK requires you to allow arbitrary loads. Set up the following keys in info.plist of your app:
- Go to your info.plist file, then press Add+ anywhere in the first column of the key list.
- Add App Transport Security Settings key and set its type to Dictionary in the second column.
- Press Add+ at the end of the name App Transport Security Settings key and choose Allow Arbitrary loads . Set its type to Boolean and its value to Yes .
You can also add the key to your info.plist directly, using this code:
<key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict>
2.3 Other feature usage descriptions
To improve ad performance the following entries should be added:
- GADApplicationIdentifier - When including AdMob in your project, you must also add your AdMob app ID to your info.plist . Use the key
GADApplicationIdentifier
with the value being your AdMob app ID.
For more information about Admob sync check out our FAQ. - NSUserTrackingUsageDescription - Starting from iOS 14, using IDFA requires permission from the user. The following entry must be added in order to improve ad performance.
- NSLocationWhenInUseUsageDescription - Entry is required if your application allows Appodeal SDK to use location data.
- NSCalendarsUsageDescription - Recommended by some ad networks.
<key>GADApplicationIdentifier</key> <string>YOUR_ADMOB_APP_ID</string> <key>NSUserTrackingUsageDescription</key> <string><App Name> needs your advertising identifier to provide personalised advertising experience tailored to you</string> <key>NSLocationWhenInUseUsageDescription</key> <string><App Name> needs your location for analytics and advertising purposes</string> <key>NSCalendarsUsageDescription</key> <string><App Name> needs your calendar to provide personalised advertising experience tailored to you</string>
Step 3. Initialize SDK
Before initialisation, we highly recommend to receive all required permissions from the user. Please follow this Data Protection guide.
Import Appodeal into AppDelegate (AppDelegate.m) class and initialise the SDK:
import Appodeal
didFinishLaunchingWithOptions
function:
@UIApplicationMain final class MyAppDelegate: UIResponder, UIApplicationDelegate, AppodealInitializationDelegate { func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil ) -> Bool { Appodeal.setAutocache(false, types: .interstitial) Appodeal.setLogLevel(.verbose) // New optional delegate for initialization completion Appodeal.setInitializationDelegate(self) /// Any other pre-initialization /// app specific logic Appodeal.initialize( withApiKey: "APP_KEY", types: .interstitial ) return true } func appodealSDKDidInitialize() { // Appodeal SDK did complete initialization } }
adTypes
is a parameter responsible for ad formats (ex. AppodealAdTypeRewardedVideo, AppodealAdTypeInterstitial
).consent
is an object responsible for agreement to having user's personal data collected according to GDPR and CCPA laws. You can find more information here.YOUR_APP_KEY
with the actual app key. You can find it in the list of applications in your personal account.Step 4. Configure ad types
Appodeal SDK is now imported and you're ready to implement an ad. Appodeal offers a number of different ad formats, so you can choose the one that best fits your app's user experience.
Full-screen ad that engages users with a captivating video.
User-initiated ads where users can earn in-app rewards in exchange for viewing a video ad.
Traditional ad format that neatly places a small ad at the top or bottom of the screen.
Medium-size ads that appear within in-app content the same as banner ads.
Ad format that seamlessly fits within the context of an app’s content.
Step 5. Publish your application
Update App Store IDFA usage. When you submit your application to the App Store you need to update its "Advertising Identifier (IDFA)" settings in order to comply with Apple advertising policy.
- Go to the Advertising Identifier section.
- Set Yes on the right panel.
- Tick Serve advertisements within the app .
- Tick confirmation box under Limit Ad tracking setting in iOS .
Configure App Privacy according to this doc:
Step 6. Add app-ads.txt file
The app-ads.txt file is a text file which provides a mechanism for publishers to declare their authorized digital sellers. Created by IAB, it is an extension of the original ads.txt standard that was used for the same purpose in web advertising. It helps ad networks and DSPs easily verify whether an ad network or exchange they are buying your traffic from is actually allowed to sell it.
Adding app-ads.txt augments trust between advertisers, demand partners and publishers. If publishers do not have their own website where they can place an add app-ads.txt file, premium brand demand may be unavailable to them.
If you don't have app-ads.txt file yet:
Add developer website URL to your Google Play and App Store apps.
Download Appodeal's app-ads.txt from this page.
Upload app-ads.txt file to the root path of your developer website (it should look like this: example.com/app-ads.txt).
If you already have app-ads.txt:
Copy Appodeal's app-ads.txt from this page.
Paste the content to your app-ads.txt.
Known issues
1. AdColony presentation issue
AdColony always checks if the key window’s rootViewController
matches the passed rootViewController
. Otherwise, Adcolony fails to show the ad. If your app has multiple independent windows, you can get a message with this or similar text:
UIViewController
for your app. Please ensure that your key UIWindow
has a rootViewController
.It means that the rootViewController
that was used in showAd
doesn't belong to the first window in the array.
2. AVAudioSession issue
If you use video or audio sessions in your app (usually for music players), you may encounter a problem with incorrect audio playback when loading an AdMob ad.
To solve this problem, add the following method to Your AppDelegate:
import GoogleMobileAds final class AppDelegate ... { func application( _ application: UIApplication, didFinishLaunchingWithOptions launchOptions:[UIApplication.LaunchOptionsKey: Any]? ) -> Bool { GADMobileAds.sharedInstance().audioVideoManager.audioSessionIsApplicationManaged = true return true } }
You can find more information here.
3. MyTarget auto-initialisation issue
MyTarget supports auto-initialisation that may cause a crash at application startup. To disable this behaviour add the following key value pair into info.plist:
<key>MyTargetSDKAutoInitMode</key> <false/> </key>