• Programmazione Android
  • CORSI ONLINE
  • Web Agency

Logo

Corsi di programmazione web e mobile online
Navigation
  • Home
  • CORSI ONLINE
  • Tutorial Pratici
  • GUIDE COMPLETE
    • Corso completo di C
    • Corso videogame con Cocos2d
    • Programmazione Cocoa Touch
  • Sezioni
    • Libri e manuali
    • Tips & Tricks
    • Risorse utili
    • Strumenti di Sviluppo
    • Materiale OpenSource
    • Framework
    • Guide Teoriche
    • Guide varie
    • Grafica e Design
    • iPad
    • News
    • Video Tutorial
    • Windows Phone
  • Pubblicità
  • About
    • Chi siamo
    • Pubblicazioni
    • Collabora
    • Sostieni devAPP

T#072 – Aggiungere la pubblicità AdMob nelle nostre Applicazioni iPhone programmaticamente

By sarnieri | on 23 Settembre 2010 | 12 Comments
Senza categoria

Logo AdMob Google 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

Share this story:
  • tweet

Tags: AdMobAdMob iPadAdMob iPhonegino sarnieriguadagnare iPhoneprogrammare iphonepubblicità applicazioni iPhoneTutorial Pratici

Recent Posts

  • Parte il percorso programmatori iOS in Swift su devACADEMY.it

    20 Dicembre 2017 - 0 Comment
  • Android, crittografare dati velocemente con Encryption

    24 Settembre 2018 - 0 Comment
  • Sql2o, accesso immediato ai database tramite Java

    3 Settembre 2018 - 0 Comment
  • Okio, libreria per ottimizzare l’input/output in Java

    27 Agosto 2018 - 0 Comment

Related Posts

  • AFNetworking: una libreria per semplificare il networking di un app

    18 Febbraio 2015 - 0 Comment
  • T#114 – Uso della crittografia nelle applicazioni iPhone e iPad con RNCryptor – Parte 2

    22 Marzo 2013 - 1 Comment
  • T#113 – Uso della crittografia nelle applicazioni iPhone e iPad con RNCryptor – Parte 1

    18 Marzo 2013 - 2 Comments

Author Description

Sono un consulente informatico di 34 anni. Lavoro da circa 15 anni presso varie societá in italia, attualmente sono in FAO. Sviluppo in tutti i linguaggi di programmazione, da Java a C++, dal PHP ad Adobe Flex. Ultimamente ho comprato un iPhone e sto sviluppando per questo magnifico dispositivo, Attualmente sull'appStore trovate PuntiPatente+ (al primo posto da venerdí 9 aprile) e ricette Romane.

12 Responses to “T#072 – Aggiungere la pubblicità AdMob nelle nostre Applicazioni iPhone programmaticamente”

  1. 23 Settembre 2010

    Antonio Curci

    ottima guida. Prima di iscrivermi a AdMob si potrebbe sapere il costo per impressione e il costo per click?
    voi ne siete a conoscenza?

  2. 23 Settembre 2010

    El Jobso

    Considero 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 🙂

  3. 23 Settembre 2010

    Staff devAPP

    Considera che AdMob di Google è un’alternativa validissima (e molto diffusa) ad iAd di Apple, che è ancora, si può dire, in fase di rodaggio 😉

  4. 23 Settembre 2010

    El Jobso

    Si, 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 😉

  5. 23 Settembre 2010

    Gino

    El 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.

  6. 23 Settembre 2010

    El Jobso


    Gino:

    El 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.

    Si, 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 😀 😀

  7. 23 Settembre 2010

    Gino

    Pensa 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!

  8. 24 Settembre 2010

    El Jobso

    Bene, bene! Hai fatto bene secondo me…

  9. 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 […]

  10. 8 Dicembre 2010

    kikko088

    Ciao 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

  11. 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/

  12. 11 Ottobre 2011

    Luca

    Buongiorno 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

Leave a Reply

Your email address will not be published. Required fields are marked *


*
*

Corso online di programmazione android e java

SEZIONI

  • Android
  • Comunicazioni
  • Contest
  • Corsi ed Eventi
  • Corso completo di C
  • Corso programmazione videogiochi
  • Framework
  • Grafica e Design
  • Guida rapida alla programmazione Cocoa Touch
  • Guide Teoriche
  • Guide varie
  • iPad
  • Le nostre applicazioni
  • Libri e manuali
  • Materiale OpenSource
  • News
  • Pillole di C++
  • Progetti completi
  • Risorse utili
  • Strumenti di Sviluppo
  • Swift
  • Tips & Tricks
  • Tutorial Pratici
  • Video Tutorial
  • Windows Phone

Siti Amici

  • Adrirobot
  • Allmobileworld
  • Apple Notizie
  • Apple Tribù
  • Avvocato360
  • Blog informatico 360°
  • bubi devs
  • fotogriPhone
  • GiovaTech
  • iApp-Mac
  • iOS Developer Program
  • iPodMania
  • MelaRumors
  • Meritocracy
  • SoloTablet
  • TecnoUser
  • Privacy & Cookie Policy
©2009-2018 devAPP - All Rights Reserved | Contattaci
devAPP.it è un progetto di DEVAPP S.R.L. - Web & Mobile Agency di Torino
Str. Volpiano, 54 - 10040 Leini (TO) - C.F. e P.IVA 11263180017 - REA TO1199665 - Cap. Soc. € 10.000,00 i.v.

devACADEMY.it

Vuoi imparare a programmare?

Iscriviti e accedi a TUTTI i corsi con un’unica iscrizione.
Oltre 70 corsi e migliaia di videolezioni online e in italiano a tua disposizione.

ISCRIVITI SUBITO