Oggi vorrei riprendere l’ottimo articolo di Luigi Marino dedicato ad AdMob, che potete rivedere da qui e aggiornarvi su come inserire i banner (sempre di AdMob) facendo però questa volta tutto via codice, senza intervenire sugli XIB da Interface Builder (IB). Perché voglio evitare di intervenire sugli XIB? Essenzialmente per parecchi motivi, uno fra tutti perché quando si cerca di “descrivere” tramite testi il procedimento molti si perdono, dipende sempre da quale sia l’oggetto selezionato etc…. inoltre nel caso avessimo un’applicazione con parecchie pagine da visualizzare allora aprire ogni volta IB sarebbe oltremodo snervante.
La comodità di fare tutto via codice inoltre è data anche dal fatto che se volessimo ad esempio cambiare posizione al banner o fare delle prove per poi rimuoverlo, farlo da codice può fare la differenza.
Quindi, riapriamo il precedente articolo di Luigi, seguiamolo fino all’import delle librerie necessarie, e fermiamoci poco prima di aprire i file xib!! E ora tocca a noi 😛
Immaginiamo di voler inserire il banner in una pagina chiamata “Dettaglio.m” (che avrà il suo bel file di intestazione “Dettaglio.h” associato). Apriamo il file “Dettaglio.h” e modifichiamolo come segue:
#import "AdMobDelegateProtocol.h"
#define AD_REFRESH_PERIOD 12.5 // display fresh ads every 12.5 seconds
@interface Dettaglio : UIViewController
{
//............ altri vostri oggetti...
AdMobView *adMobAd;
NSTimer *refreshTimer;
}
Abbiamo importato la libreria “AdMobDelegateProtocol.h“, definito il nostro controller come gestore del delegate di AdMob (in modo tale da gestirne i callback), e definito una costante per il periodo di refresh di 12.5 secondi.
Questa costante indica il tempo dopo il quale il timer farà il refresh del banner. Vi dico subito, è inutile che proviate ad abbassare il suo valore settandolo, ad esempio, a 5 secondi, AdMob, infatti, fa una verifica e se inferiore, lo riporta a 12.5, può solo quindi esser eventualmente aumentato!
Gli oggetti definiti adMobAd e timer saranno rispettivamente la nostra vista adMob (ovvero il banner) e il timer, che si occuperà di fare il refresh di volta in volta in base alla costante definita poco fa.
Bene, possiamo chiudere il file “Dettaglio.h” non ne abbiamo più bisogno!
Apriamo quindi il file di implementazione “Dettaglio.m” e inseriamo al suo interno il seguente codice.
Come dicevo, preferisco mettere tutto il codice interessato tra un commento del tipo “INIZIO AdMob” e un altro che indicherà la fine, ad esempio “FINE AdMob”, in modo tale da commentare con mano ferma tutto il processo in un sol colpo!
//********************* INIZIO AdMob ***************************/
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
// Custom initialization
//self.title = @"Programmatic Ad";
}
return self;
}
- (void)dealloc {
[adMobAd release];
[refreshTimer invalidate];
[super dealloc];
}
// Request a new ad. If a new ad is successfully loaded, it will be animated into location.
- (void)refreshAd:(NSTimer *)timer {
[adMobAd requestFreshAd];
}
#pragma mark -
#pragma mark AdMobDelegate methods
- (NSString *)publisherIdForAd:(AdMobView *)adView {
return @"99999999999999"; // this should be prefilled; if not, get it from www.admob.com
}
- (UIViewController *)currentViewControllerForAd:(AdMobView *)adView {
return self;
}
- (UIColor *)adBackgroundColorForAd:(AdMobView *)adView {
return [UIColor colorWithRed:0 green:0 blue:0 alpha:1]; // this should be prefilled; if not, provide a UIColor
}
- (UIColor *)primaryTextColorForAd:(AdMobView *)adView {
return [UIColor colorWithRed:1 green:1 blue:1 alpha:1]; // this should be prefilled; if not, provide a UIColor
}
- (UIColor *)secondaryTextColorForAd:(AdMobView *)adView {
return [UIColor colorWithRed:1 green:1 blue:1 alpha:1]; // this should be prefilled; if not, provide a UIColor
}
// Sent when an ad request loaded an ad; this is a good opportunity to attach
// the ad view to the hierachy.
- (void)didReceiveAd:(AdMobView *)adView {
NSLog(@"AdMob: Did receive ad");
// get the view frame
CGRect frame = self.view.frame;
// put the ad at the bottom of the screen
adMobAd.frame = CGRectMake(0, frame.size.height - 48, frame.size.width, 48);
[self.view addSubview:adMobAd];
[refreshTimer invalidate];
refreshTimer = [NSTimer scheduledTimerWithTimeInterval:AD_REFRESH_PERIOD target:self selector:@selector(refreshAd:) userInfo:nil repeats:YES];
}
// Sent when an ad request failed to load an ad
- (void)didFailToReceiveAd:(AdMobView *)adView {
NSLog(@"AdMob: Did fail to receive ad");
[adMobAd removeFromSuperview]; // Not necessary since never added to a view, but doesn't hurt and is good practice
[adMobAd release];
adMobAd = nil;
// we could start a new ad request here, but in the interests of the user's battery life, let's not
}
//********************* FINE AdMob ***************************/
Fatto questo provate a compilare, se avete copiato e incollato il nostro codice nel file, senza modificare il vostro già esistente potreste ottenere degli errori, questo perchè probabilmente avevate già alcuni metodi definiti, che abbiamo riportato con il nostro.
Solitamente sono questi:
- initWithNibName
- dealloc (per rilasciare i due oggetti)
Per sistemare le cose, non dovrete far altro che spostare il codice necessario nei vostri precedenti metodi, o cancellare i vostri e tenervi questi che vi ho riportato io utili per AdMob, è indifferente, fate voi, l’importante è che non abbiate metodi ripetuti nel codice.
ATTENZIONE: Mi raccomando ricordatevi di MODIFICARE il valore
return @"99999999999999"
della funzione “publisherIdForAd” mettendoci il VOSTRO di codice. Se non ne avete uno sappiate che ottenerlo è semplicissimo, e basterà che vi rechiate sul sito AdMob.com per ottenerne uno.
Infine, dovreste anche cambiare le impostazioni dei colori di base:
- (UIColor *)adBackgroundColorForAd:(AdMobView *)adView {
return [UIColor colorWithRed:0 green:0 blue:0 alpha:1]; // this should be prefilled; if not, provide a UIColor
}
- (UIColor *)primaryTextColorForAd:(AdMobView *)adView {
return [UIColor colorWithRed:1 green:1 blue:1 alpha:1]; // this should be prefilled; if not, provide a UIColor
}
- (UIColor *)secondaryTextColorForAd:(AdMobView *)adView {
return [UIColor colorWithRed:1 green:1 blue:1 alpha:1]; // this should be prefilled; if not, provide a UIColor
}
se ovviamente non vi piacciono (o semplicemente non si addicono al vostro progetto) questi scelti da me!
Abbiamo quasi terminato, cerchiamo il metodo “viewDidLoad” e aggiungiamo le due righe che seguono:
- (void)viewDidLoad
{
adMobAd = [AdMobView requestAdWithDelegate:self]; // start a new ad request
[adMobAd retain]; // this will be released when it loads (or fails to load)
}
Bene, non c’e’ altro da aggiungere direi.
Se non volete far apparire il banner mentre siete in sviluppo, o volete far diventare la versione full dopo un inApp purchase, non dovrete far altro che mettere un semplice “if” prima di queste due righe nel metodo viewDidLoad.
Altra cosa importante da aggiungere, il banner con questo codice si visualizzerà in basso al form (appena sopra la tabbar se ne avete una), per metterlo in alto o in mezzo o dove volete, dovete modificare la riga che imposta il frame della view nel metodo “didReceiveAd”:
//In fondo alla view....
adMobAd.frame = CGRectMake(0, frame.size.height - 48, frame.size.width, 48);
//in testa alla view!
adMobAd.frame = CGRectMake(0, 0, frame.size.width, 48);
Ricordo che i parametri passati a CGRectMake corrispondono rispettivamente a x, y, larghezza, altezza.
Spero il tutorial vi sia d’aiuto!
Alla prossima
Gino Sarnieri staff: www.sviluppo4mobile.com
12 Responses to “T#072 – Aggiungere la pubblicità AdMob nelle nostre Applicazioni iPhone programmaticamente”
23 Settembre 2010
Antonio Curciottima guida. Prima di iscrivermi a AdMob si potrebbe sapere il costo per impressione e il costo per click?
voi ne siete a conoscenza?
23 Settembre 2010
El JobsoConsidero il tutorial molto bello ma non utile dato che adesso Apple ha creato iAd 😉
Non prendetela come un’offesa anzì prendetela come un consiglio che vi do per migliorarvi anche se fate già tanto per noi 🙂
23 Settembre 2010
Staff devAPPConsidera che AdMob di Google è un’alternativa validissima (e molto diffusa) ad iAd di Apple, che è ancora, si può dire, in fase di rodaggio 😉
23 Settembre 2010
El JobsoSi, sono d’accordo peró visto che iAd è della Apple e con esso si guadagna tanto (mi riferisco ai primi risultati dati) meglio usarlo, non credi?
Comunque chi vuole puó comunque usarlo e poi ripeto, non è una offesa 😉
23 Settembre 2010
GinoEl Jobso non sono tipo che si offende così facilmente! 😀
Quello che vorrei puntualizzare è che dalle mie informazioni iAD ancora non è attivo in italia ed europa, se mi sbaglio vi prego di darmi informazioni in merito!
Quindi a meno che non scriviate applicazioni internazionali multilingua, o per il mercato U.S.A. è perfettamente inutile!
Avevo rilasciato iAD perfettamente funzionante sull’app l’Enigmista, questo circa 40 gg fa e niente, infatti poi spulciando ho scoperto che solo in U.S.A. era partito il servizio, legato alle sottoscrizioni degli sponsor! Detto questo il codice iAD giace ora commentato sulle mie app e ho implementato AdMob come lo vedete sopra.
Se qualcuno ha informazioni differenti dalle mie, e sapete che il servizio è stato abilitato anche in italia vi prego di mandarmi link/info o quello che volete in questo post.
Avevo scritto ad Apple a suo tempo chiedendo quando sarebbe partito in italia e mi hanno risposto che avrebbero mandato il solito megacomunicato ai developer, comunicato che ad oggi ancora non è arrivato!
ciao,
g.
23 Settembre 2010
El JobsoSi, si, hai pienamente ragione; iAd in Italia non c’è ancora ma secondo degli articoli su dei blog sull’iPhone dicono che dovrebbe arrivare veramente tra pochissimo 😉
Detto questo ti faccio i complimenti per il tutorial e spero che ne farai uno anche su iAd 😀 😀
23 Settembre 2010
GinoPensa che ce l’ho già pronto, e non è una passeggiata, … non l’ho voluto pubblicare prima per paura che qualcuno criticasse dicendo che il servizio ancora non era attivo! 😀
Appena qualche rumors diviene ufficiale mando!
24 Settembre 2010
El JobsoBene, bene! Hai fatto bene secondo me…
24 Settembre 2010
Tweets that mention Aggiungere la pubblicità AdMob nelle nostre Applicazioni iPhone programmaticamente | devAPP -- Topsy.com[…] This post was mentioned on Twitter by Rynox, iPadWorld.it and devAPP, Bubi Devs. Bubi Devs said: T#072 – Aggiungere la pubblicità AdMob nelle nostre Applicazioni iPhone programmaticamente: Oggi vorrei riprendere… http://bit.ly/alHBlf […]
8 Dicembre 2010
kikko088Ciao a tutti, ho inserito admob in una mia applicazione che non è ancora su itunes (è in attesa di accettazione) ma nei test che faccio o negli iphone dei miei amici (che testano l’app per me) non sempre viene fuori la pubblicità…come mai?
quando l’app sarà su itunes sarà la stessa cosa?infine, c’è un modo per nascondere la view che creo per inserire l’ad quando il telefono non è connesso a internet e quindi la pubblicità non funziona?grazie mille
29 Marzo 2011
daniele@kikko088 è normale che non sempre venga caricato un banner e il mancato caricamento andrebbe gestito per evitare di mostrare un’area vuota.
Per tutti, ho notato che adMob ha cambiato l’sdk. Ha cambiato nome in GoggleAdMobAdsSdk e la classe principale si chiama GADBannerView per riferimento http://code.google.com/mobile/ads/docs/ios/
11 Ottobre 2011
LucaBuongiorno a tutti,
vorrei sapere come acquistare uno spazio banner all’interno di una APP. Devo conttattare direttamente chi ha fatto la APP oppure c’è chi gestisce la vendita di tali spazi?
Resto in attesa di un vostro cortese riscontro
Grazie mille
Luca