1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Ads Integration

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von TheEvilOne, 11.06.2012.

  1. TheEvilOne, 11.06.2012 #1
    TheEvilOne

    TheEvilOne Threadstarter App-Anbieter (In-App)

    Beiträge:
    452
    Erhaltene Danke:
    50
    Registriert seit:
    19.05.2010
    Hallo,

    ich habe gerade Madvertise & Admob in meine App integriert. Meine App gibt es in 3 verschiedenen Versionen: Eine Lizenz-, eine Kauf- und eine Testversion.

    Die Ads sollen nur in der Lizenz-Version angezeigt werden, in den anderen Versionen sollen die Ads gar nicht erst geladen werden.

    Das habe ich darüber gelöst, dass jede Activity, in der Ads angezeigt werden sollen, ein FrameLayout besitzt. Wenn es sich um die Lizenz-Version handelt, dann lade ich mittels LayoutInflater die AdView in das FrameLayout. Die Ads werden dann in einer Singleton-Klasse initialisiert.

    Da ich mich vorher noch nicht mit Ads auseinander gesetzt habe wollte ich gerne mal in die Runde fragen, ob meine Umsetzung (speziell die Singleton-Klasse) so okay ist.

    Z.B. weiß ich nicht genau, ob ich die überschriebenen Methoden des MadvertiseViewCallbackListeners noch ausprogrammieren muß, ob ich noch etwas vergessen oder ob ich noch etwas nicht berücksichtigt habe. Funktionsfähig ist alles soweit ...zumindest im Testbetrieb.



    adview.xml
    Code:
    <?xml version="1.0" encoding="utf-8"?>
    <FrameLayout 
          xmlns:android="http://schemas.android.com/apk/res/android"
          xmlns:mad="http://schemas.android.com/apk/res/de.xxx"
          xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
          android:layout_width="fill_parent"
          android:layout_height="fill_parent"
        android:background="@color/backgroundCst">
     
        <com.google.ads.AdView
                android:id="@+id/admad"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                ads:adUnitId="myId"
                ads:adSize="BANNER"
                ads:loadAdOnCreate="true"
                android:layout_gravity="bottom"
                />
     
        <de.madvertise.android.sdk.MadvertiseView
                android:id="@+id/madad"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                mad:backgroundColor="@color/backgroundCst"
                mad:bannerType="mma"
                mad:placement_type="inline"
                android:layout_gravity="bottom"/>
     
    </FrameLayout>

    Initialisierung der Ads in einer Activity
    Code:
    ...
    adViewMain = (FrameLayout) findViewById(R.id.adLayoutMain);
     
     
    if(VERSION == LIZENZVERSION) { // PseudeCode If-Anweisung   
             LayoutInflater layoutInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                adViewMain.addView(layoutInflater.inflate(R.layout.adview, adViewMain, false));
     
                AdAdapter.getInstance().initAds(parentActivity);
            }
    ...
    

    Singleton-Klasse
    Code:
    package de.helper;
     
    import android.app.Activity;
    import android.util.Log;
    import android.view.View;
    import android.widget.FrameLayout;
     
    import com.google.ads.AdRequest;
    import com.google.ads.AdView;
     
    import de.R;
    import de.madvertise.android.sdk.MadvertiseTracker;
    import de.madvertise.android.sdk.MadvertiseView;
    import de.madvertise.android.sdk.MadvertiseView.MadvertiseViewCallbackListener;
     
    public class AdAdapter implements MadvertiseViewCallbackListener {
     
        private static AdAdapter instance;
     
        private FrameLayout adLayout;
     
        private MadvertiseTracker mTracker;
        private MadvertiseView mMadView;
     
        private AdView mAdmView;
        private Activity parentActivity;
     
        public static AdAdapter getInstance() {
            if(instance == null) {
                instance = new AdAdapter();
            }
     
            return instance;
        }
     
        public void initAds(Activity parentActivity) {
     
            this.parentActivity = parentActivity;
     
            mMadView = (MadvertiseView) parentActivity.findViewById(R.id.madad);
            mAdmView = (AdView) parentActivity.findViewById(R.id.admad);
     
            // AdMob initialisieren
            AdRequest adMobRequest = new AdRequest();
            mAdmView.loadAd(adMobRequest);     
     
     
            mTracker = MadvertiseTracker.getInstance(parentActivity);
     
            // Report the application's start.
            mTracker.reportLaunch();
            mMadView.setMadvertiseViewCallbackListener(this);
     
     
        }
     
          public void onLoaded(final boolean succeed, final MadvertiseView madView) {
                   if (succeed) {
                     if (mAdmView.getVisibility() == View.VISIBLE) {
                          mAdmView.setVisibility(View.GONE);
                     }
                     mMadView.setVisibility(View.VISIBLE);
                } else {
                     mMadView.setVisibility(View.GONE);
                }
          }
     
          @Override
          public void onError(final Exception exception) {
          }
     
          @Override
          public void onIllegalHttpStatusCode(final int statusCode, final String message) {
          }
     
          @Override
          public void onAdClicked() {
          }
     
          @Override
          public void onApplicationPause() {
          }
     
          @Override
          public void onApplicationResume() {
          }
    }
    

    Danke und viele Grüße
     
    Zuletzt bearbeitet: 11.06.2012
    GENiALi bedankt sich.
  2. Tom299, 12.06.2012 #2
    Tom299

    Tom299 Android-Experte

    Beiträge:
    602
    Erhaltene Danke:
    120
    Registriert seit:
    31.08.2011
    Wenn ich es richtig verstehe, dann blendest du in deiner Kauf-App die Werbung nur aus bzw. machst sie unsichtbar, aber die ganze Funktionalität läßt du drin?

    Ein Benutzer wird sich dann verwundert fragen, wozu er die ganzen Rechte dann akzeptieren muß. Bei der Lizenz(Werbe-)App kann man es ja verstehen.

    Es sei denn, deine App beschäftigt sich eh mit Internet, WiFi, etc. dann fällts nicht ins Gewicht.

    Ich hab bei mir 2 getrennte Versionen / APKs gemacht, eine mit Admob + Madvertise und eine ganze ohne, also auch ohne die notwendigen Permissions.
     
  3. TheEvilOne, 12.06.2012 #3
    TheEvilOne

    TheEvilOne Threadstarter App-Anbieter (In-App)

    Beiträge:
    452
    Erhaltene Danke:
    50
    Registriert seit:
    19.05.2010
    Danke für die Antwort.

    Ich verwende in meiner App Internetzugriff, Positionsbestimmung, GPS, etc. Also von den Rechten her macht das keinen Unterschied. Da hab ich Glück gehabt :)

    Ich habe in den xml-Layouts meiner Activities ein leeres FrameLayout definiert (adLayoutMain). Dieses dient als Container.
    Dann gibt es die Klasse AdView.xml (ganz oben mein erstes Code-Sample). In dieser stecken die Beschreibungen für Admob und Madvertise.

    Wenn es sich nun um die Version der App handelt, in der die Ads angezeigt werden sollen, dann lade ich die AdView ganz einfach über den LayoutInflater in den Layout-Container (adLayoutMain) und dort werden die Ads dann auch initialisiert (2. Code-Sample).

    Nein, nicht ganz. Bei meiner Vorgehensweise werden die Ads in den werbefreien Versionen erst gar nicht initialisiert. Der Vorteil ist, dass ich dadurch enorm Rechenleistung spare, was beim "nur Ausblenden" nicht der Fall ist.
     
    Zuletzt bearbeitet: 12.06.2012

Diese Seite empfehlen