Android : How to check App Version name from Play Store

วันนี้เราจะมาพูดถึงการเช็ค Version Name จาก Play Store กันครับ บางทีเวลาเราอัพเดทแอปปลิเคชันขึ้น Play store ไปแล้ว แต่ผู้ใช้ไม่ได้ check auto update ไว้ นั่นจะทำให้ผู้ใช้ไม่ได้รับการอัพเดทเวอร์ชันใหม่ไปด้วย จนกว่าผู้ใช้จะเข้า play store แล้วระบบเตือนว่ามีแอปฯอัพเดทนั่นเอง

คราวนี้ถ้าเราต้องการให้ผู้ใช้รู้ตอนที่เข้ามาใช้แอปฯเลยล่ะ นั่นคือเราก็ต้องให้แอปฯเรามีการไปเช็คเวอร์ชันปัจจุบันบน Play Store (Latest Version) แล้วเอามาเทียบกับเวอร์ชันในแอปฯที่ใช้อยู่ขณะนี้ ( Current Version) ถ้าพบว่า Latest Version > Current Version ก็ให้เปลี่ยนหน้าไปยังหน้าที่แจ้งเตือนว่ามีแอปฯอัพเดทนั่นเอง แล้วอาจสร้างปุ่มให้คลิ้กไปยัง play store หน้าแอปฯนั่นๆไปเลย ซึ่งจะทำให้ผู้ใช้ได้รับการอัพเดทอย่างทันท่วงที และครบถ้วนได้ ( ถ้าทำตั้งแต่เวอร์ชัน 1.0 เลย ก็จะครบถ้วนในเวอร์ชันถัดๆไป แต่ถ้าเพิ่งมาเพิ่ม feature check updated นี่ก็ต้องรอให้เวอร์ชันเก่าๆอัพให้หมดก่อนนะครับ)

ตัวอย่างโค้ดในการเช็ค

1. Check Current Version

เราสามารถเช็ค Version Name ภายในแอปได้ด้วยโค้ดนี้

String currVersion;

try {
currVersion = 
getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
} catch (PackageManager.NameNotFoundException e) {
    e.printStackTrace();
}

2. Check Latest Version from Play Store

2.1 include Jsoup library

ในที่นี้เราจะใช้ตัวช่วยคือ “Jsoup” Library ซึ่งหลักการคือไป get source code หน้า play store url มาแล้วค้นหาบรรทัดที่เป็น version name มานั่นเอง

ในตัวอย่างผู้เขียนทดสอบผ่านกับ Jsoub library version 1.6.0 ซึ่งเราสามารถดาว์นโหลดได้จากที่ http://www.java2s.com/Code/Jar/j/Downloadjsoup160jar.htm แล้ววางไฟล์ “.jar” ไว้ที่ libs/ ของโปรเจ็ค จากนั้นทำการเพิ่มใน build.gradle ของโปรเจ็คดังนี้

dependencies {
    ...
    compile files('libs/jsoup-1.6.0.jar')

}

2.2 เพิ่มโค้ดเช็ค version name

String latestVersion;

// check latest version code in play store
GetVersionCode versionChecker = new GetVersionCode();

try {
    latestVersion = versionChecker.execute().get();
} catch (InterruptedException e) {
    e.printStackTrace();
} catch (ExecutionException e) {
    e.printStackTrace();
}

โดยในโค้ดจะมีการเรียกใช้ฟังก์ชัน GetVersionCode() ; เพราะงั้นเราต้องเพิ่มฟังก์ชันนี้ไปด้วย

private class GetVersionCode extends AsyncTask<Void, String, String> {
    @Override
    protected String doInBackground(Void... voids) {

        String newVersion = null;
        try {
            newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=krish.pugazh.goodmorningimages2")
                    .timeout(30000)
                    .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
                    .referrer("http://www.google.com")
                    .get()
                    .select(".htlgb").get(3)
                    .ownText();
            return newVersion;
        } catch (Exception e) {
            return newVersion;
        }
    }

}

จากตัวอย่างให้เราแก้ตรง newVersion = Jsoup.connect(“….”); โดยในวงเล็บเป็น play store url ของแอปที่จะเช็คเวอร์ชัน

2.3 ทำการเปรียบเทียบ Current Version vs Latest Version

จากข้อ 2.1, 2.2 เราจะได้เวอร์ชันของแอปฯที่ใช้อยู่ (Current Version) กับเวอร์ชันล่าสุดที่อยู่ play store (Latest Version) เราก็เอามาเปรียบเทียบค่า string กันเลย ดังนี้

// if can't get latest version then not compare version
if ((latestVersion != null) && (!latestVersion.isEmpty())){

    // if not latest version and current < latest need updated goto play store
    if (currVersion.compareTo(latestVersion) < 0) {

       .... Do anything if current version < latest version .....

    }
}

จากตัวอย่าเราจะได้เงื่อนไขที่พบว่า เวอร์ชันบนแอปที่ใช้อยู่น้อยกว่าบน play store ละ เราจะทำอะไรต่อก็ใส่เข้าไปเลย

Note!!

ตัว Jsoup คือไป get source code url page มาตัดเอาเฉพาะสิ่งที่เราต้องการ ดังนั้นถ้าวันนึง Play Store อัพเดทการแสดงผลบนเพจใหม่ เปลี่ยนค่าจะทำให้ฟังกชันนี้ get ค่า latest version = null เราจะต้องไปเปิดดูโค้ดหน้า play store ของแอปใหม่ แล้วค้นหาว่าตรงที่ระบุเวอร์ชันของแอปอยุ่ตรงไหน แล้วเข้าไปตัดมา โดยศึกษาวิธีการตัดข้อความจาก jsoup url select syntax

แล้วเข้าไปเปลี่ยนตรงบรรทัด .select(“.htlgb”).get(3)

You may also like...