원본출처: 티스토리 바로가기
오늘은 인앱 업데이트에 도전해 보자.
https://developer.android.com/guide/playcore/in-app-updates?hl=ko
앱을 만들어 게시를 하다보면 업데이트를 하게 되는 데, 내가 만든 앱의 사용자들이 업데이트를 잘 하고 있는 가에 대한 고민을 하게 된다. 그러나 사용자들은 그다지 업데이트에 관심이 없다. 자동으로 해 주면 좋은 거고, 아니면 말고, 혹시 android 설정에서 충전중 자동 업데이트를 설정해 두었다면 모르겠으나...
개발자 가이드의 설명은 AppUpdateManager 을 활용하는 방법에 대한 설명을 하고 있다. 이걸 보면서 그냥 따라하기를 해 보았다.
... import android.app.Activity; import android.app.Application; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentSender; import android.util.Log; import androidx.appcompat.app.AlertDialog; import com.google.android.play.core.appupdate.AppUpdateInfo; import com.google.android.play.core.appupdate.AppUpdateManager; import com.google.android.play.core.appupdate.AppUpdateManagerFactory; import com.google.android.play.core.install.model.AppUpdateType; import com.google.android.play.core.install.model.UpdateAvailability; import com.google.android.play.core.tasks.Task; import com.kakao.sdk.common.KakaoSdk; import com.nari.notify2kakao.InitActivity; import com.nari.notify2kakao.R; public class GlobalApplication extends Application { private static volatile GlobalApplication obj = null; private static volatile Activity currentActivity = null; private static String TAG = "GlobalApplication"; static AppUpdateManager appUpdateManager ; static int MY_REQUEST_CODE = 1000; @Override public void onCreate() { super.onCreate(); obj = this ; KakaoSdk.init(this, getString(R.string.kakao_app_key)); } public static void doUpdateStart(AppUpdateInfo appUpdateInfo) { AlertDialog.Builder builder = new AlertDialog.Builder(getCurrentActivity(), R.style.DialogTheme); builder.setTitle(getCurrentActivity().getString(R.string.beginInAppUpdate)) .setMessage(getCurrentActivity().getString(R.string.msgRunUpdateStart)) .setPositiveButton(getCurrentActivity().getString(R.string.OK), new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { Log.e(TAG, "startUpdateFlowForResult"); try { appUpdateManager.startUpdateFlowForResult( // Pass the intent that is returned by 'getAppUpdateInfo()'. appUpdateInfo, // Or 'AppUpdateType.FLEXIBLE' for flexible updates. AppUpdateType.IMMEDIATE, // The current activity making the update request. getCurrentActivity(), // Include a request code to later monitor this update request. MY_REQUEST_CODE); } catch (IntentSender.SendIntentException e) { e.printStackTrace(); } } }); AlertDialog dialog = builder.create(); dialog.show(); } public static GlobalApplication getGlobalApplicationContext() { return obj; } public static Activity getCurrentActivity() { return currentActivity; } // Activity가 올라올때마다 Activity의 onCreate에서 호출해줘야한다. public static void setCurrentActivity(Activity currentActivity) { GlobalApplication.currentActivity = currentActivity; appUpdateManager = AppUpdateManagerFactory.create(getCurrentActivity()); Log.e(TAG, "checkUpdate start..."); // 업데이트를 확인하는 데 사용하는 인텐트 개체를 반환합니다. Task<AppUpdateInfo> appUpdateInfoTask = appUpdateManager.getAppUpdateInfo(); // 플랫폼이 지정된 유형의 업데이트를 허용하는지 확인합니다. appUpdateInfoTask.addOnSuccessListener(appUpdateInfo -> { Log.e(TAG, "updateAvailability=" + appUpdateInfo.updateAvailability()); Log.e(TAG, "IMMEDIATE=" + appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)); if (appUpdateInfo.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE // 이 예는 즉시 업데이트를 적용합니다. 유연한 업데이트를 적용하려면 // 대신 AppUpdateType.FLEXIBLE을 전달합니다. && appUpdateInfo.isUpdateTypeAllowed(AppUpdateType.IMMEDIATE)) { // 업데이트를 요청합니다. doUpdateStart(appUpdateInfo); } }); } }
소스 예시는 알림을 카카오톡으로 보내는 앱에 사용된 GlobalApplication 안에 들어가 있는 내용이다. 다만, 아직 이렇게 구현된 소스가 정상적으로 구동 되고 있는 지는 알 수 없다. 아직 구동이 되어 보지 않아서...
난 오늘도 뭔 삽질을 하고 있는 건지 알 수 없다. 나중에 또 이글을 업데이트 할 날이 오기를 기다리며...
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
댓글
댓글 쓰기