Страницы

Поиск по вопросам

пятница, 14 февраля 2020 г.

Вывод уведомления о новой версии с блокировкой прошлых версий приложения

#android #уведомления #обновления


Как в приложении андроид реализовать функцию блокировки входа в старую версию приложение
если есть обновление?
Я написал уже около 20 версий приложение в некоторых были ошибки. Но у меня есть
пользователи в которых ещё начальная версия приложения где-то 5 -10 и тд. в Консоле
постоянно выпадают ошибки что они попадают на одни и те же грабли. Много раз писал
что в уведомления что выходит обновление и тд. но им без разницы. 
Понимаю что с ними ничего не сделаю.
Как сделать так что бы хотябы с 21 версии приложения если есть приложение в плей
маркете выше версии не можно было войти в приложение пред этим не обновив его?
    


Ответы

Ответ 1



Можно сделать процесс который будет запускаться при каждом запуске приложения, и будет проверять в маркете наличие новой версии приложения. Если ее нет, то все хорошо и пользователь будет пользоваться приложением как-всегда. Но вот если все-таки новая версия есть и она доступна для скачивания, то я бы сначала советовал уведомлять пользователя о том что новая версия есть и было бы неплохо обновится. Если пользователь проигнорировал ваше уведомление, то дальше можно его уведомлять о том что в случае откладывания обновления следующий запуск приложения будет невозможен пока пользователь не обновится. Дальше по поводу запуска и проверки. Я могу вам предложить такой вариант: ввести в вашем приложении бул переменную которая будет отвечать за то что ваше приложение последней версии и его обновлять не нужно. Эту переменную вы можете хранить на устройстве и дальше ее при запуске проверять. Эта переменная изначально будет равна true и ее (переменную) может изменить только ваша проверка на наличие новой версии. Если новой версии нету то переменная остается true, а если все-таки новая версия есть - false. А дальше вы при запуске активити проверяете эту переменную как-то так: if(updated) { //приложение свежее и пусть пользователь не волнуется } else { //приложение устарело и его нужно обновить } если приложение старое и проверка это доказала то вы можете вывести алерт с предложением либо выйти либо перейти на страницу с приложением для обновления. И так делать постоянно пока не сработает проверка и не покажет что приложение свежее. вот есть одна и вторая ссылка по вашему вопросу. Возможно у меня неправильное виденье вашей проблемы и я предложил неверное решение. Надеюсь хоть чем-то помог, если что-то будет непонятно - не стесняйтесь и спрашивайте, помогу чем смогу. Удачи :)

Ответ 2



Знаю что ответ уже приняли, но я чуть чуть дополню его. У Firebase есть отличная фича https://firebase.google.com/products/remote-config/ Вы в него можете добавить номер, например, последней актуальной версии и в приложении блокировать все, что меньше этого значения

Ответ 3



Видео Исходный код Имплементация implementation 'org.jsoup:jsoup:1.10.2' Исходник: import android.app.Activity; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.net.Uri; import android.os.AsyncTask; import android.support.v7.app.AlertDialog; import android.widget.Toast; import org.jsoup.Jsoup; public class AppUpdateChecker { private Activity activity; public AppUpdateChecker(Activity activity) { this.activity = activity; } //current version of app installed in the device private String getCurrentVersion(){ PackageManager pm = activity.getPackageManager(); PackageInfo pInfo = null; try { pInfo = pm.getPackageInfo(activity.getPackageName(),0); } catch (PackageManager.NameNotFoundException e1) { e1.printStackTrace(); } return pInfo.versionName; } private class GetLatestVersion extends AsyncTask { private String latestVersion; private ProgressDialog progressDialog; private boolean manualCheck; GetLatestVersion(boolean manualCheck) { this.manualCheck = manualCheck; } @Override protected void onPostExecute(String s) { super.onPostExecute(s); if (manualCheck) { if (progressDialog!=null) { if (progressDialog.isShowing()) { progressDialog.dismiss(); } } } String currentVersion = getCurrentVersion(); //If the versions are not the same if(!currentVersion.equals(latestVersion)&&latestVersion!=null){ final AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setTitle("An Update is Available"); builder.setMessage("Its better to update now"); builder.setPositiveButton("Update", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //Click button action activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id="+activity.getPackageName()))); dialog.dismiss(); } }); builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { //Cancel button action } }); builder.setCancelable(false); builder.show(); }else { if (manualCheck) { Toast.makeText(activity, "No Update Available", Toast.LENGTH_SHORT).show(); } } } @Override protected void onPreExecute() { super.onPreExecute(); if (manualCheck) { progressDialog=new ProgressDialog(activity); progressDialog.setMessage("Checking For Update....."); progressDialog.setCancelable(false); progressDialog.show(); } } @Override protected String doInBackground(String... params) { try { //It retrieves the latest version by scraping the content of current version from play store at runtime latestVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=" + activity.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 latestVersion; } catch (Exception e) { return latestVersion; } } } public void checkForUpdate(boolean manualCheck) { new GetLatestVersion(manualCheck).execute(); } } Позначка проверки в Активити AppUpdateChecker appUpdateChecker=new AppUpdateChecker(this); //pass the activity in constructure appUpdateChecker.checkForUpdate(false); //mannual check false here

Комментариев нет:

Отправить комментарий