IT이야기

Android 앱 업데이트에 대해 사용자에게 알리는 방법

cyworld 2021. 3. 22. 21:27
반응형

Android 앱 업데이트에 대해 사용자에게 알리는 방법은 무엇입니까?


현재 Play Market에있는 Android 앱을 구축했습니다. 수시로 업데이트하여 사용자에게 새 버전을 사용할 수 있음을 알리고 싶습니다.

앱 사용자에게 업데이트 알림을 보내려면 어떻게해야합니까?


이를 위해 특정 작업을 수행 할 필요가 없습니다. Google Play를 사용하고 있다고 언급 했으므로 업데이트 알림은 Google Play에서 처리합니다.

APK 를 더 높은 수준 으로 업데이트하기 만하면 versionCode나머지는 Google Play에서 알아서 처리합니다.


Google Play에서 새 버전에 대한 알림을 받고 싶은지 여부는 각 휴대폰 소유자의 몫이며 기본적으로 활성화되어 있는지 여부는 각 휴대폰 제조업체의 몫입니다.

그러나 사용자가 어떤 형태의 프로토콜과 호환되도록 새 버전으로 업데이트하도록 "요구"하는 상황에 있거나 어딘가에 서버 구성 요소가있는 유사한 사용 사례가있는 경우 사용자는 최신 버전에 대한 정보를 기반으로 UI에서 잠재적 인 버전 충돌이 발생합니다.

이 정보는 Google Play에서 직접 가져올 수 있지만 @Yahel 이이 질문 에서 지적했듯이 Google Play는 공식 ​​API가없는 폐쇄 형 시스템이므로 예측할 수없는 문서화되지 않은 API에 의존해야 할 수도 있습니다. 여기에 비공식 API 라이브러리가 있습니다 .

이렇게하면이 정보를 자신의 서버에 보관하는 옵션이 하나만 남습니다. 서버 측이 모두 준비되어 있다면 이것은 사소한 일입니다. XML 파일에 최신 버전을 넣고 정기적으로 코드에서 검색하면됩니다. 버전 코드가 오래된 경우 UI에서 알림을 트리거합니다. 다음은 이를 위한 구현 입니다.

도움이 되었기를 바랍니다. :-)


사용자가 사용 가능한 업데이트가 있음을 알 수 있도록하려는 경우에 따라 다양한 방법으로이를 수행 할 수 있습니다.

앱이 시작될 때 사용자가 업데이트에 대해 알도록하려면 onCreateGoogle Play에서 최신 버전을 사용할 수 있는지 확인 하는 유틸리티 메서드 ( 메인 / 첫 번째 활동 메서드 내부) 를 만드세요. 그렇다면 사용자가 경고 대화 상자의 긍정적 인 버튼을 클릭 할 때 Google Play에서 앱을 여는 인 텐트와 관련 메시지가 포함 된 경고 대화 상자를 표시합니다. 앱을 정기적으로 업데이트하는 경우 사용자는 앱이 시작될 때마다이 경고 대화 상자를 계속 표시하므로 짜증을 낼 수 있습니다. 따라서 이것이 최선의 방법이 아닙니다.

사용자가 앱을 시작할 때가 아니라 전화로 알림을 받도록하려면 AlarmManager클래스를 사용하여 정기적으로 업데이트를 확인하는 백그라운드 서비스를 예약 할 수 있습니다 . 서비스에서 실제로 업그레이드가 가능하다고 판단되면 Google Play에서 앱을 여는 인 텐트와 함께 알림을 게시하세요.

물론 또 다른 접근 방식은 OS 자체에 맡기는 것입니다. 사용자가 귀하의 앱에 대해 "자동 업데이트"환경 설정을 설정하지 않은 경우 사용자는 귀하와 다른 모든 앱에 사용할 수있는 업데이트에 대한 알림을 정기적으로 받게됩니다. 그러나 모든 사용자가 장치에서 백그라운드 데이터를 활성화하는 것은 아니므로 이것이 완전히 신뢰할 수있는 것은 아닙니다.

결국 사용자의 선호도를 존중해야합니다. 사용자가 앱을 자동으로 업데이트하고 싶지 않거나 앱을 시작할 때마다 잔소리 대화 상자가 표시되는 것을 원하지 않는 경우 사용자에게 업데이트에 대해 경고하지 마십시오.

제 생각 PreferenceActivity에는 앱 내에서 설정할 수있는 "정기적으로 업데이트 확인"과 같은 기본 설정을 가진을 만들어야합니다 . 그것이 설정되어 있으면 자신의 서비스에서 필요한 것을하십시오. 사용자에게 서비스가 업데이트를 확인하는 기간을 선택할 수있는 옵션을 제공 할 수도 있습니다.

이게 도움이 되길 바란다!


이것을 사용하십시오 : https://www.push-link.com/


Google Play는 알림 표시 줄을 통해 앱이 업데이트되었음을 ​​사용자에게 알립니다.

알림 시스템을 직접 설정하면 사용자에게 업데이트 알림이 더 빨리 전달되지만 업데이트를 설치하기 위해 Google Play로 이동하면 아직 사용할 수 없게됩니다. 이는 앱 / 업데이트를 '게시'한 후 Play에 표시 될 때까지 지연이 발생하기 때문입니다. 업데이트를 사용할 수 없을 때 업데이트가 있음을 사용자에게 알리면 혼란과 좌절을 초래할뿐입니다.

내 조언 : Google의 업데이트 알림 시스템을 고수하고 사용자에게 15 분 더 빨리 업데이트를 시도하는 것에 대해 걱정하지 마십시오.


나는 이것이 오래된 질문이라는 것을 알고 있지만 사람들 이이 질문을 확인하기 위해 여기에 오는 경우 Google은 이제 응용 프로그램 업데이트에 대한 인앱 알림에 대한 공식 지원을 제공하고 전체 문서는 여기 에서 찾을 수 있습니다


어떤 사람들은 Android C2DM ( Cloud-to-Device Messaging )을 사용하여 사용자에게 업데이트를 알립니다. 나는 Google Play가 이미 업데이트를 알리는 데 꽤 좋은 일을하고 있고 C2DM을 구현하면 앱 작성에 완전히 새로운 차원을 추가한다고 생각하기 때문에 신경 쓰지 않을 것이라고 생각합니다 (서버 구성 요소가 필요하기 때문). 하지만 Google Play에서받는 것보다 더 풍부한 업데이트 알림을 사용자에게 제공하고 싶을 수도 있습니다.


위의 @ Davek804의 대답이 잘못되었습니다. android : versionCode는 다른 버전에 비해 애플리케이션 코드의 버전을 나타내는 정수 값이므로 "1.5b"를 사용하는 것은 올바르지 않습니다. 대신 "15"(또는 "150") 사용


문제에 대한 좋은 해결책을 찾았습니다. 앱 시작시 수동으로 버전 업데이트를 확인하고 사용자에게 새 업데이트를 알리고 싶다고 가정 해 보겠습니다.

1 단계 : android-market-api 다운로드 (.jar 파일이 아닌 전체 프로젝트!)

2 단계 : eclipse로 가져온 후 활동에 다음 코드를 작성하십시오.

MarketService ms = new MarketService(activity);
ms.level(MarketService.REVISION).checkVersion();

이제 MarketService.java가 손상된 것 같으므로 수정해야합니다.

3 단계 : 콜백 메서드를 다시 작성하고 다음 메서드를 추가합니다.

protected void callback(String url, JSONObject jo, AjaxStatus status){      
        if(jo == null) return;
        String googlePlayversion = jo.optString("version", "0");
        String smartphone_version = "";

        PackageInfo pInfo;
        try {
            pInfo = act.getPackageManager().getPackageInfo(act.getPackageName(), 0);
            smartphone_version = pInfo.versionName;
        } catch (NameNotFoundException e) {}
        boolean new_version_avaible = compare(smartphone_version, googlePlayversion);
        if(new_version_avaible){
            showUpdateDialog(jo);
        }
    }

    private static boolean compare(String v1, String v2) {
        String s1 = normalisedVersion(v1);
        String s2 = normalisedVersion(v2);
        int cmp = s1.compareTo(s2);
        String cmpStr = cmp < 0 ? "<" : cmp > 0 ? ">" : "==";
        System.out.printf("result: "+"'%s' %s '%s'%n", v1, cmpStr, v2);
        if(cmpStr.contains("<")){
            return true;
        }
        if(cmpStr.contains(">")||cmpStr.contains("==")){
            return false;
        }
        return false;
    }

    public static String normalisedVersion(String version) {
        return normalisedVersion(version, ".", 4);
    }

    public static String normalisedVersion(String version, String sep, int maxWidth) {
        String[] split = Pattern.compile(sep, Pattern.LITERAL).split(version);
        StringBuilder sb = new StringBuilder();
        for (String s : split) {
            sb.append(String.format("%" + maxWidth + 's', s));
        }
        return sb.toString();
    }

테스트하려면 googlePlayversion 문자열을 로컬 버전보다 높은 버전으로 수정하십시오.

내가 사용한 소스 비교 방법 은 Java에서 두 버전의 문자열어떻게 비교합니까?


버전을 확인하고 사용자에게 앱 알림을 제공하거나 앱과 서버의 첫 번째 연결을 결정할 수있는 경우 애플리케이션을 강제로 업데이트하려는 경우에도 매우 좋은 방법이 있습니다. 첫 번째 요청에 대한 응답으로 현재 버전의 앱이 서버에 저장된 다음 클라이언트 쪽에서 적절한 조치를 취할 수 있습니다. 이 접근 방식의 장점 :
1- 버전 번호에 대한 추가 요청 없음.
2- 구글 플레이 스토어 이외의 앱을 다운로드하는 경우에도 적용됩니다.
3- 앱 거래의 특정 작업에서 버전을 확인하려는 경우에도이 아이디어를 사용할 수 있습니다 (새 결제 게이트웨이를 추가 한 경우).


여분의 마일을 걷고 싶은지 모르겠습니다. 앱의 버전 번호를 제공하고 Android 앱이 앱이 시작될 때 새 버전이 있는지 확인하기 위해 appengine을 확인할 수 있도록하는 google appengine을 사용해 볼 수 있습니다. 이렇게하면 앱이 Google Play 마켓에 있는지 아마존 앱 스토어에 있는지, 사이드로드를 통해이 두 가지없이 휴대 전화에 설치되어 있는지 여부는 중요하지 않습니다. json에서 애플리케이션 버전을 제공하기 위해 appengine을 설정하는 것은 그리 어렵지 않습니다. "Hello World"문자열을 앱 버전 이름으로 바꿉니다 ...


이것은 간단한 웹 서비스를 사용할 수 있습니다. 이것은 달성하는 방법 중 하나입니다.

즉, 앱 시작이 현재 버전의 사용자 앱과 서버에서 해당 웹 서비스에 도달 할 때마다 새 버전이 있는지 확인하고 (최신 버전의 앱을 유지해야 함) 해당 응답을 사용자. 최신 버전을 사용할 수있는 경우 사용자에게 최신 버전의 응용 프로그램을 다운로드하라는 메시지를 표시하고 최신 버전을 사용할 수없는 경우 계속할 수 있도록 허용합니다.

적어도 무언가가 당신에게 도움이 되길 바랍니다.


이 문제를 해결하는 데 기본적으로 사용되는 두 가지 모델이 있습니다.

Pull Based
Push Based

풀 기반 또는 푸시 메커니즘 사용 여부를 결정하는 특정 시스템의 아키텍처 또는 디자인에 따라 다릅니다.

풀 기반 모델의 경우 새 버전의 애플리케이션과 관련하여 관련 서버에 하나의 http 요청을합니다. 현재 애플리케이션 버전 번호는 Android 애플리케이션의 SQLLite에 저장할 수 있습니다. 이것은 서버에 제공 할 수 있으며 서버에서 새 버전을 확인할 수 있습니다.

푸시 메커니즘의 경우 C2DM 푸시 알림 서비스를 사용할 수 있습니다. 자세한 내용은 http://code.google.com/android/c2dm/에 나와 있습니다 .


일반적으로 Google Play에 새 애플리케이션을 업로드하면 대부분의 사용자에게 업데이트 알림이 표시되고 일부 사용자는 설정에 따라 앱이 자동으로 기기에 다운로드됩니다. 진지하게 앱에서 업데이트를 요청하는 알림을 만들고 싶다면 (모든 사람이 Google Play 설정에 관계없이 알림을 받도록하려면 최신 버전 번호를 반환하는 웹 서비스를 만들어야합니다. 그런 다음 앱 내부를 비교하고 알림을 게시 할 수 있습니다. Google App Engine ( https://developers.google.com/appengine/ )을 사용할 수 있습니다. 이미 가지고있는 Eclipse 및 Java에서 작동하기 때문입니다. 이 접근 방식은 대부분의 사용자가 이미 가지고있는 것을 제공하기 위해 많은 작업을 생성합니다.


너무 늦었다 고 생각하지만 누군가에게 도움이 될 수 있습니다

public enum AppVersionUpgradeNotifier {
INSTANCE;

private static final String TAG = "AppVersionUpdateManager";

private static final String PREFERENCES_APP_VERSION = "pref_app_version_upgrade";
private static final String KEY_LAST_VERSION = "last_version";

private SharedPreferences sharedPreferences;
private VersionUpdateListener versionUpdateListener;
private boolean isInitialized;

public static synchronized void init(Context context, VersionUpdateListener versionUpdateListener) {
    if (context == null || versionUpdateListener == null) {
        throw new IllegalArgumentException(TAG + " : Context or VersionUpdateListener is null");
    }

    if (!INSTANCE.isInitialized) {
        INSTANCE.initInternal(context, versionUpdateListener);
    } else {
        Log.w(TAG, "Init called twice, ignoring...");
    }
}

private void initInternal(Context context, VersionUpdateListener versionUpdateListener) {
    this.sharedPreferences = context.getSharedPreferences(PREFERENCES_APP_VERSION, Context.MODE_PRIVATE);
    this.versionUpdateListener = versionUpdateListener;
    this.isInitialized = true;
    checkVersionUpdate();
}

private void checkVersionUpdate() {
    int lastVersion = getLastVersion();
    int currentVersion = getCurrentVersion();

    if (lastVersion < currentVersion) {
        if (versionUpdateListener.onVersionUpdate(currentVersion, lastVersion)) {
            upgradeLastVersionToCurrent();
        }
    }
}

private int getLastVersion() {
    return sharedPreferences.getInt(KEY_LAST_VERSION, 0);
}

private int getCurrentVersion() {
    return BuildConfig.VERSION_CODE;
}

public void upgradeLastVersionToCurrent() {
    sharedPreferences.edit().putInt(KEY_LAST_VERSION, getCurrentVersion()).apply();
}

public interface VersionUpdateListener {
    boolean onVersionUpdate(int newVersion, int oldVersion);
}

}

그것을 사용

public class MyApplication extends Application implements AppVersionUpgradeNotifier.VersionUpdateListener {

@Override
public void onCreate() {
    super.onCreate();

    AppVersionUpgradeNotifier.init(this,this);
}

@Override
public boolean onVersionUpdate(int newVersion, int oldVersion) {
    //do what you want

    return true;
}

}


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="1.5b" 
android:versionName="1.5b">

앱을 Google Play에 다시 업로드 할 때이 두 속성이 이전 업로드에서 변경된 경우 Google Play는 앱을 설치 한 사용자에게 자동으로 알림을 보냅니다. 이것은 AndroidManifest 파일입니다.

참조 URL : https://stackoverflow.com/questions/9849889/how-to-notify-users-about-an-android-app-update

반응형