Inserire la pubblicità

Che male c'è nel guadagnare qualche cosina dopo aver sudato tanto? Il modo più semplice per farlo è inserire un poco di pubblicità nella nostra nuova applicazione Android! Questo tutorial vi spiega passo passo come fare per inserire un piccolo banner pubblicitario nella vostra applicazione utilizzando il servizio offerto da AdMob.

Per prima cosa bisogna registrarsi al servizio che vi offre i banner pubblicitari. Per questo tutorial ho scelto AdMob che è il più diffuso per gli sviluppatori italiani, ma il procedimento risulta essere molto simili per tutti gli altri servizi.

Per registrarvi vi basta collegarvi a questa pagina.

Una volta registrati, fate l'accesso e recatevi alla pagina Aggiungi sito/applicazione selezionando Applicazione Android. Compilate i campi Nome applicazione, indirizzo del market (o vuoto se non pubblicate su market), Categoria e Descrizione.
Una volta completata la registrazione dell'applicazione questa comparirà nella pagina Siti e applicazioni.
Andate su Gestisci Impostazioni dell'applicazione e segnatevi l'ID editore in alto a sinistra (è una stringa dal formato simile a questo a1496ced2842262) e cliccate su Ricevi codice editore per ottenere la libreria in formato jar da aggiungere alla vostra applicazione Android. Scaricherete un file chiamato admob-sdk-android.zip, scompattatelo, all'interno, insieme alla documentazione in inglese e qualche esempio, ci sarà la libreria che ci serve: admob-sdk-android.jar.

Quello che dobbiamo fare adesso è includere la libreria nel nostro progetto in Eclipse. Nulla di più semplice:

  • Creiamo la cartella "libs" nel nostro progetto e copiamo all'interno la libreria admob-sdk-android.jar:
    Cartella libs
  • Pulsante desto sul progetto, proprietà, Java Build Path, Add Jars e selezioniamo la libreria appena copiata:
    Java Build Path

Adesso tutte le classi presenti nella libreria saranno visibili dal nostro progetto! Vediamo come usarle!

Apriamo il file AndroidManifest.xml tramite l'editor di Eclipse e...

...nella scheda Application, aggiungiamo:

  • Una costante di tipo meta-data di nome ADMOB_PUBLISHER_ID e con valore l'ID editore legato alla nostra applicazione che abbiamo segnato in precedenza (ad esempio a1496ced2842262)
  • Una costante di tipo meta-data di nome ADMOB_ALLOW_LOCATION_FOR_ADS e con valore true se vogliamo che la pubblicità sia basata sulla posizione dell'utente (necessita dei permessi ACCESS_COARSE_LOCATION o ACCESS_FINE_LOCATION che devono essere dichiarati tramite gli appositi uses-permission), false in tutti gli altri casi
    meta-data

...nella scheda Permissions, aggiungiamo:

  • Il permesso Uses Permission android.permission.INTERNET

La libreria ha bisogno di un file xml di configurazione per l'aspetto grafico. Il file deve chiamarsi attrs.xml e deve essere collocato sotto la cartella res/values del nostro progetto. Il contenuto del file attrs.xml lo trovate sotto in questo post, nella sezione Sorgenti.

Quello che manca adesso è inserire fisicamente il banner nel nostro layout. Il banner non è altro che una View (ovviamente) e possiamo inserirla semplicemente inserendo questo pezzo di codice nella nostro file xml che rappresenta il layout: <com.admob.android.ads.AdView android:id="@+id/ad" android:layout_width="fill_parent" android:layout_height="wrap_content" app:backgroundColor="#000000" app:primaryTextColor="#FFFFFF" app:secondaryTextColor="#CCCCCC" app:keywords="MyAdMobApp" />

E' fondamentale che l'oggetto AdView abbia come id "@+id/ad", il resto è configurabile come vogliamo in base al layout della nostra applicazione. Come potete notare, viene utilizzato un namespace ad hoc per l'oggetto, chiamato app. Questo nuovo namespace deve essere dichiarato nella root del nostro layout tramite la riga xmlns:app="http://schemas.android.com/apk/res/com.marcoduff.myadmobapp". Fate attenzione che il package (in questo caso com.marcoduff.myadmobapp) deve essere uguale a quello dell'applicazione principale. L'esempio lo trovate sul file main.xml nella sezione Sorgenti.

A questo punto la nostra applicazione è pronta! Se la facciamo partire noteremo il seguente log (da consolle lanciando il comando adb logcat): I/AdMobSDK( 369): AdMob SDK version is 20100527-ANDROID-3312276cc1406347 I/AdMobSDK( 369): To get test ads on the emulator use AdManager.setTestDevices( new String[] { AdManager.TEST_EMULATOR } ) I/AdMobSDK( 369): Publisher ID set to aXXXXXXXXXXXXX

Ovvero la versione della libreria, il consiglio nel caso in cui si vogliono fare dei test e l'ID editore impostato per la nostra pubblicità.

La stringa di codice per impostare la pubblicità (AdManager.setTestDevices( new String[] { AdManager.TEST_EMULATOR } )) va impostata quando stiamo facendo dei test. Questa va messa nel metodo onCreate dell'Activity che visualizza la pubblicità in modo da forzarne la visualizzazione.
Nelle applicazioni normali non sempre verrà visualizzata la pubblicità! Solo se il server di AdMob ne ha una disponibile questa viene visualizzata. Impostando il TEST_EMULATOR si forza il server a restituire una pubblicità (che NON conta ai fini del pagamento, quindi attenzione a non lasciare il parametro impostato quando rilasciate l'applicazione!!!).

That's all! Buana pubblicità a tutti!

P.S.: Aggiungo una piccola morale: quando vi capita per le mani una applicazione (magari che avete scaricato in modo gratuito) con una pubblicità, un ottimo modo per premiare e ringraziare lo sviluppatore è proprio cliccare su quella pubblicità. In questo modo regalerete allo sviluppatore pochissimi centesimi che gli serviranno come stimolo per migliorare l'applicazione stessa!

Sorgenti

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.marcoduff.myadmobapp" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".MyActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <meta-data android:name="ADMOB_PUBLISHER_ID" android:value="a1496ced2842262"></meta-data> <meta-data android:name="ADMOB_ALLOW_LOCATION_FOR_ADS" android:value="false"></meta-data> </application> <uses-sdk android:minSdkVersion="7" /> <uses-permission android:name="android.permission.INTERNET"></uses-permission> </manifest>

attrs.xml

<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="com.admob.android.ads.AdView"> <attr name="backgroundColor" format="color" /> <attr name="primaryTextColor" format="color" /> <attr name="secondaryTextColor" format="color" /> <attr name="keywords" format="string" /> <attr name="refreshInterval" format="integer" /> </declare-styleable> </resources>

main.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res/com.marcoduff.myadmobapp" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <com.admob.android.ads.AdView android:id="@+id/ad" android:layout_width="fill_parent" android:layout_height="wrap_content" app:backgroundColor="#000000" app:primaryTextColor="#FFFFFF" app:secondaryTextColor="#CCCCCC" app:keywords="MyAdMobApp" /> <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> </LinearLayout>