2026/02/28

오늘의 이야기

오늘은 인앱 업데이트에 도전해 보자.


 


https://developer.android.com/guide/playcore/in-app-updates?hl=ko 



 


인앱 업데이트  |  Android 개발자  |  Android Developers


인앱 업데이트 사용자는 기기에서 앱을 최신 상태로 유지하여 새로운 기능을 사용해 보고 성능 향상과 버그 수정을 통한 이점도 얻을 수 있습니다. 사용자 중에는 기기가 무제한 데이터에 연결


developer.android.com




 


앱을 만들어 게시를 하다보면 업데이트를 하게 되는 데, 내가 만든 앱의 사용자들이 업데이트를 잘 하고 있는 가에 대한 고민을 하게 된다.  그러나 사용자들은 그다지 업데이트에 관심이 없다.  자동으로 해 주면 좋은 거고, 아니면 말고, 혹시 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 안에 들어가 있는 내용이다.  다만, 아직 이렇게 구현된 소스가 정상적으로 구동 되고 있는 지는 알 수 없다. 아직 구동이 되어 보지 않아서...


 


난 오늘도 뭔 삽질을 하고 있는 건지 알 수 없다.  나중에 또 이글을 업데이트 할 날이 오기를 기다리며...


 


 





댓글 없음:

댓글 쓰기

오늘의 이야기

https://medium.com/androiddevelopers/jetpack-compose-before-and-after-8b43ba0b7d4f   Jetpack Compose — Before and after How the build speed,...