Програмно перевіряйте Play Store на наявність оновлень додатків


92

Я розмістив свій додаток у магазині Google Play. Він був встановлений багатьма клієнтами моєї компанії. Я розумію механізм того, як передбачається оновлення програми.

Користувачі повинні встановити прапорець автоматичного оновлення у програмі playstore для кожної програми, яку вони хочуть автоматично оновити. Однак деякі користувачі не відмічали його чи не перевіряли спочатку.

Додаток, який я написав, призначений для індустрії догляду та використовується опікунами для надання допомоги на дому. Деякі з наших клієнтів мають 1200 опікунів. Їм доведеться викликати всіх опікунів в офіс, щоб оновити телефони індивідуально. Це, очевидно, неприпустимо.

Чи є спосіб програмно перевірити, чи є в Play Store оновлена ​​версія мого додатка?

Чи можу я мати код, який запускається кожного разу, коли користувач запускає програму, яка перевіряє Play Store? Якщо є оновлена ​​версія, то користувача можна перенаправити до магазину відтворення. Це означатиме, що не обов’язково перевіряти автоматичне оновлення.

Спасибі заздалегідь

Метт


Хіба магазин відтворення вже не надсилає повідомлення користувачеві, якщо для програми доступне оновлення?
Nischaal Cooray

1
Чи підключається ваша програма до хмари / Інтернету до API, який ви написали - Оскільки у вас може бути просто змінна 'version', яку ви можете оновити вручну - при відкритті програми перевірте локальну версію за допомогою хмарної версії - якщо вони відрізняються, пропоную оновлення
gavlaaaaaaaa

Раніше я використовував jsoup для цього, але тепер використовую регулярний вираз для вилучення поля Поточна версія .
Geezer McNubbins

Відповіді:


41

Оновлення 17 жовтня 2019 р

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

Оновлення 24 квітня 2019 року:

Android анонсував функцію, яка, ймовірно, вирішить цю проблему. Використання API оновлення в додатку: https://android-developers.googleblog.com/2018/11/unfolding-right-now-at-androiddevsummit.html

Оригінал:

Наскільки я знаю, немає офіційного Google API, який би це підтримував.

Вам слід розглянути можливість отримати номер версії з API.

Замість підключення до зовнішніх API або веб-сторінок (наприклад, Google Play Store). Існує ризик того, що щось може змінитися в API або на веб-сторінці, тому вам слід розглянути можливість перевірити, чи код версії поточного додатка не нижче номера версії, який ви отримуєте із власного API.

Тільки пам’ятайте, якщо ви оновлюєте програму, вам потрібно змінити версію у власному API із номером версії програми.

Я рекомендую вам створити файл на власному веб-сайті чи в API із зазначенням номера версії. (Зрештою зробіть cronjob та зробіть автоматичне оновлення версії та надішліть повідомлення, коли щось піде не так)

Ви повинні отримати це значення на своїй сторінці магазину Google Play (тим часом змінено, більше не працює):

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

Перевірте у своєму додатку, чи версія, яка використовується на мобільному телефоні, не відповідає номеру версії, який відображається у вашому власному API.

Показати вказівку на те, що їй / йому потрібно оновити за допомогою повідомлення, в ідеалі.

Що можна зробити

Номер версії за допомогою власного API

Плюси:

  • Не потрібно завантажувати весь код магазину Google Play (економить на даних / пропускній здатності)

Мінуси:

  • Користувач може бути в автономному режимі, що робить перевірку марною, оскільки API не доступний

Номер версії на веб-сторінці Google Play Store

Плюси:

  • Вам не потрібен API

Мінуси:

  • Користувач може бути в автономному режимі, що робить перевірку марною, оскільки API не доступний
    • Використання цього методу може коштувати вашим користувачам більше пропускної здатності / мобільних даних
    • Веб-сторінка магазину ігор може змінитися, що змушує вашу версію "ripper" більше не працювати.

Номер версії на веб - сторінці Google Play Store , тепер Current Versionперерахований як Varies with deviceбудь-яка ідея , як це може бути вирішена , або якщо якийсь - або іншої альтернативи можна ??
shadygoneinsane


Справді. Виникло це питання, оскільки ми більше не можемо отримати доступ до html-джерела нашої власної сторінки Google Play, коли робимо веб-запит. ми отримуємо FileNotFoundException.
Grisgram

Спробував би щось на зразок пошуку div, який містить текст. Поточна версія / Huidige versie Знайдіть перше число та крапки в наступних розділах. <div class = "hAyfc"> <div class = "BgcNfc"> Huidige versie </div> <div> <span class = "htlgb"> 1.0 </span> </div>
Річард Ліндхаут,

Ім'я класу, ймовірно, буде змінюватися під час кожного оновлення на їх веб-сайті.
Річард Ліндгаут,

35

Включіть JSoup у свій файл build.gradle додатків:

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

і отримати поточну версію, наприклад:

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

І виконайте наступний потік:

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
            }
        }
    }

Детальніше завітайте на: http://revisitingandroid.blogspot.in/2016/12/programmatically-check-play-store-for.html


в @Override protected void onPostExecute (String onlineVersion) {}, якщо умова для перевірочної версії не має значення Float. Оскільки це може спричинити таку помилку. Недійсний java.lang.NumberFormatException: Недійсний плаваючий: "1.0.6". Тож використовуйте це. if (! currentVersion.equalsIgnoreCase (onlineVersion)) {....}
Дхармішта

1
Будь-яка ідея про те, як це зробити без Jsoup?
Хітеш Саху

Шановний @HiteshSahu, вам доведеться натиснути URL-адресу магазину відтворення " play.google.com/store/apps/details?id=com.whatsapp&hl=en ". Ця URL-адреса відкритої сторінки. Клацніть правою кнопкою миші на сторінці та натисніть опцію "Переглянути джерело сторінки". У html-сторінці сторінки ви можете побачити атрибут: "<div class =" content "itemprop =" softwareVersion "> 1.2 </div>". Вам потрібно проаналізувати html і отримати цей прапор вручну.
Тарун

2
getPackageManager().getPackageInfo(getPackageName(), 0).versionNameВи можете просто використовувати BuildConfig.VERSION_NAME:)
Enoobong

1
Очевидно, це сформована назва класу, яку можна будь-коли змінити. Ви не повинні цього робити.
Річард Ліндхаут

24

Віддалена конфігурація Firebase може бути можливим і надійним рішенням, оскільки Google не піддав їй жодного API.

Перевірте Firebase Remote Config Docs

Кроки 1.Create проект firebase і додати google_play_service.json в свій проект

2. Створіть такі ключі, як "android_latest_version_code" та "android_latest_version_name" у консолі firebase-> Remote Config

3. Код 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);
}

Отримайте назву та код поточної версії

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. І постійно оновлюйте Firebase "android_latest_version_code" та "android_latest_version_name" з поточною назвою і кодом вашої версії.

Віддалена конфігурація Firebase працює як на Android, так і на iPhone.


1
Дивіться firebasetutorials.com/… щодо створення параметрів у Firebase.
CoolMind

Я думаю, що це рішення може привести до помилки компіляції: Caused by: com.android.tools.r8.utils.AbortException: Error: null, Cannot fit requested classes in a single dex file (# methods: 68703 > 65536). У цьому випадку вам слід додати MultiDex до своєї програми.
CoolMind

17

Ви можете отримати поточну версію Playstore, використовуючи JSoupдеякі модифікації, як показано нижче:

@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);
}

відповідь @Tarun більше не працює.


Це працює приятель, але чи можу я покластися на це назавжди чи це зміниться найближчим часом ??
Avinash Roy

1
Не рекомендується покладатися на це, оскільки це не офіційне рішення.
Nikunj

@Nikunj Я створюю клас GetVersionCode, який розширює AsyncTask, і коли я пишу ваш код всередині цього класу, getPackageName () показує помилку. Я спробував це, GetVersionCode.this, але нічого не працює.
Aashish

1
Використання .select (". HAyfc .htlgb"). Get (7) не є надійним проти змін. Я побачив інше рішення, використовуючи замість цього індекс 5. Щоб вибрати правильний, я використовую розширений запит .select (". HAyfc .BgcNfc: containsOwn (Поточна версія) + .htlgb.htlgb"). First () .text ()
HarryS

8

Відповідь @Tarun працювала чудово. Але зараз це не так, через нещодавні зміни від Google на веб-сайті Google Play.

Просто змініть їх із відповіді @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);

    }
}

і не забудьте додати бібліотеку JSoup

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

та на 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();

}

ось і все .. Завдяки цьому посиланню


8

введіть тут опис зображення

Google представив API для оновлення додатків

На даний момент API підтримує два потоки:

  • „Миттєвий” потік - це повноекранна робота користувача, яка спрямовує користувача від завантаження до оновлення, перш ніж він зможе використовувати ваш додаток.
  • «Гнучкий потік» дозволяє користувачам завантажувати оновлення, продовжуючи користуватися вашим додатком.

Краща відповідь !!! Дякую
Артем Безязичний

7

Існує бібліотека AppUpdater . Як включити:

  1. Додайте сховище до вашого проекту build.gradle :
allprojects {
    repositories {
        jcenter()
        maven {
            url "https://jitpack.io"
        }
    }
}
  1. Додайте бібліотеку до свого модуля build.gradle :
dependencies {
    compile 'com.github.javiersantos:AppUpdater:2.6.4'
}
  1. Додайте дозволи на ІНТЕРНЕТ та ACCESS_NETWORK_STATE до Маніфесту програми:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  1. Додайте це до своєї діяльності:
AppUpdater appUpdater = new AppUpdater(this); 
appUpdater.start();

Не працює в будь-якому випадку. Використовуючи наступний код, будь ласка, скажіть мені, що я роблю не так.
Анураг Шрівастава

Привіт, я думаю, що є помилка. Будь ласка, перевірте це обговорення github.com/javiersantos/AppUpdater/issues/132
stenlytw

6

Виходячи з гібридного додатка POV. Це приклад JavaScript, у мене в головному меню нижній колонтитул Доступне оновлення. Якщо доступне оновлення (тобто, номер моєї версії у файлі конфігурації менший, ніж отримана версія, відобразити нижній колонтитул) Це призведе до переходу користувача до магазину програм / відтворення, де користувач зможе натиснути кнопку оновлення.

Я також отримую нові дані (тобто примітки до випуску) і відображаю їх у модальному режимі при вході в систему, якщо це вперше у цій версії.

На пристрої Готово встановіть URL-адресу вашого магазину

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

Метод "Оновити доступне" можна запускати скільки завгодно часто. Мій запускається кожного разу, коли користувач переходить на головний екран.

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);
        });
    }
}

Зворотний дзвінок iOS: Apple має API, тому його дуже легко отримати

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: PlayStore вам потрібно очистити, як ви бачите, версію відносно легко захопити, і що нового я беру html замість тексту, оскільки таким чином я можу використовувати їх форматування (тобто нові рядки тощо)

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);
    }
}

Логіка відкритого магазину є прямою, але для повноти

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')
}

Переконайтеся, що Play Store та App Store внесено до білого списку:

  <access origin="https://itunes.apple.com"/>
  <access origin="https://play.google.com"/>

Я отримую помилку "Помилка аналізу відповіді ajax: SyntaxError: Несподіваний маркер <". коли викликається ajax get. Чи можете ви пролити світло на це, що пішло не так?
Kapilrc

ios чи android? правильна ваша URL-адреса? приведе вас до правильної сторінки в браузері?
tyler_mitchell

5

Краще віддалена конфігурація Firebase.

  • Швидко та легко оновлюйте наші програми без необхідності публікувати нову збірку програми

Впровадження віддаленої конфігурації на Android

Додавання залежності Remote Config

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

Після цього ми можемо отримати доступ до екземпляра FirebaseRemoteConfig у всій нашій програмі, де це потрібно:

FirebaseRemoteConfig firebaseRemoteConfig = FirebaseRemoteConfig.getInstance();

Отримання значень віддаленого налаштування

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");

Отримати значення на стороні сервера

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...
                    }
                }
            });

Після завантаження нової версії до playstore ми повинні оновити номер версії всередині firebase. Тепер, якщо це нова версія, відобразиться діалогове вікно оновлення


5

Усередині методу OnCreate напишіть нижче код.

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

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

це надає вам версію додатка Play Store ..

тоді вам потрібно перевірити версію програми, як показано нижче

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

після цього ви можете порівняти його з версією магазину та налаштувати власні екрани оновлення

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

    }

І додайте VersionChecker.class, як показано нижче

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;
    }
}

3

Налаштуйте сервер, який виставляє URL-адресу HTTP, яка повідомляє про останню версію, а потім використовуйте AlarmManager, щоб викликати цю URL-адресу та перевірити, чи версія на пристрої така ж, як і остання версія. Якщо це не спливаюче повідомлення або сповіщення, і надішліть їх на ринок для оновлення.

Є кілька прикладів коду: Як дозволити користувачам перевіряти наявність останньої версії програми всередині програми?


3

Окрім використання JSoup, ми можемо виконати зіставлення шаблонів для отримання версії програми з playStore.

Щоб відповідати останньому зразку з google playstore, тобто <div class="BgcNfc">Current Version</div><span class="htlgb"><div><span class="htlgb">X.X.X</span></div> спочатку ми повинні збігатись із вказаною вище послідовністю вузлів, а потім зверху отримувати значення версії. Нижче наведено фрагмент коду для того самого:

    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;
    }

Я вирішив це за допомогою цього, оскільки це працює і для останніх змін Google Playstore. Сподіваюся, що це допомагає.


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;
    }
}

Будь ласка, надайте деяку інформацію про те, як і що буде працювати цей код
DarkSuniuM

2

Офіційного API GooglePlay для цього немає.

Але ви можете використовувати цю неофіційну бібліотеку для отримання даних про версію програми.

І якщо вищезазначене не працює для вас, ви завжди можете http підключитися до сторінки свого додатка (наприклад, https://play.google.com/store/apps/details?id=com.shots.android&hl=en ) та проаналізуйте поле "Поточна версія".



2

Ви можете спробувати наступний код за допомогою Jsoup

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

2

введіть тут опис зображенняGoogle представив api для оновлення в додатку. Використовуючи це, ми можемо попросити користувача оновити програму всередині програми. якщо користувач погодиться, ми можемо безпосередньо завантажити останню програму та встановити без перенаправлення на playstore. для детальної інформації, будь ласка, зверніться до посилання нижче

link1 link2


Мені подобається GIF, який ти зробив :)
Мисливець,

1

підтвердив лише те, що метод працює зараз:

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();

1

Google представив функцію оновлення в додатку ( https://developer.android.com/guide/app-bundle/in-app-updates ), вона працює на Lollipop + і дає вам можливість запитати у користувача оновлення з гарним діалогове вікно (Гнучке) або з обов’язковим повноекранним повідомленням (НЕЗАБАЧНО).

Ось як виглядатиме гнучке оновлення: введіть тут опис зображення

і ось негайний потік оновлення: введіть тут опис зображення

Ви можете перевірити мою відповідь тут https://stackoverflow.com/a/56808529/5502121, щоб отримати повний зразок коду реалізації як гнучких, так і негайних потоків оновлення. Сподіваюся, це допоможе!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.