Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

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

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

Ответ 3

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

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

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

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

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

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

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

Ответ 5

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

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

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

Ответ 6

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

Ответ 7

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

Ответ 8

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

Шаг 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?

Ответ 9

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

Ответ 10

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

Ответ 11

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

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

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

Ответ 12

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

Pull Based
Push Based

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

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

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

Ответ 13

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

Ответ 14

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

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

}

Ответ 15

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

Ответ 16

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="1.5b" 
android:versionName="1.5b">

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