Today's

길을 나서지 않으면 그 길에서 만날 수 있는 사람을 만날 수 없다

모바일 앱(안드로이드)

안드로이드 앱 만들기 : 인앱 업데이트 는 어떻게 ?

Billcorea 2022. 3. 26. 11:05
반응형

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

 

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 안에 들어가 있는 내용이다.  다만, 아직 이렇게 구현된 소스가 정상적으로 구동 되고 있는 지는 알 수 없다. 아직 구동이 되어 보지 않아서...

 

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

 

 

반응형