quarta-feira, 23 de maio de 2012

Consegui adicionar o admob no meu aplicativo. Foi relativamente simples.

- Mudei o meu sdk android para o 3.1 (estava compilando antes com o 2.1), ajustando o target de compilação para o SDK 13 (3.1). Demorei um pouco para me achar no IntelliJ (cada IDE tem as suas peculiaridades).

- Adicionei o jar do Admob, que me foi passado pelo site no classpath do projeto.

- Fiz as alterações indicadas no AndroidManifest, adicionando as permissões de acesso a INTERNET e ACCESS_NETWORK_STATE, e o mapeamento para a activity especial do AdMob.

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
        <activity android:name="com.google.ads.AdActivity"                  android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
Alterei também as informações do uses-sdk:
    <uses-sdk android:minSdkVersion="8"
              android:maxSdkVersion="13"
              android:targetSdkVersion="13"/>

- Depois, foi uma questão de adicionar a View do Admob nas minhas telas, passando a informação do meu id de publisher do admob (espero ter pego o id correto no site, esta parte não está muito explicada). Encapsulei isto tudo em uma método estático em uma classe nova, AdicionaPropaganda, para evitar repetição de código (prática semelhante que eu tenho feito para os outros pop-ups que utilizo, e que facilitou a minha vida):

public class AdicionaPropaganda {
    public static String MY_AD_UNIT_ID="...";
    public static void adicioneAdView(Activity activity, LinearLayout paginaDestino){
        AdView adView = new AdView(activity, AdSize.BANNER, MY_AD_UNIT_ID);
        paginaDestino.addView(adView);
        adView.loadAd(new AdRequest());
    }
}

- Então, foi só adicionar a chamada logo depois do build do layout, nas duas activities do meu projeto, como no exemplo abaixo:

        setContentView(R.layout.pagina_dia);
        AdicionaPropaganda.adicioneAdView(this, paginaDia);

Quem já conhece um pouco de android pode achar que eu pulei alguma linha entre o setContentView e o uso de paginaDia. Na verdade, o conteúdo de paginaDia é injetado pelo RoboGuice implicitamente depois do setContentView, conforme indicado no  InjectView que eu declarei juntamente com as outras declarações de classe:

    @InjectView(R.id.pagina_layout_dia) LinearLayout paginaDia;

Falo mais sobre o RoboGuice depois, mas ele realmente diminui muito o boilerplate do código!

- Regerei o pacote apk assinado, e o enviei para o market. O próximo update adicionará a propaganda e fará os centavos jorrarem em minha conta! Ou assim espero...


Conclusões: Infelizmente, o admob não funciona no android sdk 7 (2.1), o que fez o sdk mínimo do projeto subir para 8 (2.2). Queria ter sido avisado disso antes! Em último caso, espero que o market seja esperto o suficiente para não forçar este update para aqueles que possuem APIs inferiores a minSDKVersion declarada no manifest.

Nenhum comentário:

Postar um comentário