Publisher iOS

I have followed your integration instructions, but see no ads in my app.

To help trouble-shoot the lack of ads in your app, make sure you add the following lines into your code:

  • Verify the ad unit name in your code is the same capitalization as the ad unit configured on the dev.flurry.com
  • Check the ad unit placement is defined to be either Stream, Full Screen, Banner Top or Banner Bottom. If you originally created your ad unit from the application the placement would not be declared - it would say Undetermined Placement. On the flurry dev portal go to App Publishing tab, on the left hand navigation bar select Applications & Ad Units, and select the ad unit in question. In the Placements section for the Ad Unit select the placement that represents your ad unit the best.
  • Check the ad unit is configured to serve ads. On the flurry dev portal go to App Publishing tab, on the left hand navigation bar select Applications & Ad Units, and select the ad unit in question. In the section Advanced Options make sure that Gemini Backfill, RTB Marketplace Backfill, or both is set to On to assure Yahoo is sending you the ads.

The above settings are relevant for the Stream and Full Screen placements. The Banner placements only have the RTB Marketplace Backfill setting.

  • Turn the Flurry logging on in you app and observe the output for the Flurry related statements.
  • Please look at the callbacks that FlurryAdBannerDelegate, FlurryAdInterstitialDelegate or FlurryAdNativeDelegate when integrating banners, interstitials or native ad units respectively, return upon calling fetchAd on the ad object.

Each of the three delegates returns the adequately named version of the error callback. Namely:

Each error callback provides the FlurryAdError and NSError description that you can look into to understand the cause for the failure to receive the ad object.

The error codes that can be returned to your app are as follows:

Error code Error summary Error description
101 FlurryAdsInvalidAdSpaceUsedError Invalid AdSpace Used
102 FlurryAdsNetworkError Network Error
103 FlurryAdsAdLoadInProgressError Ad Load already in Progress
104 FlurryAdsNoAdsForSpaceError No Ads available for ad space. Try later.
105 FlurryAdsAdUnitNotActiveError Ad space is not set as active on Flurry dev portal
106 FlurryAdsAdUnitNotVerifiedError Ad unit could not be verified for device
107 FlurryAdsAdFrameNotActiveError Ad frame is not yet active
115 FlurryAdsAdNotReadyToDisplayForSpaceError Ad not ready to display
116 FlurryAdsAdCannotDisplayOnCurrentKeyWindowError Ad cannot be displayed on the current key window, e.g. an alert view
117 FlurryAdsAdRequestFailedError Ad request to server failed, e.g. because session is not active
118 FlurryAdsAdVideoLoadFailedError Ad video failed to load

In case the ad object is received, similarly each delegate fires a callback:

FlurryAds: No ads available from server for this unit.

There are few reasons for this error, some are temporary some are reflection on geographical availability of Flurry ads. You can (temporarily) set your ad unit into the test mode to validate your integration.

Please do remember to turn the test mode off prior to submitting your app to the App Store.

adInterstitialVideoDidFinish delegate is not called

The (void) adInterstitialVideoDidFinish:(FlurryAdInterstitial*)interstitialAd delegate method will be called when a video finishes playing to inform the app that a video associated with an ad has finished playing.

This method is invoked for the Rewarded (Client-side or Server-side) full screen takeover ad units only. The ad unit configured as the Standard ad mix will not invoke this delegate.

The ad unit mix configuration is done on the server side, see further instructions: to integrate rewards into your app .

FlurryAdBannerDelegate, FlurryAdInterstitialDelegate or FlurryAdNativeDelegate delegates (some) are not called

If you are integrating Flurry ads in a UIViewController of your app then set FlurryAd delegate in viewDidAppear (instead of in viewWillAppear), do not set the delegate to nil in viewDidDisappear (instead of in viewWillDisappear). When the user clicks on the ad, the ad is expanded and the viewDidDissaperar is called prior to the ad being opened in an another view. Also do not deallocate the ad object in the viewDidDisappear (or viewWillDisappear).

For instance:

Can I place a banner in a custom placement instead of top or bottom of the screen?

Yes. By default, the banner’s position is on the top or bottom of the screen. To place a banner in a custom position, create a UIView with coordinates of where you’d like the banner ad be paced. Then add this UIView to the main view where the ads presented. ``

In this example, UIView flurryContainer positions the banner at (0,150) coordinates of the main UIView.

Alternatively consider integrating native ad objects instead of banner ones for the ability to place them anywhere in the UIVIew and for the ability to have a custom look that reflects the look of you application.

Apple requires me to verify that the app and any 3rd-party libraries respect the Limit Ad Tracking setting. Does Flurry respect this setting?

The Flurry SDK is compliant with Apple’s guidelines related to the Limit Ad Tracking setting.