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
Jawaban:
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:
Kekurangan:
Nomor versi di halaman web Google Play Store
Kelebihan:
Kekurangan:
sumber
Current Version
terdaftar sebagaiVaries with device
ide bagaimana ini dapat diselesaikan atau jika ada alternatif lain yang tersedia ??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
sumber
getPackageManager().getPackageInfo(getPackageName(), 0).versionName
Anda bisa menggunakanBuildConfig.VERSION_NAME
:)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.
sumber
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.Anda bisa mendapatkan saat PlayStore Versi menggunakan
JSoup
dengan 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.
sumber
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
sumber
Google telah memperkenalkan API pembaruan dalam aplikasi
API saat ini mendukung dua aliran:
sumber
Ada pustaka AppUpdater . Bagaimana cara memasukkan:
sumber
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(' '); // 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(' '); // 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"/>
sumber
Firebase Remote Config lebih baik.
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:
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
sumber
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; } }
sumber
Siapkan server yang mengekspos url HTTP yang melaporkan versi terbaru, lalu gunakan AlarmManager untuk memanggil URL tersebut dan lihat apakah versi di perangkat sama dengan versi terbaru. Jika tidak muncul pesan atau pemberitahuan dan kirim mereka ke pasar untuk meningkatkan.
Ada beberapa contoh kode: Bagaimana cara mengizinkan pengguna untuk memeriksa versi aplikasi terbaru dari dalam aplikasi?
sumber
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.
sumber
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; } }
sumber
Tidak ada GooglePlay API resmi untuk melakukannya.
Tetapi Anda dapat menggunakan pustaka tidak resmi ini untuk mendapatkan data versi aplikasi.
Dan, jika hal di atas tidak berhasil untuk Anda, Anda selalu dapat http terhubung ke halaman aplikasi Anda (misalnya https://play.google.com/store/apps/details?id=com.shots.android&hl=id ) dan parse bidang "Versi Saat Ini".
sumber
Anda dapat mencoba kode berikut menggunakan Jsoup
String latestVersion = doc.getElementsContainingOwnText("Current Version").parents().first().getAllElements().last().text();
sumber
Google 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
sumber
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();
sumber
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 :
dan di sini adalah Immedtiate aliran update:
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!
sumber