Tillägg till iAd-placering med AdMob

Klickabaserad annonsering inom en mobilapplikation är ett bra sätt att tjäna lite pengar på dina gratis eller billiga applikationer. Medan det finns många alternativ där ute, tenderar många iOS-utvecklare att gå med iAds-plattformen av olika skäl, inklusive enkelhet, estetik och hög CPM.

Även om iAds är bra, är det inte riktigt silverkulan du kanske letar efter. Att vara att IAds serverar mycket specifikt innehåll från leverantörer som måste ha ett mycket specifikt kontrakt med Apple, misslyckas de ofta i vissa situationer. Dessa situationer kan vara i en geolokalisering som annonser inte har placerats i, utlandet eller bara brist på utgivare under en viss tidsperiod.

I produktionsversionen av Caterpillar Application Jag skapade, implementerade jag iAds och märkte att fyllfrekvensen faller någonstans i 75% -intervallet. det är inte dåligt, dock är AdMob vanligtvis någonstans i 98% -intervallet! Detta leder mig till syftet med detta inlägg.

Skulle det inte vara bra att ha en hybridlösning för att fylla annonsplatserna med AdMob-annonser när iAds inte levererar?


Steg 1: IAds Setup

Eftersom detta är inte en iAds handledning, vi ska bara börja med a mycket enkel iAds-inställning. Det kommer att vara en banderoll på toppen av en vanlig UIView. Jag har börjat med en enda projektmall och lagt till följande kod till ViewController.h fil:

 #importera  #importera  @interface ViewController: UIViewController @property (nonatomic, strong) ADBannerView * bannerView; @slutet

Detta förklarar bara vår bannerannons som visas i vyn. Låt oss nu titta på koden för att visa annonsbannern inuti ViewController.m:

 #import "ViewController.h" @implementation ViewController @synthesize bannerView = _bannerView; - (void) viewDidLoad [super viewDidLoad]; self.bannerView = [[ADBannerView alloc] initWithFrame: CGRectMake (0, 0, 320, 50)]; [self.bannerView setRequiredContentSizeIdentifiers: [NSSet setWithObjects: ADBannerContentSizeIdentifierPortrait, nil]]; self.bannerView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait; [self.bannerView setDelegate: self]; [self.view addSubview: self.bannerView];  - (void) bannerView: (ADBannerView *) banner didFailToReceiveAdWithError: (NSError *) fel NSLog (@ "iad failed");  @slutet

Detta laddar upp en ADBannerView högst upp i fönstret som är inställt i stående läge. Från och med nu när iAds inte laddas, kommer det helt enkelt att skriva ut "IAd misslyckades" till loggen som du kan se i bannerView: didFailToReceiveAdWithError delegera metod. Vi kommer att använda sig av denna delegatmetod för att ersätta iAd-bannern med en AdMob-banner.


Steg 2: AdMob-konfiguration

Börja med att hämta iOS AdMob SDK här:

http://code.google.com/mobile/ads/download.html

Extrahera den någonstans på disken och dra alla filer till ditt projekt. När du blir frågad om du vill kopiera filerna, kontrollera ja.

Det finns också några bibliotek som du måste länka in för att kunna använda AdMob:

  • AudioToolbox
  • MessageUI
  • Systemkonfiguration
  • Coregraphics

När du har gjort det, bör du vara redo att implementera AdMob-annonserna.


Steg 3: Fyll iAd-platsen med AdMob

Låt oss börja med att återgå ViewController.h och uppdatera koden för att se så här ut:

 #importera  #importera  #import "GADBannerView.h" @interface ViewController: UIViewController @property (nonatomic, strong) ADBannerView * bannerView; @property (nonatomic, strong) GADBannerView * admobBannerView; @slutet

Allt vi gjorde här berättade för vår klass att vara en delegat av GADBannerView och skapade en egenskap för en GADBannerView. Se också till att du @synthesize admobBannerView i ViewController.m fil.

Den sista delen är att ersätta iAd med AdMob-bannern när den inte laddas. Detta kan göras genom att lägga till en kod till bannerView: didFailToReceivedAdWithError metod i ViewController.m:

 - (void) bannerView: (ADBannerView *) banner didFailToReceiveAdWithError: (NSError *) fel // 1 [self.bannerView removeFromSuperview]; // 2 _admobBannerView = [[GADBannerView alloc] initWithFrame: CGRectMake (0,0,0,0, GAD_SIZE_320x50.width, GAD_SIZE_320x50.height)]; // 3 self.admobBannerView.adUnitID = @ "a14ec3f0a2028f2"; self.admobBannerView.rootViewController = self; self.admobBannerView.delegate = self; // 4 [self.view addSubview: self.admobBannerView]; [self.admobBannerView loadRequest: [GADRequest request]]; 

Så här är det som händer:

  1. Vi tar bort iAd-bannern från den aktuella vyn. Det kommer inte längre behövas under den här sessionen. Du kan bli knepig och försöka göra fler förfrågningar till iAds, men det är inte riktigt nödvändigt.
  2. Här instämmer vi AdMob-banan som berättar för att vi ska ge oss en banner som är 320 av 50 och placera den högst upp på skärmen.
  3. Det här är inställningskoden för AdMob-bannern (gärna använda mitt annonsenhets id;)).
  4. Slutligen lägger vi till AdMob-bannern till vår åsikt och berättar att den hämtar en annons.

Steg 4: Testa det

En sak att notera är att du aldrig kommer se iAds misslyckas i simulatorn. Kanske om du hade Internet inaktiverad kanske du, men då skulle du inte ens kunna hämta AdMob-annonsen. Det bästa sättet att testa är att helt enkelt tvinga samtalet till bannerView: didFailToReceiveAdWithError metod från insidan av viewDidLoad:

 [self bannerView: self.bannerView didFailToReceiveAdWithError: nil];

Detta kommer att simulera iAd-felet och köra igenom koden för att hämta och visa AdMob-annonserna.


Steg 5: Slutliga steg

Nu när vi har den här dubbla lösningen på plats, är det mycket osannolikt att användaren vana se en annons Det finns dock fortfarande en liten chans att både iAd och AdMob misslyckas. I så fall gillar jag att ge användaren en paus och inte visa dem någonting. Sortera som en freebie för dagen;). Så den sista metoden kommer att ringas när AdMob inte laddar.

 - (void) adView: (GADBannerView *) visa didFailToReceiveAdWithError: (GADRequestError *) fel [self.admobBannerView removeFromSuperview]; 

Som du kan förvänta dig, när AdMob misslyckas tar vi bort sin vy från skärmen och användaren vinner!


Sammanfatta

Jag hoppas att du har hittat denna handledning användbar för blöder varje öre ut av dina användare din utvecklingsinsats. Även om jag har använt AdMob, kan du använda samma designmönster för att kombinera / kedja något av de annonsnätverk som du föredrar att arbeta med. Du kan hämta källkoden för den här handledningen högst upp.

Om du har några frågor eller kommentarer, vänligen lämna dem här eller skriv mig på Twitter.

Lycklig kodning!