Как уведомить пользователей об обновлении приложения для Android? - PullRequest
49 голосов
/ 24 марта 2012

Я создал приложение для Android, которое теперь есть на Play Market.Время от времени я обновляю его и хочу, чтобы пользователи знали, что доступна новая версия.

Как отправить уведомление об обновлении пользователям приложения?

Ответы [ 16 ]

65 голосов
/ 26 марта 2012

Вам не нужно делать ничего конкретного для этого. Поскольку вы упомянули, что используете Google Play, уведомление об обновлении обрабатывается Google Play.

Вам просто нужно обновить APK с более высоким versionCode, а Google Play сделает все остальное.

11 голосов
/ 02 апреля 2012

Это зависит от каждого владельца телефона, если он хочет получать уведомления о новых версиях от Google Play, и от каждого производителя телефона зависит, будет ли он включен по умолчанию.

Если вы, однако, находитесь вситуация, когда вы «требуете» от пользователя обновить его до новой версии, чтобы он был совместим с какой-либо формой протокола, или у вас есть аналогичный вариант использования, когда у вас есть серверный компонент где-то, вы можете уведомить пользователя о потенциальной версииконфликт в пользовательском интерфейсе, основанный на информации о последней версии.

Эта информация может быть получена напрямую из Google Play, однако, как отметил @Yahel в этот вопрос Google Play закрытсистема без официального API, и вам может потребоваться непредсказуемый недокументированный API.Здесь есть неофициальная библиотека API .

Это оставляет только один вариант - хранить эту информацию на своем собственном сервере.Если у вас уже есть сервер, это может быть тривиально.Просто поместите последнюю версию в файл XML и регулярно извлекайте ее из своего кода.Если код версии устарел, вызовите уведомление в вашем пользовательском интерфейсе.Вот пример реализации для этого.

Надеюсь, это было полезно: -)

9 голосов
/ 27 марта 2012

Это можно сделать разными способами, в зависимости от того, когда вы хотите, чтобы пользователь мог видеть, что доступно обновление.

Если вы хотите, чтобы пользователь знал об обновлении, когдаприложение запущено, просто создайте служебный метод (внутри метода onCreate вашего основного / первого занятия), который проверяет, доступна ли более новая версия в Google Play.Если это так, отобразите диалоговое окно с соответствующим сообщением и намерением, которое открывает ваше приложение в Google Play, когда пользователь нажимает на положительную кнопку диалогового окна с предупреждением.Если вы регулярно обновляете приложение, пользователь будет продолжать получать это диалоговое окно с предупреждением при каждом запуске приложения и, следовательно, может раздражаться.Таким образом, это не лучший подход.

Если вы хотите, чтобы пользователь получал уведомление по телефону (а не когда пользователь запускает приложение), вы можете использовать класс AlarmManager для планирования фонасервис, который проверяет наличие обновлений через регулярные промежутки времени.Если служба обнаружит, что обновление действительно доступно, опубликуйте уведомление с намерением открыть ваше приложение в Google Play.

Конечно, другой подход - оставить его самой ОС.Если пользователь не установил для вашего приложения параметр «Автоматически обновлять», он будет регулярно получать уведомления об обновлениях, доступных как для вас, так и для любых других приложений.Но не все пользователи включают фоновые данные на своих устройствах, так что это не совсем надежно.

В конце концов, вы должны уважать предпочтения пользователей.Если пользователь не хочет автоматически обновлять приложение или не хочет видеть всплывающее диалоговое окно при каждом запуске приложения, не оповещайте пользователя об обновлении.

По моему мнению,вам следует создать PreferenceActivity с настройкой типа «Регулярно проверять наличие обновлений», которую можно установить в приложении.Если он установлен, сделайте все необходимое в своем сервисе.Может даже дать пользователю возможность выбрать период, после которого служба будет проверять наличие обновлений.

Надеюсь, это поможет!

4 голосов
/ 24 марта 2012

Используйте это: https://www.push -link.com /

3 голосов
/ 31 марта 2012

Google Play уведомит ваших пользователей о том, что приложение обновилось через панель уведомлений.

Если вы настроите систему уведомлений самостоятельно, вероятным результатом будет то, что, хотя пользователь уведомляется об обновлении раньше, когда он / она идет в Google Play для установки обновления, оно еще не будет доступно. Это связано с задержкой с момента «публикации» приложения / обновления и до момента его появления в Play. Сообщение пользователям о наличии обновления, когда оно недоступно, может привести к путанице и разочарованию.

Мой совет: придерживайтесь системы уведомлений об обновлениях Google и не беспокойтесь о том, что пользователи будут пытаться получить обновление на 15 минут раньше.

2 голосов
/ 10 июня 2016

Существует также очень хороший подход для проверки версии и уведомления пользователя в приложении или когда вы хотите принудительно обновить приложение, если вы можете решить первое соединение вашего приложения с сервером. В ответ на первый запрос вы Вы можете отправить текущую версию приложения, хранящуюся на вашем сервере, а затем на стороне клиента вы можете предпринять соответствующие действия. Преимущества такого подхода:
1-Никаких дополнительных запросов для версии нет.
2-Это также применимо, если вы загружаете приложение, отличное от Google PlayStore.
3 - вы также можете использовать эту идею, если вы хотите проверить версию при определенной операции вашего приложения без транзакции (если вы добавляете новый платежный шлюз.)

2 голосов
/ 26 августа 2013

Нашли хорошее решение для вашей проблемы: Допустим, вы хотите вручную проверять наличие обновлений версий при запуске приложения и уведомлять пользователей о новом обновлении.

Шаг 1: Скачать android-market-api (не файл .jar, полный проект!)

Шаг 2: импортировав его в затмение, напишите в своей деятельности следующий код:

MarketService ms = new MarketService(activity);
ms.level(MarketService.REVISION).checkVersion();

Теперь нам нужно изменить MarketService.java, потому что он кажется сломанным.

Шаг 3: переписать метод обратного вызова и добавить следующие методы

protected void callback(String url, JSONObject jo, AjaxStatus status){      
        if(jo == null) return;
        String googlePlayversion = jo.optString("version", "0");
        String smartphone_version = "";

        PackageInfo pInfo;
        try {
            pInfo = act.getPackageManager().getPackageInfo(act.getPackageName(), 0);
            smartphone_version = pInfo.versionName;
        } catch (NameNotFoundException e) {}
        boolean new_version_avaible = compare(smartphone_version, googlePlayversion);
        if(new_version_avaible){
            showUpdateDialog(jo);
        }
    }

    private static boolean compare(String v1, String v2) {
        String s1 = normalisedVersion(v1);
        String s2 = normalisedVersion(v2);
        int cmp = s1.compareTo(s2);
        String cmpStr = cmp < 0 ? "<" : cmp > 0 ? ">" : "==";
        System.out.printf("result: "+"'%s' %s '%s'%n", v1, cmpStr, v2);
        if(cmpStr.contains("<")){
            return true;
        }
        if(cmpStr.contains(">")||cmpStr.contains("==")){
            return false;
        }
        return false;
    }

    public static String normalisedVersion(String version) {
        return normalisedVersion(version, ".", 4);
    }

    public static String normalisedVersion(String version, String sep, int maxWidth) {
        String[] split = Pattern.compile(sep, Pattern.LITERAL).split(version);
        StringBuilder sb = new StringBuilder();
        for (String s : split) {
            sb.append(String.format("%" + maxWidth + 's', s));
        }
        return sb.toString();
    }

Если вы хотите проверить это, измените строку googlePlayversion на более высокую версию, чем ваша локальная версия.

Метод сравнения источников, который я использовал, взят из Как вы сравниваете две версии Строки в Java?

2 голосов
/ 17 июля 2012

@ Ответ Davek804 выше неправильный.android: versionCode - это целочисленное значение, которое представляет версию кода приложения относительно других версий, поэтому использование «1.5b» здесь некорректно.Вместо этого используйте «15» (или «150»)

2 голосов
/ 02 апреля 2012

Некоторые люди используют Android Cloud-to-Device Messaging (C2DM), чтобы уведомлять своих пользователей об обновлениях. Я не думаю, что буду беспокоиться, так как я думаю, что Google Play довольно неплохо уведомляет меня об обновлениях, а реализация C2DM добавляет совершенно новое измерение к написанию приложения (потому что для этого требуется серверный компонент). Но, возможно, вы хотите предложить своим пользователям более подробные уведомления об обновлениях, чем вы получаете из Google Play.

1 голос
/ 02 апреля 2012

Есть две модели, которые в основном используются для решения этой проблемы.

Pull Based
Push Based

Это зависит от архитектуры или конструкции конкретной системы, которая определяет, используется ли механизм на основе тяги или толкания.

Для модели, основанной на извлечении, вы просто делаете один http-запрос к соответствующему серверу относительно новой версии приложения. Текущая версия приложения не может быть сохранена в SQLLite в приложении для Android. Это может быть передано серверу, а новая версия может быть проверена на сервере.

Для механизма push-уведомлений вы можете использовать службу push-уведомлений C2DM. Подробности приведены в http://code.google.com/android/c2dm/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...