Cara membuat backup ads Admob dengan iklan lain (studi kasus Iklan StartApp)

Cara membuat backup ads Admob dengan iklan lain (studi kasus Iklan StartApp)

بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيم

Hallo om pengguna Source Code Aliendroid, masa limit admob sampai saat ini (November 2020) masih terus melanda publisher App Monetize Indonesia. Banyak solusi/metode yang dibuat untuk mengatasi limit, mulai dari mediasi, backup maupun sistem switch. Setiap metode memiliki keunggulan masing-masing. Pada artikel kali in penulis mencoba untuk membuat metode backup ads dengan iklan StartApp. Metode backup banyak digunakan karena tidak ribet membutuhkan hosting untuk mengontrol iklan, iklan backup akan secara otomatis muncul jika iklan utama (Admob) limit atau banned. Akan tetapi metode backup memiliki kelemahan pada sisi update aplikasi.  

Aplikasi dengan metode backup akan membutuhkan update aplikasi jika akan menggnti iklan backup ke iklan lain, misalnya saat ini kalian menggunakan iklan admob dengan backup startapp, dan suatu hari kalian akan mengganti iklan startapp dengan iklan FAN, maka mau tidak mau harus melakukan update aplikasi dikemudian hari. Untuk itu munculah istilah switch ads yang dibuat oleh Aliendroid dengan resiko harus mempunyai hosted untuk menyimpan file remots ads.

Penulis membuat metode backup banner dan intertitial saja dengan iklan pengganti startapp. Penulis berasumsi kalian sudah mempunyai Source code yang sudah terisi oleh iklan admob. Pada contoh penulis membuat layout dengan nama activity_maian.xml dan file java dengan nama MainActivity.java.
nb. semua tulisan yang penulis bold hitam adalah code Admob dan bold merah code startApp.

activity_maian.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btn_inter"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Intertitial Ads" />

    <com.google.android.gms.ads.AdView
        xmlns:ads="http://schemas.android.com/apk/res-auto"
        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        ads:adSize="SMART_BANNER"
        ads:adUnitId="@string/admobbanner">
    </com.google.android.gms.ads.AdView>
</RelativeLayout>

 MainActivity.java

package com.aliendroid.latihanadmob;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.InterstitialAd;
import com.google.android.gms.ads.MobileAds;
import com.google.android.gms.ads.initialization.InitializationStatus;
import com.google.android.gms.ads.initialization.OnInitializationCompleteListener;

public class MainActivity extends AppCompatActivity {
    private AdView mAdView;
    private InterstitialAd mInterstitialAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MobileAds.initialize(this, new OnInitializationCompleteListener() {
            @Override
            public void onInitializationComplete(InitializationStatus initializationStatus) {
            }
        });

        mAdView = findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);

        mInterstitialAd = new InterstitialAd(this);
        mInterstitialAd.setAdUnitId(getString(R.string.admobinter));
        mInterstitialAd.loadAd(new AdRequest.Builder().build());

        Button muncul_inter = findViewById(R.id.btn_inter);
        muncul_inter.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (mInterstitialAd.isLoaded()) {
                    mInterstitialAd.show();
                } else {
                    Log.d("TAG", "The interstitial wasn't loaded yet.");
                }
            }
        });
    }
}

Code iklan banner dan intertitial pada contoh MainActivity.java adalah standar penulisan iklan yang sering dipakai oleh para penjual source code, biasanya bagian AdListener tidak ditambahkan karena sifatnya optional. Untuk itu tambahkan AdLIstener pada code banner di MainActivity.java

MainActivity.java

package com.aliendroid.latihanadmob;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.InterstitialAd;
import com.google.android.gms.ads.LoadAdError;
import com.google.android.gms.ads.MobileAds;
import com.google.android.gms.ads.initialization.InitializationStatus;
import com.google.android.gms.ads.initialization.OnInitializationCompleteListener;

public class MainActivity extends AppCompatActivity {
    private AdView mAdView;
    private InterstitialAd mInterstitialAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        MobileAds.initialize(this, new OnInitializationCompleteListener() {
            @Override
            public void onInitializationComplete(InitializationStatus initializationStatus) {
            }
        });

        mAdView = findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);
        mAdView.setAdListener(new AdListener() {
            @Override
            public void onAdLoaded() {
            }

            @Override
            public void onAdFailedToLoad(LoadAdError adError) {
            }

            @Override
            public void onAdOpened() {
            }

            @Override
            public void onAdClicked() {
            }

            @Override
            public void onAdLeftApplication() {
            }

            @Override
            public void onAdClosed() {
               
            }
        });

        mInterstitialAd = new InterstitialAd(this);
        mInterstitialAd.setAdUnitId(getString(R.string.admobinter));
        mInterstitialAd.loadAd(new AdRequest.Builder().build());

        Button muncul_inter = findViewById(R.id.btn_inter);
        muncul_inter.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (mInterstitialAd.isLoaded()) {
                    mInterstitialAd.show();
                } else {
                    Log.d("TAG", "The interstitial wasn't loaded yet.");
                }
            }
        });
    }
}

Pada code yang telah ditambahkan AdListener terdapat baris onAdFailedToLoad yang berfungsi untuk melakukan tindakan pada saat iklan admob tidak muncul. pada kebanyak iklan selain admob biasanya terdapat bagian onAdFailedToLoad  meskipun penulisnnya berbeda. Untuk menguji iklan backup, silahkan tambahkan SDK StartApp di build.gradle : module dan AndroidManifest.xml, anda bisa melihat panduan lengkapnya disini

build.gradle : module

plugins {
    id 'com.android.application'
}

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.2"

    defaultConfig {
        applicationId "com.aliendroid.latihanadmob"
        minSdkVersion 21
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

dependencies {

    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.material:material:1.2.1'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    testImplementation 'junit:junit:4.13.1'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
    implementation 'com.google.android.gms:play-services-ads:19.5.0'
    implementation 'com.startapp:inapp-sdk:4.6.+'
}

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.aliendroid.latihanadmob">
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.LatihanAdmob">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

        <!-- Sample AdMob App ID: ca-app-pub-3940256099942544~3347511713 -->
        <meta-data
            android:name="com.google.android.gms.ads.APPLICATION_ID"
            android:value="@string/admobappid"/>

        <provider
            android:name="com.startapp.sdk.adsbase.StartAppInitProvider"
            android:authorities="${applicationId}.startappinitprovider"
            tools:node="remove" />
    </application>

</manifest>

Setelah Sdk terpasang langkah selanjutnya lakukan initialization di MainActivity.java dengan menambahkan code StartAppSDK.init(this, "StartApp App ID", true); dan tambhakan RelativeLayout di activity_main.xml untuk menampung banner StartApp.

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btn_inter"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="Intertitial Ads" />

    <com.google.android.gms.ads.AdView
        xmlns:ads="http://schemas.android.com/apk/res-auto"
        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        ads:adSize="SMART_BANNER"
        ads:adUnitId="@string/admobbanner">
    </com.google.android.gms.ads.AdView>

    <RelativeLayout
        android:id="@+id/mainLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true">

    </RelativeLayout>
</RelativeLayout>

MainActivity.java

 
package com.aliendroid.latihanadmob;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.RelativeLayout;

import com.google.android.gms.ads.AdListener;
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.InterstitialAd;
import com.google.android.gms.ads.LoadAdError;
import com.google.android.gms.ads.MobileAds;
import com.google.android.gms.ads.initialization.InitializationStatus;
import com.google.android.gms.ads.initialization.OnInitializationCompleteListener;
import com.startapp.sdk.ads.banner.Banner;
import com.startapp.sdk.adsbase.StartAppAd;
import com.startapp.sdk.adsbase.StartAppSDK;

public class MainActivity extends AppCompatActivity {
    private AdView mAdView;
    private InterstitialAd mInterstitialAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        StartAppSDK.init(this, getString(R.string.startappid), true);

        MobileAds.initialize(this, new OnInitializationCompleteListener() {
            @Override
            public void onInitializationComplete(InitializationStatus initializationStatus) {
            }
        });

        mAdView = findViewById(R.id.adView);
        AdRequest adRequest = new AdRequest.Builder().build();
        mAdView.loadAd(adRequest);
        mAdView.setAdListener(new AdListener() {
            @Override
            public void onAdLoaded() {
            }

            @Override
            public void onAdFailedToLoad(LoadAdError adError) {
                RelativeLayout mainLayout = (RelativeLayout)findViewById(R.id.mainLayout);
                Banner startAppBanner = new Banner(MainActivity.this);
                RelativeLayout.LayoutParams bannerParameters =
                        new RelativeLayout.LayoutParams(
                                RelativeLayout.LayoutParams.WRAP_CONTENT,
                                RelativeLayout.LayoutParams.WRAP_CONTENT);
                bannerParameters.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
                mainLayout.addView(startAppBanner, bannerParameters);
            }

            @Override
            public void onAdOpened() {
            }

            @Override
            public void onAdClicked() {
            }

            @Override
            public void onAdLeftApplication() {
            }

            @Override
            public void onAdClosed() {

            }
        });

        mInterstitialAd = new InterstitialAd(this);
        mInterstitialAd.setAdUnitId(getString(R.string.admobinter));
        mInterstitialAd.loadAd(new AdRequest.Builder().build());

        Button muncul_inter = findViewById(R.id.btn_inter);
        muncul_inter.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (mInterstitialAd.isLoaded()) {
                    mInterstitialAd.show();
                } else {
                    StartAppAd.showAd(MainActivity.this);
                }
            }
        });
    }
}

Pada baris code MainActivity.java sudah ditambahkan iklan banner dan intertitial StartApp pada kondisi iklan admob tidak terisi. Silahkan uji coba aplikasi dengan cara mengosongkan ID iklan admob atau memberi ahiran X yang ada di res-values-string.xml. Latihan dianggap berhasil jika aplikasi menampilkan iklan startapp.

string.xml

<resources>
    <string name="app_name">Latihan Admob</string>
    <string name="admobappid">ca-app-pub-3940256099942544~3347511713</string>
    <string name="admobbanner">ca-app-pub-3940256099942544/6300978111x</string>
    <string name="admobinter">ca-app-pub-3940256099942544/1033173712x</string>
    <string name="startappid">123456789</string>
</resources>

 Cara pemanbahan iklan backup akan berbeda tergantung iklan apa yang anda tambahkan, jika anda tidak paham anda bisa menggunakan jasa kami di link berikut : Reskin Backup/Switch Ads