09 กุมภาพันธ์ 2557

[Android Dev Tips] ติดโฆษณาบนแอพของเราด้วย AdMob [Google Play Service]


        ประกาศ - ผู้ที่หลงเข้ามาอ่านคนใดยังใช้ AdMob รูปแบบเก่าอยู่ กรุณาไปอัปเดตเป็นรูปแบบใหม่ด้วยนะครับ เพราะแบบเก่าจะหยุดให้บริการในวันที่ 1 สิงหาคม 2557 นี้


        สำหรับผู้ที่หลงเข้ามาอ่านคนใดเคยอ่านบทความ [Android Dev Tips] ติดโฆษณาบนแอพของเราด้วย AdMob [AdMob SDK] มาแล้ว อาจจะสงสัยว่าเจ้าของบล็อกทำบทความนี้ทำไมล่ะ?

         ทั้งนี้ก็เพราะว่าทาง Google ได้เปลี่ยนจากวิธีเดิมที่เป็น AdMob SDK หรือก็คือใช้ไฟล์ไลบรารีจาก AdMob มาใส่ในโปรเจค เปลี่ยนมากลายเป็นใช้ไลบรารีของ Google Play Service แทน ทั้งนี้เพื่อรวบรวมไลบรารีต่างๆของ Google มารวมไว้ในไลบรารีของ Google Play Service ไปเลย


        ขอเตือนไว้ก่อนเลยว่า AdMob ของผู้ที่หลงเข้ามาอ่านคนใดใช้วิธี AdMob SDK อยู่ ทาง Google ได้แจ้งไว้ว่า จะให้ใช้งานได้จนถึง วันที่ 1 เดือนสิงหาคม พ.ศ. 2557 (01/08/2014) เท่านั้น หลังจากนั้นจะใช้งานไม่ได้ ดังนั้นถ้ายังใช้ AdMob SDK อยู่ ก็ไปเปลี่ยนไว้ซะตั้งแต่เนิ่นๆก็ดีนะ



        สำหรับการใช้งาน AdMob แบบใช้ไลบรารีของ Google Play Service ก็แน่นอนอยู่แล้วว่าต้องไปสมัคร AdMob เสียก่อน ถ้ายังไม่เคยสมัครมาก่อน (แต่ถ้าเป็นผู้ที่หลงเข้ามาอ่านที่เปลี่ยนจาก AdMob SDK มาเป็นไลบรารีของ Google Play Service ก็ข้ามไปเลย)



ขั้นตอนการสมัครใช้งานโฆษณาของ AdMob

        • เข้าไปสมัครกันได้ที่ http://www.admob.com/


         • โดยแนะนำให้ใช้ Google Account ในการสมัครละกัน เพราะผู้ที่หลงเข้ามาอ่านก็คงจะมีกันอยู่ละ เพราะเครื่องแอนดรอยด์ต้องล็อกอินด้วย Google Account อยู่แล้ว และถ้าใช้ AdSense อยู่แล้วก็แนะนำให้ใช้ Account เดียวกันไปเลย เพราะงั้นเลือก Sign in with my Google Account ซะ


        เพิ่มเติม - ล่าสุด (02/09/2014) มีการเปลี่ยนแปลงระบบจ่ายเงิน โดยไม่รองรับการจ่ายเงินผ่าน PayPal แล้ว


        • ทำการล็อกอินซะให้เรียบร้อย


        เพิ่มเติม - เมื่อล็อกอินเสร็จถ้าเด้งกลับไปหน้าแรก ให้กดล็อกอินที่มุมขวาบนของหน้านั้นแทน


        • จะมีการถามยืนยันอีกครั้บ ก็ยืนยัน Google Account ที่จะใช้สมัครซะ โดยกดที่ Yes, use xxxxx@gmail.com




        • จากนั้นให้ใส่ข้อมูลให้เรียบร้อยซะ ประเทศ ที่อยู่ ประเภทของ Account และอื่นๆ สำหรับเบอร์โทรให้ใช้ +66 แทน 0 ที่อยู่หน้าสุด เมื่อกรอกข้อมูลเสร็จหมดแล้ว ให้กดปุ่ม Confirm



        • จากนั้นก็เลือก Timezone และ Currency หรือค่าเงินที่จะใช้ซะ แล้วกดปุ่ม Continue



        • ให้ติ๊กเลือกที่ช่อง I have read and agree to abide bt the program...... เพื่อยอมรับข้อตกลงและเงื่อนไขของ AdMob แล้วกดปุ่ม Create AdMob Account (ถ้าจะให้ดีก็อ่านหน่อยนะ)



        • สมัครเสร็จเรียบร้อยแล้ววววว




        • เมื่อสมัครแล้วก็จะล็อกอินเข้าสู่หน้าแรกให้โดยอัตโนมัติ สำหรับตัวอย่างต่อไปนี้จะใช้เป็นเมนูภาษาไทย (เพราะระบบเลือกให้อัตโนมัติ) ให้กดเลือกที่ "สร้างรายได้จากแอปใหม่" (ขอใช้กรอบสีเขียวแทน เพราะเว็ป AdMob สีแดงเต็มไปหมดเลย...)



        • จากนั้นก็จะเข้าสู่หน้าสร้างรายได้จากแอปใหม่" ข้อดีของหน้านี้คือสามารถค้นหาแอปพลิเคชันที่อยู่บน Store ได้เลย ไม่ว่าจะ iOS หรือ Android หรือจะเพิ่มด้วยตนเองก็ได้




        โดยเจ้าของบล็อกขอเลือกเป็น "เพิ่มแอปของคุณด้วยตนเอง" ละกันนะ แล้วตั้งชื่อแอปที่จะใส่โฆษณาได้เลย พร้อมกับกำหนด Platform ของแอปพลิเคชันให้เรียบร้อยซะ แล้วกดปุ่ม "เพิ่มแอป"


        • ต่อมาจะเป็นการเลือกว่าโฆษณาที่จะใช้แสดงเป็นแบบ Banner หรือว่า Interstitial (แสดงเต็มหน้าจอ) เจ้าของบล็อกเลือกเป็น Banner ละกัน จากนั้นก็จะมีการตั้งค่าเกี่ยวกับโฆษณาที่เลือก ซึ่งเจ้าของบล็อกไม่ได้กำหนดอะไรเพิ่มเติมเพราะมีค่าเริ่มต้นมาให้อยู่แล้ว แต่ที่ต้องใส่ลงไปคือ "ชื่อหน่วยโฆษณา" ก็คือชื่อของรูปแบบโฆษณาที่จะสร้างขึ้นมานี่ล่ะ (เวลาดูรายละเอียดของโฆษณาแต่ละตัวที่หน้า Dashboard จะแสดงตามชื่อที่ตั้งไว้)



        ถ้าเป็น Interstitial หรือ "โฆษณาคั่นระหว่างหน้า" จะเป็นแบบนี้ (กำหนดระยะเวลาได้ด้วยล่ะ)




        • และขั้นตอนสุดท้ายจะเป็นการแนะนำวิธีการนำโฆษณาไปใช้งานในแอปพลิเคชัน ให้กดปุ่ม "สร้างหน่วยโฆษณาอื่น"



        • เมื่อสร้างเสร็จแล้วก็จะเข้าสู่หน้า Dashboard ของ AdMob (ถ้าไม่เข้าหน้านี้ให้ กดที่ "สร้างรายได้" ที่อยู่แถบเมนูข้างบน) ซึ่งหน้านี้มีไว้รายงานรายได้จากโฆษณาผ่านแอปพลิเคชันของผู้ที่หลงเข้ามาอ่าน และจะเห็นว่าที่แถบซ้ายมือจะมีชื่อแอปพลิเคชันที่ได้สร้างไปเมื่อครู่นี้



        • เมื่อเข้ามาที่หน้าโฆษณาที่ได้สร้างขึ้นไว้ ให้ดูที่ "รหัสหน่วยโฆษณา" หรือ Ad Unit ID ซึ่งรหัสนี้แหละที่จะเอาไปใช้ในแอปพลิเคชันนั่นเอง จดไว้ซะ




การใส่โฆษณาลงในแอปพลิเคชัน

        เอาล่ะ ทีนี้การกำหนดค่าบน AdMob ก็เสร็จเรียบร้อยละ ทีนี้มาจัดการฝั่งแอปพลิเคชันกันต่อเลยดีกว่า ก่อนอื่นก็ดาวน์โหลดไลบรารีมาก่อน โดยดาวน์โหลดจาก Android SDK Manager ถ้ามีอยู่แล้วก็ไม่ต้องก็ได้

        คำเตือนล่วงหน้า - ห้ามกดโฆษณาของตัวเองเด็ดขาด (อยู่ในข้อตกลงของ AdMob อยู่แล้ว) ดังนั้นตอนทดสอบถ้าเห็นโฆษณาขึ้นมา อย่าไปกดเล่นล่ะ แต่ถ้าอยากกดเล่นก็ดูวิธีการใส่ Test Device (อยู่ในเนื้อหาของบทความนี้นี่แหละ) จะได้ทำให้เครื่องเป็นเครื่องทดสอบสามารถกดโฆษณาได้ (แต่ไม่ได้เงิน)



        จากนั้นก็ Import มาไว้ในโปรแกรมให้เรียบร้อยซะ แล้วทำการสร้างโปรเจคขึ้นมา กำหนด Target API เป็น 11 ขึ้นไป และอย่าลืมว่า Package Name จะต้องตรงกับที่กำหนดไว้ใน AdMob ด้วยนะเออ แล้วทำการกำหนดโปรเจคให้ใช้ไลบรารีของ Google Play Service ซะ



        ก่อนอื่นจะต้องรู้กันก่อนว่าจะต้องมีการกำหนดอะไรใน Android Manifest บ้าง อย่างแรกเลยก็คือ Permission สำหรับใช้งาน Internet

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


        ประกาศ Activity สำหรับแสดงโฆษณา

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

        หมายเหตุ - ตรง configChanges จริงๆต้องพิมในบรรทัดเดียว แต่พอดีเอามายกตัวอย่างให้ดู จะให้พิมบรรทัดเดียวมันก็ไม่พอ ก็เลยขอแบ่งเป็นสองบรรทัด


        และที่ขาดไม่ได้สำหรับไลบรารี Google Play Service นั่นก็คือ ประกาศ Meta Data สำหรับเวอร์ชันของไลบรารี Google Play Service

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


        ดังนั้นสรุปออกมาทั้งหมดก็จะได้เป็นดังนี้


AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="app.akexorcist.googleadmob"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="19" />
    
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name="app.akexorcist.googleadmob.Main"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        
        <activity
            android:name="com.google.android.gms.ads.AdActivity" 
            android:configChanges="keyboard|keyboardHidden|orientation
                    |screenLayout|uiMode|screenSize|smallestScreenSize" />
        
        <meta-data
            android:name="com.google.android.gms.version"
            android:value="@integer/google_play_services_version" />
        
    </application>

</manifest>


        สำหรับโฆษณาใดๆใน AdMob จะขอใช้คำว่า Ads โดยที่ Ads จะมีให้ผู้ที่หลงเข้ามาอ่านได้เลือกใช้งานอยู่ด้วยกันสองแบบ คือ


AdView [Banner]

        อันนี้มักจะเห็นกันบ่อยๆในแอปพลิเคชันที่ติดโฆษณา นั่นก็คือป้ายโฆษณาเล็กๆที่โผล่ขึ้นมาในเวลาที่ใช้งานแอปพลิเคชันนั่นเอง




IntersitialAd [Fulllscreen Ads]

        อันนี้จะเป็นโฆษณาแบบเต็มจอ นึกถึงเวลาเล่นแอปพลิเคชันจำพวกเกมที่เวลาจบฉากนึงก็จะมีโฆษณาโผล่ขึ้นมาเต็มจอเป็นต้น



        คำเตื๊อนคำเตือน - การแสดงโฆษณาบน AdView ต้องกำหนดเป็น Banner หรือ "แบนเนอร์" ตอนสร้างโฆษณาในหน้าเว็ป AdMob ส่วนการแสดงโฆษณาบน InterstitialAds ต้องกำหนดเป็น Interstitial หรือ "โฆษณาคั่นระหว่างหน้า" เพราะงั้นอย่าใช้สลับมั่วซั่ว ไม่งั้นมันจะไม่แสดง


        เริ่มจาก AdView ก่อนละกัน สำหรับ AdView ก็จะต้องมีการประกาศใช้งานใน Layout XML ดังนี้

<com.google.android.gms.ads.AdView 
    android:id="@+id/adView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    ads:adUnitId="Ad_Unit_Id"
    ads:adSize="Banner_Size" />

        adUnitId : Ad Unit ID จากหน้าเว็ป AdMob ที่บอกให้จดไว้ตอนแรก

        adSize : ขนาดของโฆษณาที่จะแสดง ซึ่งมีให้กำหนดดังนี้

                    BANNER : 320 x 50 px
                    MEDIUM_RECTANGLE : 300 x 250 px
                    FULL_BANNER : 468 x 60 px
                    WIDE_SKYSCRAPTER : 160 x 600 px
                    LEADERBOARD : 728 x 90 px
                    SMART_BANNER : ปรับเปลี่ยนไปตามอุปกรณ์ ดูที่นี่

        โดย adSize ปกติเจ้าของบล็อกจะใช้เป็น SMART_BANNER เพราะมันช่วยจัดการเรื่องขนาดในเวลาที่แสดงผลในแนวตั้งหรือแนวนอน และไม่ว่าจะเป็น Phone หรือ Tablet ก็ตาม


main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    
    <com.google.android.gms.ads.AdView 
        android:id="@+id/adView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        ads:adUnitId="ca-app-pub-307649133173XXXX/58557XXXXX"
        ads:adSize="SMART_BANNER" />
    
</RelativeLayout>

        ให้สังเกตตรง xmlns:ads ตรงนี้เน้นด้วยว่าต้องใส่ทุกครั้งสำหรับ XML หน้าที่มีการแสดงโฆษณา ถ้าไม่ใส่เดี๋ยวก็ขึ้นเออเรอลง AdView ให้เห็นนั่นแหละ


        สำหรับ AdMob แบบ Google Play Service จะต่างจากแบบของเก่าเสียหน่อย นั่นก็คือต้องเขียนคำสั่งเพิ่มเข้าไปด้วย ซึ่งของเก่านั้นแค่กำหนดค่าทั้งหมดลงใน XML ก็สามารถทำงานได้แล้ว

        แต่เนื่องจากมีการเปลี่ยนโครงสร้างการทำงานใหม่จึงทำให้ต้องมีการใช้คำสั่งเพื่อกำหนดค่าต่างๆเพิ่มเติมอีก โดยการใช้งานเบื้องต้นจะเป็นดังนี้

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

        AdRequest - com.google.android.gms.ads.AdRequest
        เป็นคลาสที่ใช้กำหนดข้อมูลโฆษณาที่จะส่งมายังเครื่องผู้ใช้งาน

        AdRequest.Builder
        เป็นตัวกำหนดข้อมูลสำหรับ AdRequest

        AdView - com.google.android.gms.ads.AdView
        เป็นคลาส View สำหรับแสดงโฆษณา

        จากตัวอย่างก็คือเจ้าของบล็อกสร้าง Builder ขึ้นมาแล้วไปกำหนดกับให้ AdRequest อีกทีหนึ่ง และตอนที่จะให้ AdView โหลดโฆษณามาแสดงก็จะใช้ AdRequest กำหนดค่า


        ทำไมต้องมี Builder? คลาส Builder มีไว้ใช้ระบุรูปแบบของโฆษณาที่จะแสดงให้ผู้ใช้เห็นในระดับนึง เพื่อให้ตรงกับกลุ่มผู้ใช้งาน ควรกำหนดค่าให้เสร็จก่อนที่เรียกใช้คำสั่ง loadAd

        กำหนดที่อยู่ของผู้ใช้งาน สามารถระบุโฆษณาให้เหมาะสมกับประเทศนั้นๆได้

Location location = new Location("AdMobProvider");
location.setLatitude(13.543296);
location.setLatitude(100.924562);
    
AdRequest.Builder adBuilder = new AdRequest.Builder();
adBuilder.setLocation(location);
        
AdRequest adRequest = adBuilder.build();
AdView adView = (AdView)findViewById(R.id.adView);
adView.loadAd(adRequest);

        เท่านี้โฆษณาที่จะแสดงก็เป็นโฆษณาสำหรับคนไทยแล้ว (พิกัดที่ใส่ลงไปอยู่ในประเทศไทย)


        กำหนดเพศของผู้ใช้งาน สามารถระบุเพศของผู้ใช้เพื่อให้โฆษณาที่แสดงเจาะจงสำหรับเพศนั้นๆได้ โดยจะมีให้เรียกใช้ดังนี้

AdRequest.GENDER_FMALE
AdRequest.GENDER_MALE
AdRequest.GENDER_UNKNOWN

adBuilder.setGender(AdRequest.GENDER_FEMALE);


        กำหนดวันเกิดของผู้ใช้งาน สามารถรู้ถึงช่วงอายุของผู้ใช้งานได้ เพื่อให้โฆษณาแสดงโฆษณาให้เหมาะสมกับอายุของผู้ใช้

Date birthday = new GregorianCalendar(1989, 12, 25).getTime();

adBuilder.setBirthday(birthday);


        กำหนดผู้ใช้งานเป็นเด็ก เพื่อแสดงโฆษณาที่เหมาะสมกับเด็ก

adBuilder.tagForChildDirectedTreatment(true);


        ทดสอบการทำงานของโฆษณา กรณีที่ผู้ที่หลงเข้ามาอ่านต้องการทดสอบการทำงานของโฆษณาจะต้องกำหนดดังนี้

adBuilder.addTestDevice("DEVICE_ID");

        โดยโฆษณาที่แสดงให้เห็นจะมีลักษณะดังนี้



        แล้วจะรู้ Device ID ได้ยังไงล่ะ?

        ตอนทดสอบแอปพลิเคชันทุกครั้งที่มีโฆษณาอยู่ด้วย จะมีการแจ้ง Device ID ให้อยู่แล้วทาง LogCat ให้ลองไปเช็คดู จะ Filter จากชื่อ Tag ว่า Ads ก็ได้นะ


        หรือถ้าใช้เป็น Emulator สามารถกำหนดแบบนี้ได้เลย

adBuilder.addTestDevice(AdRequest.DEVICE_ID_EMULATOR);


        กำหนด Keyword เพื่อช่วยเจาะจงโฆษณาที่จะแสดงให้ผู้ใช้เห็น

adBuilder.addKeyword("Shopping");


        กำหนดคุณลักษณะของตัวแสดงโฆษณา อันนี้ไม่ได้เกี่ยวกับรูปแบบของโฆษณา แต่เป็นการกำหนดสีของภาพโฆษณาที่เป็นข้อความเท่านั้น

Bundle bundle = new Bundle();
bundle.putString("color_bg", "6AE6DC");
bundle.putString("color_bg_top", "FFFFFF");
bundle.putString("color_border", "1A8F85");
bundle.putString("color_link", "FE7200");
bundle.putString("color_text", "676462");
bundle.putString("color_url", "FE7200");

AdMobExtras extras = new AdMobExtras(bundle);


        หมดละ สำหรับ Builder ทั้งนี้ทั้งนั้นคำสั่งที่เกริ่นให้ฟังนี้สามารถใช้ร่วมกันได้ ไม่ได้จำเป็นต้องใช้อย่างใดอย่างหนึ่งเท่านั้น


        ต่อมาขอข้าม AdRequest เลย เพราะมีแต่คำสั่ง Get เพราะ Set อยู่ใน Builder หมดแล้ว ดังนั้นก็มาพูดถึง AdView เลย

        เริ่มจากกำหนดขนาดของโฆษณาเลย อันนี้จะเหมือนกับ android:adSize นั่นแหละ แต่สามารถกำหนดในโปรแกรมได้เช่นกัน ในกรณีที่ไม่อยากกำหนดค่าใน XML โดยมีขนาดให้เลือกเหมือนๆกันเลย

AdSize.BANNER
AdSize.FULL_BANNER
AdSize.LEADERBOARD
AdSize.MEDIUM_RECTANGLE
AdSize.SMART_BANNER
AdSize.WIDE_SKYSCRAPER

AdView adView = (AdView)findViewById(R.id.adView);
adView.setAdSize(AdSize.BANNER);

        หรือจะกำหนด Publisher ID ผ่านคำสั่งก็ได้เช่นกัน

adView.setAdUnitId("ca-app-pub-307649133173XXXX/585887XXXXX");


        AdListener
        com.google.android.gms.ads.AdListener
        พูดถึง Listener กันบ้าง เป็น Listener ที่สามารถเช็คสถานะของ Ads ได้

AdRequest.Builder adBuilder = new AdRequest.Builder();
AdRequest adRequest = adBuilder.build();
AdView adView = (AdView)findViewById(R.id.adView);
adView.setAdListener(new AdListener() {
    public void onAdClosed() { }
    public void onAdFailedToLoad(int errorCode) { }
    public void onAdLeftApplication() { }
    public void onAdLoaded() { }
    public void onAdOpened() { }
});
adView.loadAd(adRequest);

        onLoaded : เมื่อ Ads ดาวน์โหลดเตรียมไว้เรียบร้อยแล้ว

        onOpened : เมื่อ Ads ถูกแสดงให้ผู้ใช้เห็น

        onAdLeftApplication : เมื่อผู้ใช้กดที่ Ads และกำลังไปตามลิ้งของโฆษณา

        onAdClosed : เมื่อ Ads ถูกปิด หลังจากที่ผู้ใช้กดดูโฆษณา

        onAdFailedToLoadเมื่อ Ads ดาวน์โหลดไม่ได้ โดยจะมีตัวแปร Int บอกสาเหตุให้


AdRequest.ERROR_CODE_INTERNAL_ERROR
AdRequest.ERROR_CODE_INVALID_REQUEST
AdRequest.ERROR_CODE_NETWORK_ERROR
AdRequest.ERROR_CODE_NO_FILL

        ERROR_CODE_INTERNAL_ERROR (0) : มีข้อผิดพลาดจากการทำงานของเครื่อง

        ERROR_CODE_INVALID_REQUEST (1) : มีการกำหนด Publisher ID ไม่ถูกต้อง

        ERROR_CODE_NETWORK_ERROR (2) : การเชื่อมต่ออินเตอร์เน็ตมีปัญหา

        ERROR_CODE_NO_FILL (3) : ไม่มีโฆษณาจะแสดง เพราะกำหนดโฆษณาเจาะจงเกินไป


        สำหรับการทำงานของ Listener ใน AdView จะมีลักษณะตามรูปข้างล่างนี้เลย




        InterstitialAd
        com.google.android.gms.ads.InterstitialAd

        สำหรับโฆษณาแบบเต็มหน้าจออย่าง InterstitialAd จะมีความแตกต่างกับ AdView บ้างเล็กน้อย อย่างคำสั่งและ XML เพราะว่าการแสดงหน้าโฆษณาเต็มจอไม่จำเป็นต้องมีคำสั่ง XML นั่นเอง ดังนั้นการเรียกใช้งาน InterstitialAd ไม่จำเป็นต้องใส่คำสั่ง XML ในหน้า Layout เลย การเรียกใช้งานจะอยู่ภายใต้คำสั่งใน Activity ทั้งหมด

AdRequest.Builder adBuilder = new AdRequest.Builder();
AdRequest adRequest = adBuilder.build();
InterstitialAd intAd = new InterstitialAd(this);
intAd.setAdUnitId("ca-app-pub-307649133173XXXX/58557XXXXX");
intAd.loadAd(adRequest);

intAd.show();

        จะเห็นว่ามี AdRequest และ Builder เหมือนกับ AdView เลย แต่เปลี่ยนจาก AdView มาเป็น InterstitialAd เท่านั้นเอง และมีคำสั่งเพิ่มเข้ามาอีกคำสั่งคือ show เดี๋ยวจะเล่าให้ฟังว่ามันคืออะไร และทำไมต้องมี

        ลองนึกภาพตามและดูภาพนี้ประกอบนะ เจ้าของบล็อกเล่นเกมนึงอยู่เป็นแนว Puzzle ที่เป็นด่านๆไป ทีนี้เมื่อเล่นด่านนึงจบแล้ว และต้องกดปุ่มเพื่อไปเล่นด่านต่อไป ก็จะเช็คว่าโฆษณาโหลดเสร็จแล้วหรือยัง ถ้าเสร็จแล้วก็แสดง เมื่อผู้ใช้ดูเสร็จก็ไปด่านต่อไป หรือถ้ายังโหลดไม่เสร็จก็ไปด่านต่อไปเลย เป็นต้น


        แล้วหมายความว่ายังไงล่ะ? เกี่ยวอะไรกับคำสั่ง show ?

        นั่นก็เพราะว่าระหว่างที่เล่นด่านแรกอยู่ ก็มีการใช้คำสั่ง loadAd เพื่อเตรียมโฆษณาไว้ในระหว่างที่กำลังเล่นด่านแรกอยู่นั่นเอง พอจะไปด่านสองก็ใช้คำสั่งแสดงโฆษณาที่เตรียมไว้แล้ว ซึ่งจะต่างจาก AdView ที่จะเป็นการดาวน์โหลดโฆษณามาเสร็จปุปก็แสดงทันที

AdRequest.Builder adBuilder = new AdRequest.Builder();
AdRequest adRequest = adBuilder.build();
final InterstitialAd iAd = new InterstitialAd(this);
iAd.loadAd(adRequest);
iAd.setAdListener(new AdListener() {
    public void onAdClosed() {
        nextActivity();
    }
});

Button button1 = (Button)findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        if(iAd.isLoaded()) 
            iAd.show();
        else 
            nextActivity();
    }
});

public void nextActivity() {          
    Intent intent = new Intent(getApplicationContext()
            , NextActivtiy.class);
    startActivity(intent);
}

        ดังนั้น Listener ของ InterstitialAd ก็จะมีลักษณะแบบนี้



        รู้ตัวอีกทีบทความก็ยืดยาวซะล่ะ....งั้นบทความรอบนี้ไม่มีแปะโค๊ดให้ดูนะ แต่ให้ลิ้งดาวน์โหลดแล้วไปดูเองเลย โดยเจ้าของบล็อกเขียนตัวอย่างไว้สองหน้าด้วยกัน โดยหน้าแรกสำหรับ InterstitialAd โดยกดแล้วจะไปอีกหน้าหนึ่งซึ่งมี AdView แสดงอยู่นั่นเอง

        สามารถดาวน์โหลดตัวอย่างการใช้งาน AdView และ InterstitialAd ได้จาก

                Google AdMob [Google Drive]

                Google AdMob [GitHub]

                Google AdMob [Sleeping For Less]



เพิ่มเติมเกี่ยวกับการใช้ AdMob

        • อย่าลืมว่าถ้าใช้ AdView ให้กำหนดโฆษณาในเว็ปเป็น Banner หรือ "แบนเนอร์" และถ้าใช้ InterstitialAd ให้กำหนดโฆษณาในเว็ปเป็น Interstitial หรือ "โฆษณาคั่นระหว่างหน้า"

        • ในกรณีที่แอปพลิเคชั่นมีโฆษณาทั้งสองแบบสามารถเพิ่มได้ทั้งคู่เช่นกัน เพราะในหนึ่งแอปพลิเคชั่นสามารถเพิ่ม "หน่วยโฆษณาใหม่" หรือ New Ad Unit ได้ตามต้องการ



         • AdMob แบบใหม่จะมีการแยกแอปพลิเคชั่นออกจากกัน ซึ่งช่วยให้ง่ายต่อการจัดการในแต่ละแอปพลิเคชัน (เพราะแต่ละแอปพลิเคชันมีหน่วยโฆษณาได้มากกว่าหนึ่ง) ดังนั้นจึงเป็นที่มาในตอนแรกว่าสร้างโฆษณาทำไมถึงเลือกจากแอปพลิเคชันที่อยู่บน Google Play ได้





        • กรณีที่ผู้ที่หลงเข้ามาอ่านเปลี่ยนจาก AdMob เก่ามาเป็นแบบใหม่ จะเห็นว่า ID ของโฆษณามีแบบของเก่าให้อยู่ด้วย ไม่ได้หมายความว่าไม่ต้องเปลี่ยนนะ แต่ ID ใช้ได้ถึง 1 สิงหาคม 2557 นี้เท่านั้น ดังนั้นไปอัปเดตเป็นของใหม่กันด้วยนะ

        เพิ่มเติม - ของเดิมจะเรียกว่า Publisher ID แต่ของใหม่จะเรียกว่า Ad Unit ID



ย้ายจากแบบเก่ามาเป็นแบบใหม่ต้องทำอะไรบ้าง?

        อันนี้อิงจากของเจ้าของบล็อกนะ เพราะจะมีแจ้งในหน้าบัญชีว่าต้องไปทำอะไรบ้างเมื่อเปลี่ยนมาใช้แบบใหม่ โดยเข้าไปที่ "บัญชี" > "ข้อมูล AdMob เดิม"



        จะเห็นว่ามีให้เชื่อมโยงบัญชีจากของเดิมด้วย ให้ทำการเชื่อมโยงมาเป็นของใหม่ให้เรียบร้อยซะ

        หมายเหตุ - ยอดเงินของเก่าจะไม่นับรวมของใหม่นะครับ เห็นว่าทาง AdMob จะโอนให้ในภายหลัง


        สำหรับนักพัฒนาจะต้องอัปเดตรายละเอียดหลักๆเพียงแค่สองอย่างคือ "บัญชี" กับ "สร้างรายได้" ส่วน "โปรโมต" มีไว้สำหรับผู้ที่หลงเข้ามาอ่านที่ลงโฆษณากับ AdMob

        ถ้าไม่ได้กำหนดอะไรในโฆษณามาก สิ่งที่ควรตรวจสอบโดยคร่าวๆทั้งหมดก็มีดังนี้

        "ตรวจทานข้อมูลติดต่อของคุณ" ตรวจสอบที่ "การตั้งค่าบัญชี" ว่าใส่ข้อมูลครบถ้วน

        "เปลี่ยนรหัสหน่วยโฆษณาเดิมเป็นรหัสใหม่" อันนี้บอกไว้แล้วในตอนแรกว่าให้ไปเปลี่ยน Ad Unit ID ในแอปพลิเคชั่นให้เป็นของใหม่ซะ

        "อัปเดตรายละเอียดการชำระเงิน" ดูในหัวข้อต่อไปได้เลย

        ในหน้าบัญชีของ AdMob จะรวมกับ AdSense ด้วย ดังนั้นถ้ามีการใช้ AdSense อยู่ก็สามารถดูรายละเอียดประวัติการรับเงินได้ที่นี่เช่นกัน และสามารถทำยอดรวมได้ด้วย ถ้าทั้ง AdMob และ AdSense รวมกันแล้วเกิน $100 ก็เบิกได้เลย


        สำหรับการเปลี่ยน Ad Unit ID ที่ได้บอกไว้ สามารถดาวน์โหลดเป็นไฟล์ CSV แล้วได้ที่เมนู "ข้อมูล AdMob เดิม" ได้เลย



        เมื่อเปิดไฟล์ขึ้นมาก็จะเห็นว่ามีรายชื่อแอปพลิเคชันของผู้ที่หลงเข้ามาอ่านที่ติดโฆษณาจาก AdMob ไว้ โดยจะมีบอกที่ Publisher ID ที่เป็นของเก่า และ Ad Unit ID ที่เป็นของใหม่ให้โดยไม่ต้องไปนั่งกดดูในหน้าเว็ปทีละอันนั่นเอง




การรับเงินจากโฆษณา [การชำระเงิน]

        การชำระเงินนั้นจะทำก็ต่อเมื่อมีรายได้มากกว่า $100 ขึ้นไป โดยที่กำหนดข้อมูลบัญชีได้ในหน้า "บัญชี" > "การชำระเงิน" > "การตั้งค่าการชำระเงิน"

        คำเตือน - โปรดใช้ Browser ตัวอื่นที่ไม่ใช่ Internet Explorer เพราะเจ้าของบล็อกลองแล้วโหลดข้อมูลในหน้าการชำระไม่ขึ้น (ขนาดใช้ Internet Explorer บน Windows 8.1 นะเนี่ย!!!)


        • ที่เมนูซ้ายมือให้เลือกที่ "การชำระเงิน" > "การตั้งค่าการชำระเงิน" จากนั้นให้กดที่ปุ่ม "เพิ่มรูปแบบการชำระเงินใหม่"


        หมายเหตุ - ในกรณีที่พึ่งสมัคร AdMob ใหม่ๆ (ยังไม่ได้ผ่านการ Verify Account) หรือมีรายได้ยังไม่ถึง $10 จะไม่มีปุ่มนี้ให้กดนะ ดังนั้นรอให้รายได้รวมถึงยอดดังกล่าวก่อนถึงจะเข้ามาตั้งค่าบัญชีได้



        • จะมีให้เลือกว่ารับเงินผ่านบัญชีธนาคารหรือ Western Union โดยตัวอย่างนี้เจ้าของบล็อกเลือกบัญชีธนาคาร



        • เมื่อกดเลือกเป็นแบบบัญชีธนาคารก็จะแสดงหน้าต่างให้ใส่ข้อมูลขึ้นมา ให้กรอกข้อมูลให้เรียบร้อยซะ



                ชื่อเจ้าของบัญชี : ชื่อบัญชี (ใส่ชื่อเต็มภาษาอังกฤษ)

                ชื่อธนาคาร : ชื่อธนาคาร (ใส่ชื่อเต็มภาษาอังกฤษ)

                SWIFT-BIC : รหัสธนาคาร

                เลขที่บัญชี : เลขที่บัญชี

                พิมพ์หมายเลขบัญชีอีกครั้ง : เลขที่บัญชี


        สำหรับข้อมูลของธนาคาร เจ้าของบล็อกได้หาข้อมูลมาให้เรียบร้อยแล้ว

                ธนาคารกรุงเทพ
                        Name : Bangkok Bank Public Company Limited
                        SWIFT Code : BKKBTHBK
   
                ธนาคารกรุงศรีอยุธยา
                        Name : Bank of Ayudhya Public Company Limited
                        SWIFT Code : AYUDTHBK

                ธนาคารกสิกรไทย
                        Name : KASIKORNBANK Public Company Limited
                        SWIFT Code : KASITHBK

                ธนาคารกรุงไทย
                        Name : Krung Thai Bank Public Company Limited
                        SWIFT Code : KRTHTHBK

                ธนาคารนครหลวงไทย
                        Name : Siam City Bank Public Company Limited
                        SWIFT Code : SITYTHBK

                ธนาคารไทยพาณิชย์
                        Name : Siam Commercial Bank Public Company Limited
                        SWIFT Code : SICOTHBK

                ธนาคารทหารไทย
                        Name : TMB Bank Public Company Limited
                       SWIFT Code : TMBKTHB

                ธนาคารยูโอบี
                        Name : Union Overseas Bank (Thai)
                        SWIFT Code : BKASTHBK


        เมื่อใส่ข้อมูลเสร็จแล้วก็กดบันทึกข้อมูลได้เลย

        • จะเห็นว่ารูปแบบการชำระเงินถูกเพิ่มเป็นบัญชีธนาคารที่ได้กำหนดเมื่อครู่นี้แล้ว เท่านี้ก็เป็นอันเสร็จเรียบร้อยสำหรับการกำหนดบัญชีรับเงิน



        หมายเหตุ - ในกรณีที่ใช้แต่ AdMob อย่างเดียวไม่เคยใช้ AdSense มาก่อน ดูเหมือนว่าจะต้องไปทำการยืนยันตัวตนด้วยรหัส PIN นะครับ นั่นคือการแจ้งให้ทาง Google ส่งรหัส PIN มาทางจดหมายแล้วเอารหัสไปยืนยันในเว็ปครับ เพราะไม่เช่นนั้นต่อให้มีรายได้ถึง $10 ก็จะไม่สามารถใส่บัญชีเพื่อรับเงินได้นะครับ โดยสามารถดูรายละเอียดได้จากที่นี่ การยืนยันที่อยู่/PIN [AdMob] แต่ถ้าเคยใช้ AdSense อยู่แล้วก็ไม่ต้องกังวล เพราะว่าเคยยืนยันตัวด้วย PIN ไปเรียบร้อยแล้วนั่นเอง


        สำหรับการชำระเงินแบบใหม่ของ AdMob ถ้าผู้ที่หลงเข้ามาอ่านคนใดอยากศึกษาเพิ่มเติมไปดูกันได้ที่  ระบบการชำระเงินใหม่ [AdMob]

        ส่วนนักพัฒนาคนใดอยากเห็นภาพรวมว่าเปลี่ยนจาก AdMob SDK ไปเป็น Google Play Service นั้นต้องเปลี่ยนตรงไหนบ้าง สามารถดูได้จากที่นี่ Google Play Services Migration [AdMob]


ขอบคุณผู้ตรวจทาน : Ethan Matthew Hunt




เหล่าพันธมิตรแอนดรอยด์

Devahoy Layer Net NuuNeoI The Cheese Factory Somkiat CC Mart Routine Artit-K Arnondora Kamonway Try to be android developer Oatrice Benz Nest Studios Kotchaphan@Medium Jirawatee@Medium Travispea@Medium