Android #6: Membuat webview lengkap dengan iklan

2668 views

Android #6: Membuat webview lengkap dengan iklan – Webview adalah fasilitas yang disediakan oleh Android Studio (AS) untuk membuka halaman web dengan App Chrome tanpa harus membuka aplikasi browser terlebih dahulu.

Latihan kali ini, penulis anggap semua pembaca sudah paham membuat proyek baru di AS. Webview yang akan dibuat memiliki fitur :

  1. Splash screen: Tampilan awal saat aplikasi pertama kali dibuka.
  2. Page Title Bar: Menampilkan nama halaman saat dibuka di Title Bar Webview.
  3. Handle Loading: Menampilkan loading saat halaman belum 100% terbuka.
  4. Handle Connection: Mengecek koneksi internet, jika internet tidak ada maka webview menampilkan halaman kosong (bukan ulr).
  5. Handle Link Download: Fasilitas jika terdapat link download pada halaman web, sehingga tidak membuka browser.
  6. Iklan Admob: Iklan muncul dibawah halaman (Banner)  dan setiap pergantian halaman (Interstitial).
  7. Share App: Fasilitas membagikan aplikasi.
  8. Rate App: Fasilitas membuka url App di Playstore.

Aplikasi webview ini dibuat dengan Android Studio versi 3.0, Gradle 4.1, minSdkVersion 9, targetSdkVersion 27, compileSdkVersion 27, dan lainnya sebagai berikut:

main.xml

 

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   xmlns:ads="http://schemas.android.com/apk/res-auto"
   
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:descendantFocusability="afterDescendants"
   tools:context=".Main" >

   <RelativeLayout
       android:layout_width="match_parent"
       android:layout_height="fill_parent" >

      <com.google.android.gms.ads.AdView
         android:id="@+id/adView"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignParentBottom="true"
         android:layout_centerHorizontal="true"
         ads:adSize="SMART_BANNER"
         ads:adUnitId="@string/ad_unit_id"></com.google.android.gms.ads.AdView>

      <WebView
         android:id="@+id/webView"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_alignParentLeft="true"
         android:layout_alignParentTop="true"
         android:layout_marginBottom="50dp" />

      <ProgressBar
         android:id="@+id/progressBar1"
         style="?android:attr/progressBarStyleLarge"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_alignParentTop="true"
         android:layout_centerHorizontal="true"
         android:layout_marginTop="180dp" />

      <TextView
          android:id="@+id/txtmenu1"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_below="@+id/progressBar1"
          android:layout_centerHorizontal="true"
          android:text="Please activate internet"
          android:textStyle="bold" />
   </RelativeLayout>
</merge>

splash.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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#000000"
    android:orientation="vertical">

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="236dp"
        android:text="Aliendroid Studio"
        android:textColor="#ffffff"
        android:textStyle="bold|italic" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/textView"
        android:layout_centerHorizontal="true"
        android:text="Present"
        android:textColor="#ffffff"
        android:textStyle="italic" />
</RelativeLayout>

Main.java

package com.aliendroid.webview;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.webkit.DownloadListener;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
import com.google.android.gms.ads.InterstitialAd;


public class Main extends Activity {
   WebView mainWebView = null;
    ProgressBar progressBar ;
    TextView textView ;
   private InterstitialAd mInterstitialAd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
        setContentView(R.layout.main);
      getWindow().setFeatureInt( Window.FEATURE_PROGRESS, Window.PROGRESS_VISIBILITY_ON);


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

      mInterstitialAd = new InterstitialAd(this);
      mInterstitialAd.setAdUnitId("ca-app-pub-xxx/xxx");
      mInterstitialAd.loadAd(new AdRequest.Builder().build());
        
        progressBar = (ProgressBar) findViewById(R.id.progressBar1);
        progressBar.setVisibility(View.GONE);
        
        textView = (TextView) findViewById(R.id.txtmenu1);
        textView.setVisibility(View.GONE);

        // Pemanggilan website
        mainWebView = (WebView) findViewById(R.id.webView);
      mainWebView.loadUrl("https://aliendro.id/");
      mainWebView.getSettings().setJavaScriptEnabled(true);
   

      //Pengaturan jika tidak ada koneksi internet dan load website
        mainWebView.setWebViewClient(new WebViewClient() {
         public void onReceivedError(WebView view, int errorCode, String description, String 
               failingUrl) {  
                Toast.makeText(Main.this, "please activate internet !! ", Toast.LENGTH_SHORT).show();
                progressBar.setVisibility(View.VISIBLE);
                textView.setVisibility(View.VISIBLE);
                mainWebView.loadUrl("about:blank");      
         }

         @Override
         public void onPageStarted(WebView view, String url, Bitmap favicon) {

            super.onPageStarted(view, url, favicon);
            progressBar.setVisibility(View.VISIBLE);
         }

         @Override
         public void onPageFinished(WebView view, String url) {
            progressBar.setVisibility(View.GONE);
            Main.this.setTitle(view.getTitle());
         }
               });

      //Pengaturan jika download file
      mainWebView.setDownloadListener(new DownloadListener() {
          public void onDownloadStart(String url, String userAgent,
                      String contentDisposition, String mimetype,
                      long contentLength) {
              Intent i = new Intent(Intent.ACTION_VIEW);
              i.setData(Uri.parse(url));
              startActivity(i);
          }
      });

    }

    //Pengaturan saat akan keluar aplikasi pada onBackPressed terakhir
   private  void bagikan(){
      AlertDialog.Builder builder = new AlertDialog.Builder(this);
      builder.setMessage("Ingin keluar aplikasi?")

            .setCancelable(false)
            .setPositiveButton("Keluar",
                  new DialogInterface.OnClickListener() {
                     @Override
                     public void onClick(DialogInterface dialog, int id) {
                        finish();
                     }
                  })
            .setNeutralButton("Nilai",
                  new DialogInterface.OnClickListener() {
                     @Override
                     public void onClick(DialogInterface dialog, int id) {
                        String str = "https://play.google.com/store/apps/details?id=com.ad.tesiqkepribadia";
                        startActivity(new Intent(Intent.ACTION_VIEW,
                              Uri.parse(str)));

                     }
                  })
            .setNegativeButton("Bagikan",
                  new DialogInterface.OnClickListener() {
                     @Override
                     public void onClick(DialogInterface dialog, int id) {
                        String packageName = getApplicationContext()
                              .getPackageName();
                        String shareLink = "https://play.google.com/store/apps/details?id="
                              + packageName;
                        Intent sendIntent = new Intent();
                        sendIntent.setAction(Intent.ACTION_SEND);
                        sendIntent.putExtra(Intent.EXTRA_TEXT,
                              " Aliendroid Webview \n"
                                    + shareLink);
                        sendIntent.setType("text/plain");
                        startActivity(sendIntent);

                     }
                  }).show();
      AlertDialog a = builder.create();
      //a.setTitle("Aliendroid");
      //a.setIcon(R.mipmap.ic_launcher);
      a.show();
   }

   @Override
   public void onBackPressed() {
      if (mainWebView.canGoBack()) {
         if (mInterstitialAd.isLoaded()) {
            mInterstitialAd.show();
         }
         mainWebView.goBack();

      } else if (mainWebView.canGoBackOrForward(0))
         bagikan();
      else
         super.onBackPressed();
   }
}

Spalsh.java

package com.aliendroid.webview;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.view.Window;
import android.widget.TextView;

public class Splash extends Activity {
    TextView tvSplash;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //menghilangkan ActionBar
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.splash);

        final Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                startActivity(new Intent(getApplicationContext(), Main.class));
                finish();
            }
        }, 3000L); //3000 L = 3 detik
    }
}

AndroidManifest.xml

Karena webview membutuhkan koneksi internet maka di manifest harus ditambahkan uses-permission Internet dan access Network.

<uses-permission android:name=”android.permission.INTERNET” />
<uses-permission android:name=”android.permission.ACCESS_NETWORK_STATE” />

Selain itu untuk menampilkan iklan admob harus menggunakan meta-data Google play Servies, bagi yang belum paham cara pemasangan iklan admob silahkan menuju link tutorial ini.

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.aliendroid.webview"
    android:versionCode="1"
    android:versionName="1" >

    <uses-sdk
        android:minSdkVersion="9"
        android:targetSdkVersion="27" />

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
  
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme">

        <activity
            android:name="com.aliendroid.webview.Splash"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Light.NoTitleBar.Fullscreen">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

        <activity
            android:name="com.aliendroid.webview.Main"
            android:label="@string/app_name"
            android:screenOrientation="portrait"
            android:theme="@style/AppTheme"
            >
        </activity>

        <meta-data android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />

        <activity android:name="com.google.android.gms.ads.AdActivity"
            android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
            android:theme="@android:style/Theme.Translucent" />

    </application>
</manifest>

string.xml

<string name="app_name">Aliendroid Webview</string>
<string name="ad_unit_id">ca-app-pub-xx/xx</string>

Silahkan unduh file latihan webview untuk lebih jelasnya.

Tags: #iklan admob #membuat splash screen #Tutorial webview


  1. Pasang iklan aplikasi murah di adword - Aliendroid Studio1 year ago

    […] yang ada hanya riset sederhana dengan try and error. Untuk bermain Adword dengan sistem CPI / pemasangan aplikasi ada beberapa cara agar iklan […]

    Reply

Leave a reply "Android #6: Membuat webview lengkap dengan iklan"

Author: 
    author