[android] 새 버전을 사용할 수있을 때 Android 앱 강제 업데이트
Google Play 스토어에 앱이 있습니다. 업데이트 버전이 있으면 이전 버전을 사용할 수 없게됩니다. 즉, 사용자가 앱을 업데이트하지 않으면 앱에 들어 가지 않습니다. 새 버전을 사용할 수있게되면 사용자가 앱을 강제로 업데이트하도록하려면 어떻게해야합니까?
답변
나는 여기에 다른 대답에서 Scott Helme의 요점에 동의합니다. 그러나 앱을 계속 사용하기 위해 사용자가 반드시 업데이트해야하는 극단적 인 상황 (보안 문제, API 중단 변경 …)에서는 간단한 버전 관리 API를 제공 할 수 있습니다. API는 다음과 같습니다.
versionCheck API :
요청 매개 변수 :
int appVersion
응답
boolean forceUpgrade
boolean recommendUpgrade
앱이 시작되면 현재 앱 버전을 전달하는이 API를 호출하고 버전 관리 API 호출의 응답을 확인할 수 있습니다.
경우 forceUpgrade
이며 true
, 하나에 옵션이있는 팝업 대화 상자를 보여 사용자가 응용 프로그램을 종료하자, 또는 응용 프로그램을 업그레이드 Google Play 스토어로 이동합니다.
그렇지 않은 경우 recommendUpgrade
입니다 true
업데이트하거나 응용 프로그램을 계속 사용하는 옵션이있는 팝업 대화 상자를 표시합니다.
이 강제 업그레이드 기능이 있더라도 꼭 필요한 경우가 아니면 이전 버전을 계속 지원해야합니다.
답변
시도해보세요 : 먼저 playstore 링크에 대한 요청 호출을 만들고 거기에서 현재 버전을 가져온 다음 현재 버전과 비교해야합니다.
String currentVersion, latestVersion;
Dialog dialog;
private void getCurrentVersion(){
PackageManager pm = this.getPackageManager();
PackageInfo pInfo = null;
try {
pInfo = pm.getPackageInfo(this.getPackageName(),0);
} catch (PackageManager.NameNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
currentVersion = pInfo.versionName;
new GetLatestVersion().execute();
}
private class GetLatestVersion extends AsyncTask<String, String, JSONObject> {
private ProgressDialog progressDialog;
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected JSONObject doInBackground(String... params) {
try {
//It retrieves the latest version by scraping the content of current version from play store at runtime
Document doc = Jsoup.connect(urlOfAppFromPlayStore).get();
latestVersion = doc.getElementsByClass("htlgb").get(6).text();
}catch (Exception e){
e.printStackTrace();
}
return new JSONObject();
}
@Override
protected void onPostExecute(JSONObject jsonObject) {
if(latestVersion!=null) {
if (!currentVersion.equalsIgnoreCase(latestVersion)){
if(!isFinishing()){ //This would help to prevent Error : BinderProxy@45d459c0 is not valid; is your activity running? error
showUpdateDialog();
}
}
}
else
background.start();
super.onPostExecute(jsonObject);
}
}
private void showUpdateDialog(){
final AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("A New Update is Available");
builder.setPositiveButton("Update", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse
("market://details?id=yourAppPackageName")));
dialog.dismiss();
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
background.start();
}
});
builder.setCancelable(false);
dialog = builder.show();
}
답변
새 버전이 나 오자마자 이전 버전 지원을 중단해서는 안됩니다. 이것은 끔찍한 사용자 경험을 초래할 것입니다. 이 작업을 수행하는 소프트웨어 공급 업체는 타당한 이유가 없습니다.
사용자가 업데이트 할 수 없거나 업데이트를 원하지 않으면 어떻게 되나요? 그들은 단순히 앱을 사용할 수 없습니다.
Google은 이와 같은 버전 추적에 대한 옵션을 제공하지 않으므로 직접 실행해야합니다. 앱에서 확인할 수있는 현재 라이브 버전을 반환하는 간단한 웹 서비스이면 충분합니다. 그런 다음 버전을 업데이트하면 앱에서 오래된 버전임을 알 수 있습니다. Google Play에 의존하는 것보다 더 빨리 업데이트가 있음을 사용자에게 알리기 위해서만이 기능을 사용하는 것이 좋습니다. 앱의 작동을 막는 데 사용해서는 안되며 사용자에게 업데이트하라는 메시지 만 표시하면됩니다.
답변
Google 팀의 솔루션
새로운 Google Play In App 업데이트 메커니즘을 통해 쉽게 달성 할 수있는 Android 5.0부터 시작합니다. 요구 사항은 버전 1.5.0 이상의 Play Core 라이브러리를 보유하고 apk 대신 App Bundle ID 배포를 사용하는 것입니다.
라이브러리는 업데이트에 대해 사용자에게 알리는 두 가지 방법을 제공합니다.
-
사용자가 백그라운드에서 업데이트되는 동안 앱을 계속 사용할 수있는 유연성.
-
즉시-사용자가 앱을 업데이트 할 때까지 앱에 들어가는 것을 허용하지 않는 차단 화면입니다.
이를 구현하기위한 다음 단계가 있습니다.
- 업데이트 가용성 확인
- 업데이트 시작
- 업데이트 상태에 대한 콜백 받기
- 업데이트 처리
이러한 모든 단계 구현은 공식 사이트 https://developer.android.com/guide/app-bundle/in-app-updates 에 자세히 설명되어 있습니다.
답변
Scott과 Michael의 대답이 맞습니다. 지원하는 최소 버전 번호를 제공하는 서비스를 호스팅하고 설치된 버전과 비교합니다. 당신은 이것을 사용할 필요가 없길 바라지 만, 만약 어떤 버전이 거기에 있다면 당신은 심각한 결함으로 인해 절대적으로 죽여야 만하는 생명의 은인입니다.
다음에 수행 할 작업에 대한 코드를 추가하고 싶었습니다. 그런 다음 Google Play 인 텐트를 실행하고 사용자에게 업그레이드해야한다는 메시지를 표시 한 후 스토어에서 새 버전으로 가져가는 방법은 다음과 같습니다.
public class UpgradeActivity extends Activity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_upgrade);
final String appName = "com.appname";
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id="+appName)));
}
});
}
}
각 릴리스에서 업그레이드를 강제해야하는 경우 디자인을 재고해야합니다.
답변
Google은 인앱 업데이트 lib ( https://developer.android.com/guide/app-bundle/in-app-updates )를 도입 했으며 Lollipop +에서 작동하며 사용자에게 멋진 업데이트를 요청할 수있는 기능을 제공합니다. 대화 상자 (FLEXIBLE) 또는 필수 전체 화면 메시지 (IMMEDIATE).
이 답변의 모든 코드를 다루었습니다 : https://stackoverflow.com/a/56808529/5502121
답변
공식적으로 Google은이를 위해 Android API를 제공합니다.
API는 현재 소수의 파트너와 함께 테스트 중이며 곧 모든 개발자에게 제공 될 예정입니다.
업데이트
API는 지금 사용 가능합니다-https: //developer.android.com/guide/app-bundle/in-app-updates