Periksa Play Store secara terprogram untuk pembaruan aplikasi

93

Saya telah meletakkan aplikasi saya di Google Play Store. Ini telah dipasang oleh banyak pelanggan perusahaan saya. Saya memahami mekanisme bagaimana aplikasi dimaksudkan untuk ditingkatkan.

Pengguna harus mencentang kotak pembaruan otomatis di aplikasi playstore untuk setiap aplikasi yang ingin mereka perbarui secara otomatis. Namun beberapa pengguna telah menghapus centang atau tidak memeriksanya sejak awal.

Aplikasi yang saya tulis adalah untuk industri perawatan dan digunakan oleh penjaga untuk memberikan perawatan rumah. Beberapa pelanggan kami, saya memiliki 1200 pengasuh. Mereka harus memanggil semua penjaga ke kantor untuk memperbarui telepon satu per satu. Ini jelas tidak bisa diterima.

Adakah cara untuk memeriksa secara terprogram apakah ada versi terbaru aplikasi saya di Play Store?

Bisakah saya memiliki kode yang berjalan setiap kali pengguna memulai aplikasi yang memeriksa Play Store? Jika ada versi yang diperbarui maka pengguna bisa diarahkan ke playstore. Ini berarti tidak perlu memeriksa pembaruan otomatis.

Terima kasih sebelumnya

Matt

kura-kura
sumber
Bukankah play store sudah memberikan pemberitahuan kepada pengguna jika ada pembaruan yang tersedia untuk suatu aplikasi?
Nischaal Cooray
1
Apakah aplikasi Anda terhubung ke cloud / internet di jauh ke API yang telah Anda tulis - Karena Anda bisa saja memiliki variabel 'versi' yang dapat Anda perbarui secara manual - saat membuka aplikasi, periksa versi lokal dengan versi cloud - jika mereka berbeda, sarankan pembaruan
gavlaaaaaaaa
Saya dulu menggunakan jsoup untuk melakukan ini, tetapi sekarang menggunakan regex untuk mengekstrak bidang Versi Saat Ini .
Geezer McNubbins

Jawaban:

42

Update 17 Oktober 2019

https://developer.android.com/guide/app-bundle/in-app-updates

Update 24 April 2019:

Android mengumumkan fitur yang mungkin akan memperbaiki masalah ini. Menggunakan API Pembaruan dalam aplikasi: https://android-developers.googleblog.com/2018/11/unfolding-right-now-at-androiddevsummit.html

Asli:

Sejauh yang saya tahu, tidak ada Google API resmi yang mendukung ini.

Anda harus mempertimbangkan untuk mendapatkan nomor versi dari API.

Alih-alih menghubungkan ke API atau halaman web eksternal (seperti Google Play Store). Ada risiko bahwa sesuatu dapat berubah di API atau halaman web, jadi Anda harus mempertimbangkan untuk memeriksa apakah kode versi aplikasi saat ini di bawah nomor versi yang Anda dapatkan dari API Anda sendiri.

Ingatlah jika Anda memperbarui aplikasi, Anda perlu mengubah versi di API Anda sendiri dengan nomor versi aplikasi.

Saya akan merekomendasikan agar Anda membuat file di situs web atau API Anda sendiri, dengan nomor versi. (Akhirnya buat cronjob dan buat pembaruan versi otomatis, dan kirim pemberitahuan jika ada yang tidak beres)

Anda harus mendapatkan nilai ini dari halaman Google Play Store Anda (sementara itu diubah, tidak berfungsi lagi):

<div class="content" itemprop="softwareVersion"> x.x.x  </div>

Periksa di aplikasi Anda jika versi yang digunakan di seluler di bawah nomor versi yang ditampilkan di API Anda sendiri.

Tunjukkan indikasi bahwa dia perlu memperbarui dengan pemberitahuan, idealnya.

Hal-hal yang dapat Anda lakukan

Nomor versi menggunakan API Anda sendiri

Kelebihan:

  • Tidak perlu memuat seluruh kode Google Play Store (menghemat data / bandwidth)

Kekurangan:

  • Pengguna bisa offline, yang membuat pemeriksaan tidak berguna karena API tidak dapat diakses

Nomor versi di halaman web Google Play Store

Kelebihan:

  • Anda tidak membutuhkan API

Kekurangan:

  • Pengguna bisa offline, yang membuat pemeriksaan tidak berguna karena API tidak dapat diakses
    • Menggunakan metode ini dapat membuat pengguna Anda mengeluarkan lebih banyak bandwidth / data seluler
    • Halaman web Play Store dapat berubah yang membuat versi 'ripper' Anda tidak berfungsi lagi.
Richard Lindhout
sumber
Nomor versi di halaman web Google Play Store sekarang telah Current Versionterdaftar sebagai Varies with deviceide bagaimana ini dapat diselesaikan atau jika ada alternatif lain yang tersedia ??
shadygoneinsane
Memang. Datanglah ke pertanyaan ini karena kami tidak lagi dapat mengakses sumber html dari halaman bermain google kami sendiri saat melakukan permintaan web. kami menerima FileNotFoundException.
Grisgram
Akan mencoba sesuatu seperti mencari div yang berisi teks. Versi sekarang / versi Huidige Temukan angka pertama dan digit titik di div berikutnya. <div class = "hAyfc"> <div class = "BgcNfc"> Huidige versie </div> <div> <span class = "htlgb"> 1,0 </span> </div>
Richard Lindhout
Classname mungkin akan berubah di setiap pembaruan di situs web mereka.
Richard Lindhout
35

Sertakan JSoup dalam file build.gradle aplikasi Anda:

dependencies {
    compile 'org.jsoup:jsoup:1.8.3'
}

dan dapatkan versi terkini seperti:

currentVersion = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;

Dan jalankan utas berikut:

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=" + MainActivity.this.getPackageName() + "&hl=it")
                .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(".hAyfc .htlgb")
                .get(7)
                .ownText();
        return newVersion;
    } catch (Exception e) {
        return newVersion;
    }
    }

    @Override
    protected void onPostExecute(String onlineVersion) {
        super.onPostExecute(onlineVersion);
        Log.d("update", "Current version " + currentVersion + "playstore version " + onlineVersion);
        if (onlineVersion != null && !onlineVersion.isEmpty()) {
            if (Float.valueOf(currentVersion) < Float.valueOf(onlineVersion)) {
                //show dialog
            }
        }
    }

Untuk detail lebih lanjut kunjungi: http://revisitingandroid.blogspot.in/2016/12/programmatically-check-play-store-for.html

Tarun
sumber
di @Override protected void onPostExecute (String onlineVersion) {} jika kondisi untuk versi pemeriksaan tidak boleh dalam nilai Float. Karena dapat memunculkan error seperti ini Invalid java.lang.NumberFormatException: Invalid float: "1.0.6". Jadi gunakan ini. if (! currentVersion.equalsIgnoreCase (onlineVersion)) {....}
Dharmishtha
1
Ada ide tentang bagaimana melakukannya tanpa Jsoup?
Hitesh Sahu
Halo @HiteshSahu, Anda harus menekan URL playstore " play.google.com/store/apps/details?id=com.whatsapp&hl=en ". URL Halaman Terbuka ini. Klik kanan pada halaman dan klik pada opsi "Lihat Sumber Halaman". Di html halaman Anda dapat melihat atribut: "<div class =" content "itemprop =" softwareVersion "> 1.2 </div>". Anda harus mengurai html dan mendapatkan tanda ini secara manual.
Tarun
2
getPackageManager().getPackageInfo(getPackageName(), 0).versionNameAnda bisa menggunakan BuildConfig.VERSION_NAME:)
Enoobong
1
Ini jelas merupakan nama kelas yang dihasilkan yang dapat diubah kapan saja. Anda tidak boleh melakukan ini.
Richard Lindhout
24

Firebase Remote Config bisa menjadi solusi yang mungkin dan andal untuk saat ini, karena google tidak mengekspos api apa pun ke sana.

Periksa Dokumen Firebase Remote Config

Langkah 1. Buat proyek firebase dan tambahkan google_play_service.json ke proyek Anda

2. Buat kunci seperti "android_latest_version_code" dan "android_latest_version_name" di firebase console-> Remote Config

3. Kode Android

    public void initializeFirebase() {
        if (FirebaseApp.getApps(mContext).isEmpty()) {
            FirebaseApp.initializeApp(mContext, FirebaseOptions.fromResource(mContext));
        }
        final FirebaseRemoteConfig config = FirebaseRemoteConfig.getInstance();
        FirebaseRemoteConfigSettings configSettings = new FirebaseRemoteConfigSettings.Builder()
                                                              .setDeveloperModeEnabled(BuildConfig.DEBUG)
                                                              .build();
        config.setConfigSettings(configSettings);
}

Dapatkan nama dan kode versi saat ini

int playStoreVersionCode = FirebaseRemoteConfig.getInstance().getString(
                "android_latest_version_code");
PackageInfo pInfo = this.getPackageManager().getPackageInfo(getPackageName(), 0);
int currentAppVersionCode = pInfo.versionCode; 
if(playStoreVersionCode>currentAppVersionCode){
//Show update popup or whatever best for you
}

4. Dan perbarui firebase "android_latest_version_code" dan "android_latest_version_name" dengan nama dan kode versi produksi saat ini.

Konfigurasi jarak jauh Firebase berfungsi pada Android dan iPhone.

Sreedhu Madhu
sumber
1
Lihat firebasetutorials.com/… untuk membuat parameter di Firebase.
CoolMind
Saya pikir, solusi ini dapat menyebabkan kesalahan kompilasi: Caused by: com.android.tools.r8.utils.AbortException: Error: null, Cannot fit requested classes in a single dex file (# methods: 68703 > 65536). Dalam hal ini Anda harus menambahkan MultiDex ke aplikasi Anda.
CoolMind
17

Anda bisa mendapatkan saat PlayStore Versi menggunakan JSoupdengan beberapa modifikasi seperti di bawah ini:

@Override
protected String doInBackground(Void... voids) {

    String newVersion = null;
    try {
        newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + MainActivity.this.getPackageName() + "&hl=it")
                .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(".hAyfc .htlgb")
                .get(7)
                .ownText();
        return newVersion;
    } catch (Exception e) {
        return newVersion;
    }
}

@Override
protected void onPostExecute(String onlineVersion) {
    super.onPostExecute(onlineVersion);

    Log.d("update", "playstore version " + onlineVersion);
}

jawaban @Tarun sudah tidak berfungsi lagi.

Nikunj
sumber
Ini adalah teman kerja tetapi dapatkah saya mengandalkan ini selamanya atau apakah akan berubah dalam waktu dekat ??
Avinash Roy
1
Tidak disarankan untuk mengandalkan ini karena ini bukan solusi resmi.
Nikunj
@ Nikunj Saya membuat kelas GetVersionCode yang memperluas AsyncTask dan ketika saya menulis kode Anda di dalam kelas itu getPackageName () menunjukkan kesalahan. Saya mencoba ini, GetVersionCode.this tetapi tidak ada yang berhasil.
Aashish
1
Menggunakan .select (". HAyfc .htlgb"). Get (7) tidak kuat terhadap perubahan. Saya melihat solusi lain menggunakan indeks 5 sebagai gantinya. Untuk memilih yang benar, saya menggunakan kueri yang diperpanjang .select (". HAyfc .BgcNfc: containsOwn (Versi Saat Ini) + .htlgb.htlgb"). First () .text ()
HarryS
8

Jawaban @Tarun berfungsi dengan sempurna. Tetapi sekarang tidak, karena perubahan terbaru dari Google di situs web google play.

Ubah saja ini dari jawaban @Tarun ..

class GetVersionCode extends AsyncTask<Void, String, String> {

    @Override

    protected String doInBackground(Void... voids) {

        String newVersion = null;

        try {
            Document document = Jsoup.connect("https://play.google.com/store/apps/details?id=" + MainActivity.this.getPackageName()  + "&hl=en")
                    .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();
            if (document != null) {
                Elements element = document.getElementsContainingOwnText("Current Version");
                for (Element ele : element) {
                    if (ele.siblingElements() != null) {
                        Elements sibElemets = ele.siblingElements();
                        for (Element sibElemet : sibElemets) {
                            newVersion = sibElemet.text();
                        }
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        return newVersion;

    }


    @Override

    protected void onPostExecute(String onlineVersion) {

        super.onPostExecute(onlineVersion);

        if (onlineVersion != null && !onlineVersion.isEmpty()) {

            if (Float.valueOf(currentVersion) < Float.valueOf(onlineVersion)) {
                //show anything
            }

        }

        Log.d("update", "Current version " + currentVersion + "playstore version " + onlineVersion);

    }
}

dan jangan lupa untuk menambahkan pustaka JSoup

dependencies {
compile 'org.jsoup:jsoup:1.8.3'}

dan di Oncreate ()

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


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

    new GetVersionCode().execute();

}

itu saja .. Terima kasih untuk tautan ini

Rajesh Naddy
sumber
8

masukkan deskripsi gambar di sini

Google telah memperkenalkan API pembaruan dalam aplikasi

API saat ini mendukung dua aliran:

  • Alur "langsung" adalah pengalaman pengguna layar penuh yang memandu pengguna dari mengunduh hingga memperbarui sebelum mereka dapat menggunakan aplikasi Anda.
  • "Alur fleksibel" memungkinkan pengguna untuk mendownload update sambil terus menggunakan aplikasi Anda.
aswanth bonthala
sumber
Jawaban Terbaik!!! Terima kasih
Artem Beziazychnyi
7

Ada pustaka AppUpdater . Bagaimana cara memasukkan:

  1. Tambahkan repositori ke proyek Anda build.gradle :
allprojects {
    repositories {
        jcenter()
        maven {
            url "https://jitpack.io"
        }
    }
}
  1. Tambahkan pustaka ke modul Anda build.gradle :
dependencies {
    compile 'com.github.javiersantos:AppUpdater:2.6.4'
}
  1. Tambahkan izin INTERNET dan ACCESS_NETWORK_STATE ke Manifes aplikasi Anda:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  1. Tambahkan ini ke aktivitas Anda:
AppUpdater appUpdater = new AppUpdater(this); 
appUpdater.start();
stenlytw.dll
sumber
Bagaimanapun juga tidak bekerja. Menggunakan kode berikut, tolong beritahu saya apa yang saya lakukan salah.
Anurag Srivastava
Hai, saya pikir ada bug. Silakan periksa diskusi ini github.com/javiersantos/AppUpdater/issues/132
stenlytw
6

Berasal Dari POV Aplikasi Hybrid. Ini adalah contoh javascript, saya memiliki footer Pembaruan Tersedia di menu utama saya. Jika pembaruan tersedia (mis. Nomor versi saya dalam file konfigurasi lebih kecil dari versi yang diambil, tampilkan footer). Ini kemudian akan mengarahkan pengguna ke app / play store, di mana pengguna kemudian dapat mengklik tombol perbarui.

Saya juga mendapatkan data baru apa (yaitu Catatan Rilis) dan menampilkannya sebagai modal saat login jika ini pertama kali pada versi ini.

Di perangkat Siap, setel URL toko Anda

        if (device.platform == 'iOS')
           storeURL = 'https://itunes.apple.com/lookup?bundleId=BUNDLEID';
        else
           storeURL = 'https://play.google.com/store/apps/details?id=BUNDLEID';

Metode Perbarui Tersedia dapat dijalankan sesering Anda suka. Milik saya dijalankan setiap kali pengguna menavigasi ke layar beranda.

function isUpdateAvailable() {
    if (device.platform == 'iOS') {
        $.ajax(storeURL, {
            type: "GET",
            cache: false,
            dataType: 'json'
        }).done(function (data) {
            isUpdateAvailable_iOS(data.results[0]);
        }).fail(function (jqXHR, textStatus, errorThrown) {
            commsErrorHandler(jqXHR, textStatus, false);
        });
    } else {
        $.ajax(storeURL, {
            type: "GET",
            cache: false
        }).done(function (data) {
            isUpdateAvailable_Android(data);
        }).fail(function (jqXHR, textStatus, errorThrown) {
            commsErrorHandler(jqXHR, textStatus, false);
        });
    }
}

Panggilan Balik iOS: Apple memiliki API, jadi sangat mudah untuk mendapatkannya

function isUpdateAvailable_iOS (data) {
    var storeVersion = data.version;
    var releaseNotes = data.releaseNotes;
    // Check store Version Against My App Version ('1.14.3' -> 1143)
    var _storeV = parseInt(storeVersion.replace(/\./g, ''));
    var _appV = parseInt(appVersion.substring(1).replace(/\./g, ''));
    $('#ft-main-menu-btn').off();
    if (_storeV > _appV) {
        // Update Available
        $('#ft-main-menu-btn').text('Update Available');
        $('#ft-main-menu-btn').click(function () {
            openStore();
        });

    } else {
        $('#ft-main-menu-btn').html('&nbsp;');
        // Release Notes
        settings.updateReleaseNotes('v' + storeVersion, releaseNotes);
    }
}

Android Callback: PlayStore Anda harus mengikis, karena Anda dapat melihat versinya relatif mudah untuk diambil dan apa yang baru saya mengambil html daripada teks karena dengan cara ini saya dapat menggunakan pemformatannya (yaitu baris baru dll)

function isUpdateAvailable_Android(data) {
    var html = $(data);
    var storeVersion = html.find('div[itemprop=softwareVersion]').text().trim();
    var releaseNotes = html.find('.whatsnew')[0].innerHTML;
    // Check store Version Against My App Version ('1.14.3' -> 1143)
    var _storeV = parseInt(storeVersion.replace(/\./g, ''));
    var _appV = parseInt(appVersion.substring(1).replace(/\./g, ''));
    $('#ft-main-menu-btn').off();
    if (_storeV > _appV) {
        // Update Available
        $('#ft-main-menu-btn').text('Update Available');
        $('#ft-main-menu-btn').click(function () {
            openStore();
        });

    } else {
        $('#ft-main-menu-btn').html('&nbsp;');
        // Release Notes
        settings.updateReleaseNotes('v' + storeVersion, releaseNotes);
    }
}

Logika toko terbuka lurus ke depan, tetapi untuk kelengkapan

function openStore() {
    var url = 'https://itunes.apple.com/us/app/appname/idUniqueID';
    if (device.platform != 'iOS')
       url = 'https://play.google.com/store/apps/details?id=appid'
   window.open(url, '_system')
}

Pastikan Play Store dan App Store telah Masuk Daftar Putih:

  <access origin="https://itunes.apple.com"/>
  <access origin="https://play.google.com"/>
tyler_mitchell
sumber
Saya mendapatkan pesan error "Error parsing ajax response: SyntaxError: Unexpected token <". saat ajax get dipanggil. Dapatkah Anda menjelaskan hal ini, apa yang salah?
Kapilrc
ios atau android? apakah url anda benar? membawa Anda ke halaman yang benar di browser?
tyler_mitchell
5

Firebase Remote Config lebih baik.

  • Memperbarui aplikasi dengan cepat dan mudah tanpa perlu menerbitkan versi baru ke aplikasi

Menerapkan Remote Config di Android

Menambahkan dependensi Remote Config

compile 'com.google.firebase:firebase-config:9.6.0'

Setelah selesai, kita kemudian dapat mengakses instance FirebaseRemoteConfig di seluruh aplikasi kita jika diperlukan:

FirebaseRemoteConfig firebaseRemoteConfig = FirebaseRemoteConfig.getInstance();

Mengambil nilai Remote Config

boolean someBoolean = firebaseRemoteConfig.getBoolean("some_boolean");
byte[] someArray = firebaseRemoteConfig.getByteArray("some_array");
double someDouble = firebaseRemoteConfig.getDouble("some_double");
long someLong = firebaseRemoteConfig.getLong("some_long");
String appVersion = firebaseRemoteConfig.getString("appVersion");

Ambil nilai Sisi Server

firebaseRemoteConfig.fetch(cacheExpiration)
            .addOnCompleteListener(new OnCompleteListener<Void>() {
                @Override
                public void onComplete(@NonNull Task<Void> task) {
                    if (task.isSuccessful()) {
                        mFirebaseRemoteConfig.activateFetched();
                        // We got our config, let's do something with it!
                        if(appVersion < CurrentVersion){
                           //show update dialog
                        }
                    } else {
                        // Looks like there was a problem getting the config...
                    }
                }
            });

Sekarang setelah mengupload versi baru ke playstore, kita harus mengupdate nomor versi di dalam firebase. Sekarang jika versi baru dialog pembaruan akan ditampilkan

Nihas Nizar
sumber
5

Di dalam metode OnCreate tulis kode di bawah ini ..

VersionChecker versionChecker = new VersionChecker();
    try {
        latestVersion = versionChecker.execute().get();
        Toast.makeText(getBaseContext(), latestVersion , Toast.LENGTH_SHORT).show();

    } catch (InterruptedException | ExecutionException e) {
        e.printStackTrace();
    }

ini memberi Anda versi play store dari aplikasi ..

maka Anda harus memeriksa versi aplikasi seperti di bawah ini

PackageManager manager = getPackageManager();
    PackageInfo info = null;
    try {
        info = manager.getPackageInfo(getPackageName(), 0);
    } catch (PackageManager.NameNotFoundException e) {
        e.printStackTrace();
    }
    assert info != null;
    version = info.versionName;

setelah itu Anda dapat membandingkannya dengan versi toko dan menyiapkan layar pembaruan Anda sendiri

if(version.equals(latestVersion)){
        Toast.makeText(getBaseContext(), "No Update" , Toast.LENGTH_SHORT).show();
    }else {
        Toast.makeText(getBaseContext(), "Update" , Toast.LENGTH_SHORT).show();

    }

Dan tambahkan VersionChecker.class seperti di bawah ini

public class VersionChecker extends AsyncTask<String, String, String> {

    private String newVersion;

    @Override
    protected String doInBackground(String... params) {

        try {
            newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + "package name" + "&hl=en")
                    .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(".hAyfc .htlgb")
                    .get(7)
                    .ownText();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return newVersion;
    }
}
Shailendra Madda
sumber
3

Selain menggunakan JSoup, kami juga dapat melakukan pencocokan pola untuk mendapatkan versi aplikasi dari playStore.

Untuk mencocokkan pola terbaru dari google playstore yaitu <div class="BgcNfc">Current Version</div><span class="htlgb"><div><span class="htlgb">X.X.X</span></div> pertama kita harus mencocokkan urutan node di atas dan kemudian dari urutan di atas mendapatkan nilai versi. Di bawah ini adalah potongan kode yang sama:

    private String getAppVersion(String patternString, String inputString) {
        try{
            //Create a pattern
            Pattern pattern = Pattern.compile(patternString);
            if (null == pattern) {
                return null;
            }

            //Match the pattern string in provided string
            Matcher matcher = pattern.matcher(inputString);
            if (null != matcher && matcher.find()) {
                return matcher.group(1);
            }

        }catch (PatternSyntaxException ex) {

            ex.printStackTrace();
        }

        return null;
    }


    private String getPlayStoreAppVersion(String appUrlString) {
        final String currentVersion_PatternSeq = "<div[^>]*?>Current\\sVersion</div><span[^>]*?>(.*?)><div[^>]*?>(.*?)><span[^>]*?>(.*?)</span>";
        final String appVersion_PatternSeq = "htlgb\">([^<]*)</s";
        String playStoreAppVersion = null;

        BufferedReader inReader = null;
        URLConnection uc = null;
        StringBuilder urlData = new StringBuilder();

        final URL url = new URL(appUrlString);
        uc = url.openConnection();
        if(uc == null) {
           return null;
        }
        uc.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
        inReader = new BufferedReader(new InputStreamReader(uc.getInputStream()));
        if (null != inReader) {
            String str = "";
            while ((str = inReader.readLine()) != null) {
                           urlData.append(str);
            }
        }

        // Get the current version pattern sequence 
        String versionString = getAppVersion (currentVersion_PatternSeq, urlData.toString());
        if(null == versionString){ 
            return null;
        }else{
            // get version from "htlgb">X.X.X</span>
            playStoreAppVersion = getAppVersion (appVersion_PatternSeq, versionString);
        }

        return playStoreAppVersion;
    }

Saya menyelesaikannya melalui ini, karena ini berfungsi untuk perubahan Google playstore terbaru juga. Semoga membantu.

DRK
sumber
3
private void CheckUPdate() {
    VersionChecker versionChecker = new VersionChecker();
    try
    {   String appVersionName = BuildConfig.VERSION_NAME;
        String mLatestVersionName = versionChecker.execute().get();
        if(!appVersionName.equals(mLatestVersionName)){
            AlertDialog.Builder alertDialog = new AlertDialog.Builder(Activity.this);
            alertDialog.setTitle("Please update your app");
            alertDialog.setMessage("This app version is no longer supported. Please update your app from the Play Store.");
            alertDialog.setPositiveButton("UPDATE NOW", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    final String appPackageName = getPackageName();
                    try {
                        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)));
                    } catch (android.content.ActivityNotFoundException anfe) {
                        startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName)));
                    }
                }
            });
            alertDialog.show();
        }

    } catch (InterruptedException | ExecutionException e) {
        e.printStackTrace();
    }
}

@SuppressLint("StaticFieldLeak")
public class VersionChecker extends AsyncTask<String, String, String> {
    private String newVersion;
    @Override
    protected String doInBackground(String... params) {

        try {
            newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id="+getPackageName())
                    .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(".hAyfc .htlgb")
                    .get(7)
                    .ownText();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return newVersion;
    }
}
Balaji Bal
sumber
Tolong berikan beberapa informasi tentang bagaimana dan apa kode ini akan bekerja
DarkSuniuM
2

Anda dapat mencoba kode berikut menggunakan Jsoup

String latestVersion = doc.getElementsContainingOwnText("Current Version").parents().first().getAllElements().last().text();
Pritesh Patel
sumber
2

masukkan deskripsi gambar di siniGoogle memperkenalkan api pembaruan dalam aplikasi. Menggunakan itu kita dapat meminta pengguna untuk memperbarui aplikasi di dalam aplikasi. jika pengguna menerima, kami dapat langsung mengunduh aplikasi terbaru dan menginstal tanpa mengarahkan ke playstore. untuk lebih jelasnya silakan lihat tautan di bawah ini

link1 link2

Magesh Pandian
sumber
Saya suka GIF yang Anda buat :)
Hunter
1

hanya mengonfirmasi bahwa metode itu berfungsi sekarang:

newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + AcMainPage.this.getPackageName() + "&hl=it")
                        .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(".hAyfc .htlgb")
                        .get(5)
                        .ownText();
kemdo
sumber
1

Google memperkenalkan fitur Pembaruan dalam aplikasi , ( https://developer.android.com/guide/app-bundle/in-app-updates ) yang berfungsi di Lollipop + dan memberi Anda kemampuan untuk meminta pembaruan kepada pengguna dengan dialog (FLEKSIBEL) atau dengan pesan layar penuh wajib (SEGERA).

Seperti inilah tampilan Pembaruan fleksibel : masukkan deskripsi gambar di sini

dan di sini adalah Immedtiate aliran update: masukkan deskripsi gambar di sini

Anda dapat memeriksa jawaban saya di sini https://stackoverflow.com/a/56808529/5502121 untuk mendapatkan kode contoh lengkap untuk menerapkan alur pembaruan Fleksibel dan Segera . Semoga membantu!

Kirill Karmazin
sumber