반응형
오늘은 인앱 업데이트에 도전해 보자.
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 안에 들어가 있는 내용이다. 다만, 아직 이렇게 구현된 소스가 정상적으로 구동 되고 있는 지는 알 수 없다. 아직 구동이 되어 보지 않아서...
난 오늘도 뭔 삽질을 하고 있는 건지 알 수 없다. 나중에 또 이글을 업데이트 할 날이 오기를 기다리며...
반응형
'모바일 앱(안드로이드)' 카테고리의 다른 글
안드로이드 앱 만들기 : 왜 Jetpack Compose 인가 ? (3) | 2022.04.03 |
---|---|
안드로이드 앱 만들기 : firebase 의 appcheck 는 뭘까 ? (3) | 2022.03.30 |
안드로이드 앱 만들기. 카카오 API V2 로 이전 (8) | 2022.03.21 |
안드로이드 앱 만들기 : 유투브 동영상 플레이어 만들기 (0) | 2022.03.17 |
안드로이드 앱 만들기 : 특정 앱으로 파일 공유 하기 (0) | 2022.03.16 |