it-swarm.com.ru

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

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

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

48
dole doug

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

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

64
PravinCG

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

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

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

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

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

10
Lennart Rolland

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

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

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

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

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

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

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

9
zeiger

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

4
Alexander Fuchs

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

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

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

3
lrAndroid

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

2
Bhuppi

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

2
Marcin Orlowski

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

2
Sparky

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

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

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

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
Dennis Allert

Это может быть использование простого веб-сервиса, только это один из способов достижения.

т. е. когда запуск приложения попадает в этот веб-сервис с текущей версией пользовательского приложения и на сервере, вам необходимо проверить, доступна ли какая-либо новая версия или нет (необходимо сохранить самую новую версию приложения) и отправить соответствующий ответ на Пользователь. Если доступна какая-либо более новая версия, предложите пользователю загрузить самую новую версию приложения, а если нет новой версии, то разрешите пользователю продолжить.

Надеюсь, что по крайней мере что-то должно быть полезно для вас.

1
Ishu

Не знаю, хотите ли вы пройти лишние мили. Вы можете попробовать google appengine, который обслуживает номер версии вашего приложения и позволяет вашему Android-приложению проверить приложение, чтобы увидеть, есть ли новая версия при запуске приложения. Таким образом, не имеет значения, находится ли ваше приложение на Google Play Market или в магазине приложений Amazon, и не установлено ли оно на телефоне без этих двух приложений посредством боковой загрузки. Это не очень сложно настроить appengine только для обслуживания версии вашего приложения в json. Замените строку "Hello World" именем вашей версии приложения ... 

1
Win Myo Htet

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

Pull Based
Push Based

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

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

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

1
Shankar Agarwal

я думаю, что это слишком поздно, но это может помочь кому-то 

public enum AppVersionUpgradeNotifier {
INSTANCE;

private static final String TAG = "AppVersionUpdateManager";

private static final String PREFERENCES_APP_VERSION = "pref_app_version_upgrade";
private static final String KEY_LAST_VERSION = "last_version";

private SharedPreferences sharedPreferences;
private VersionUpdateListener versionUpdateListener;
private boolean isInitialized;

public static synchronized void init(Context context, VersionUpdateListener versionUpdateListener) {
    if (context == null || versionUpdateListener == null) {
        throw new IllegalArgumentException(TAG + " : Context or VersionUpdateListener is null");
    }

    if (!INSTANCE.isInitialized) {
        INSTANCE.initInternal(context, versionUpdateListener);
    } else {
        Log.w(TAG, "Init called twice, ignoring...");
    }
}

private void initInternal(Context context, VersionUpdateListener versionUpdateListener) {
    this.sharedPreferences = context.getSharedPreferences(PREFERENCES_APP_VERSION, Context.MODE_PRIVATE);
    this.versionUpdateListener = versionUpdateListener;
    this.isInitialized = true;
    checkVersionUpdate();
}

private void checkVersionUpdate() {
    int lastVersion = getLastVersion();
    int currentVersion = getCurrentVersion();

    if (lastVersion < currentVersion) {
        if (versionUpdateListener.onVersionUpdate(currentVersion, lastVersion)) {
            upgradeLastVersionToCurrent();
        }
    }
}

private int getLastVersion() {
    return sharedPreferences.getInt(KEY_LAST_VERSION, 0);
}

private int getCurrentVersion() {
    return BuildConfig.VERSION_CODE;
}

public void upgradeLastVersionToCurrent() {
    sharedPreferences.edit().putInt(KEY_LAST_VERSION, getCurrentVersion()).apply();
}

public interface VersionUpdateListener {
    boolean onVersionUpdate(int newVersion, int oldVersion);
}

}

использовать его на

public class MyApplication extends Application implements AppVersionUpgradeNotifier.VersionUpdateListener {

@Override
public void onCreate() {
    super.onCreate();

    AppVersionUpgradeNotifier.init(this,this);
}

@Override
public boolean onVersionUpdate(int newVersion, int oldVersion) {
    //do what you want

    return true;
}

}

0
vishal patel

Как правило, когда вы загружаете новое приложение в Google Play, большинство пользователей получают уведомление об обновлении, некоторые из них автоматически загружают приложение на свое устройство в зависимости от настроек, которые у них есть ........ Если вы серьезно хотите сделать уведомление от своего приложение, чтобы попросить их обновить (чтобы каждый получал уведомление, независимо от настроек Google Play, вам нужно будет создать веб-сервис, который будет возвращать номер самой новой версии. Затем вы можете сравнить это в своем приложении и опубликовать Уведомление. Вы можете использовать Google App Engine ( https://developers.google.com/appengine/ ), потому что это работает с Eclipse и Java, которые у вас, вероятно, уже есть. Я бы не рекомендовал этот подход, так как это создает много работы для того, чтобы предоставить то, что уже есть у большинства пользователей.

0
The E