새 버전을 사용할 수있을 때 Android 앱 강제 업데이트


102

Google Play 스토어에 앱이 있습니다. 업데이트 버전이 있으면 이전 버전을 사용할 수 없게됩니다. 즉, 사용자가 앱을 업데이트하지 않으면 앱에 들어 가지 않습니다. 새 버전을 사용할 수있게되면 사용자가 앱을 강제로 업데이트하도록하려면 어떻게해야합니까?


1
이 오픈 소스 GitHub 프로젝트 (MAHAndroidUpdater)는이 기능을 완전히 제공합니다. 시도 해보세요, 아주 간단합니다. github.com/hummatli/MAHAndroidUpdater
사타르 Hummatli

답변:


99

나는 여기에 다른 대답에서 Scott Helme의 요점에 동의합니다. 그러나 앱을 계속 사용하기 위해 사용자가 반드시 업데이트해야하는 극단적 인 상황 (보안 문제, API 중단 변경 ...)에서는 간단한 버전 관리 API를 제공 할 수 있습니다. API는 다음과 같습니다.

versionCheck API :

요청 매개 변수 :

  • int appVersion

응답

  1. boolean forceUpgrade
  2. boolean recommendUpgrade

앱이 시작되면 현재 앱 버전을 전달하는이 API를 호출하고 버전 관리 API 호출의 응답을 확인할 수 있습니다.

경우 forceUpgrade이며 true, 하나에 옵션이있는 팝업 대화 상자를 보여 사용자가 응용 프로그램을 종료하자, 또는 응용 프로그램을 업그레이드 Google Play 스토어로 이동합니다.

그렇지 않은 경우 recommendUpgrade입니다 true업데이트하거나 응용 프로그램을 계속 사용하는 옵션이있는 팝업 대화 상자를 표시합니다.

이 강제 업그레이드 기능이 있더라도 꼭 필요한 경우가 아니면 이전 버전을 계속 지원해야합니다.


앱이 시작될 때마다 팝업을 표시하고 recommendedUpgrade가 true입니까? (UX 관점에서) 또는 팝업을 한 번만 표시하고 사용자가 업그레이드를 거부하더라도 다시 표시하지 않습니다.
Aneesh

8
권장 업그레이드의 경우 사용자가 거부하면 다시 표시하지 않아야한다고 생각합니다. "사용자가 앱을 열 때마다 한 번씩"표시 할 수도 있습니다. n 값을 직접 결정하고 구현할 수 있습니다.
Michael

3
더 나은 솔루션 imo는 모든 API 호출의 헤더에 앱의 버전을 체계적으로 전달한 다음 API가 오래된 버전을 감지하면 특정 상태 코드를 반환하도록하는 것입니다. 그런 다음 앱 내에서 처리합니다. 이 확인을 위해 또 다른 전용 API를 호출하고이 API 호출이 앱 / 서비스 내에서 언제 / 어디에서 수행되어야하는지 정확히 파악해야하는 것보다 낫습니다.
Raphael C

@RaphaelC 이것은 실제로 서버 측 구현에 달려 있습니다. 일부 상황에서 모든 API의 버전을 확인하는 필터를 추가하는 것도 완벽하지 않습니다.
9 월 GH

4
@SepGH는 그 이후로 변경되었으며 이제 Android는 사용자가 최소 버전으로 업그레이드하지 않는 경우 사용자가 앱을 계속 사용하지 못하도록 강제로 업그레이드하고 차단하는 데 사용할 수있는 API를 제공합니다 : developer.android.com/guide/ 앱 번들 / 인 - 앱 업데이트
라파엘 C

56

시도해보세요 : 먼저 playstore 링크에 대한 요청 호출을 만들고 거기에서 현재 버전을 가져온 다음 현재 버전과 비교해야합니다.

String currentVersion, latestVersion;
Dialog dialog;
private void getCurrentVersion(){
 PackageManager pm = this.getPackageManager();
        PackageInfo pInfo = null;

        try {
            pInfo =  pm.getPackageInfo(this.getPackageName(),0);

        } catch (PackageManager.NameNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        currentVersion = pInfo.versionName;

   new GetLatestVersion().execute();

}

private class GetLatestVersion extends AsyncTask<String, String, JSONObject> {

        private ProgressDialog progressDialog;

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        @Override
        protected JSONObject doInBackground(String... params) {
            try {
//It retrieves the latest version by scraping the content of current version from play store at runtime
                Document doc = Jsoup.connect(urlOfAppFromPlayStore).get();
                latestVersion = doc.getElementsByClass("htlgb").get(6).text();

            }catch (Exception e){
                e.printStackTrace();

            }

            return new JSONObject();
        }

        @Override
        protected void onPostExecute(JSONObject jsonObject) {
            if(latestVersion!=null) {
                if (!currentVersion.equalsIgnoreCase(latestVersion)){
                   if(!isFinishing()){ //This would help to prevent Error : BinderProxy@45d459c0 is not valid; is your activity running? error
                    showUpdateDialog();
                    }
                }
            }
            else
                background.start();
            super.onPostExecute(jsonObject);
        }
    }

private void showUpdateDialog(){
        final AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("A New Update is Available");
        builder.setPositiveButton("Update", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse
                        ("market://details?id=yourAppPackageName")));
                dialog.dismiss();
            }
        });

        builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                background.start();
            }
        });

        builder.setCancelable(false);
        dialog = builder.show();
    }

1
나는 이것이 외부 라이브러리 JSoup을 추가하는 데 사용이 필요할 것이라고 생각합니까?
아브라함 필립

1
예, 그러나 그것은 html div 페이지를 얻기위한 것입니다. 난 당신이 JSoup없이 그 HTML 요소를 긁어 수 있다면 당신은 여전히 작동합니다,이 기능을 달성하기 위해 제 3 자 라이브러리를 사용할 필요가 없습니다 수도, 말을 의미
AshuKingSharma

1
itemprop 값을 변경하면 어떨까요 ??
asok Buzz

1
그들은 itemprop에 값을 변경하는 경우에는, 내가 바로 그를 지원하기 위해 내 대답을 편집 것, 너무 내 애플 리케이션에 영향을 미칠 :) 그때까지 아무 걱정 때문에 것
AshuKingSharma

니스 setCancelable (거짓)
카이 왕

48

새 버전이 나 오자마자 이전 버전 지원을 중단해서는 안됩니다. 이것은 끔찍한 사용자 경험을 초래할 것입니다. 이 작업을 수행하는 소프트웨어 공급 업체는 타당한 이유가 없습니다.

사용자가 업데이트 할 수 없거나 업데이트를 원하지 않으면 어떻게 되나요? 그들은 단순히 앱을 사용할 수 없습니다.

Google은 이와 같은 버전 추적에 대한 옵션을 제공하지 않으므로 직접 실행해야합니다. 앱에서 확인할 수있는 현재 라이브 버전을 반환하는 간단한 웹 서비스이면 충분합니다. 그런 다음 버전을 업데이트하면 앱에서 오래된 버전임을 알 수 있습니다. Google Play에 의존하는 것보다 더 빨리 업데이트가 있음을 사용자에게 알리기 위해서만이 기능을 사용하는 것이 좋습니다. 앱의 작동을 막는 데 사용해서는 안되며 사용자에게 업데이트하라는 메시지 만 표시하면됩니다.


2
@ashraful이 질문 또는 답변으로 질문이 해결 된 경우 확인 표시를 클릭하여 수락하는 것이 좋습니다. 이것은 더 넓은 커뮤니티에 해결책을 찾았다는 것을 나타내며 응답자와 자신 모두에게 약간의 명성을줍니다. 이를 수행 할 의무가 없습니다.
Sufian

대답은 존재하는 소프트웨어 공급 업체의 수에 따라 다릅니다. 정량화 할 수 있습니까?
Lou Morda 2015 년

1
앱 스토어 나 플레이 스토어에서 현재 앱 버전을받을 수 있나요? 또는 내 서버에 최신 앱 버전을 유지해야하는지 여부? 지금은 최신 앱 버전을 반환하기 위해 서버에 서비스 호출이 있지만 앱을 게시하는 동안 서버를 업데이트해야 할 때마다 어려움이 있습니다. 따라서 각 상점에서 현재 버전 번호를 얻을 수 있습니까?
수바 (Subha)

2
Supercell은 최신 버전의 게임 만 지원합니다. 새 버전을 Google Play에 푸시 한 후 연결을 시도하는 이전 클라이언트는 서버에서 "업데이트 필요"응답을 받고 연결이 닫 혔음을 확인합니다. 그들은 매년 여러 번 이것을하고 있습니다. 따라서 "게임 회사"를 "소프트웨어 공급 업체"로 간주하고 싶지 않다면 이제 하나를 알 수 있습니다. :) 그들이 여전히 매일 수백만 달러를 벌고 있다는 점을 고려할 때이 끔찍한 사용자 경험은 쇼 스토퍼가 아닙니다. .
Arjan

@Subha 네, 가능합니다. 그러나 공식 API가 없으므로 웹 페이지를 긁어 내야합니다. 이는 또한 웹 페이지가 변경되면 중단 될 수 있음을 의미합니다. 나는 써드 파티 앱에서 그것을 작성하고 여기에 대답으로 다소 간단한 코드 게시했습니다 . 현재 코드는 Play와 iTunes 페이지 모두에서 작동합니다. 그러나 프로덕션 환경에서는 Google 또는 Apple의 페이지 형식에 의존하는 대신 서버에서 최신 앱 버전을 자동으로 업데이트하는 솔루션을 찾는 것이 더 나을 수 있습니다.
Arjan

27

Google 팀의 솔루션

새로운 Google Play In App 업데이트 메커니즘을 통해 쉽게 달성 할 수있는 Android 5.0부터 시작합니다. 요구 사항은 버전 1.5.0 이상의 Play Core 라이브러리를 보유하고 apk 대신 App Bundle ID 배포를 사용하는 것입니다.

라이브러리는 업데이트에 대해 사용자에게 알리는 두 가지 방법을 제공합니다.

  1. 사용자가 백그라운드에서 업데이트되는 동안 앱을 계속 사용할 수있는 유연성.

  2. 즉시-사용자가 앱을 업데이트 할 때까지 앱에 들어가는 것을 허용하지 않는 차단 화면입니다.

이를 구현하기위한 다음 단계가 있습니다.

  1. 업데이트 가용성 확인
  2. 업데이트 시작
  3. 업데이트 상태에 대한 콜백 받기
  4. 업데이트 처리

이러한 모든 단계 구현은 공식 사이트 https://developer.android.com/guide/app-bundle/in-app-updates 에 자세히 설명되어 있습니다.


16

Scott과 Michael의 대답이 맞습니다. 지원하는 최소 버전 번호를 제공하는 서비스를 호스팅하고 설치된 버전과 비교합니다. 당신은 이것을 사용할 필요가 없길 바라지 만, 만약 어떤 버전이 거기에 있다면 당신은 심각한 결함으로 인해 절대적으로 죽여야 만하는 생명의 은인입니다.

다음에 수행 할 작업에 대한 코드를 추가하고 싶었습니다. 그런 다음 Google Play 인 텐트를 실행하고 사용자에게 업그레이드해야한다는 메시지를 표시 한 후 스토어에서 새 버전으로 가져가는 방법은 다음과 같습니다.

public class UpgradeActivity extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_upgrade);
        final String appName = "com.appname";
        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                    startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id="+appName)));

            }
        });
    }
}

각 릴리스에서 업그레이드를 강제해야하는 경우 디자인을 재고해야합니다.


11

Google은 인앱 업데이트 lib ( https://developer.android.com/guide/app-bundle/in-app-updates )를 도입 했으며 Lollipop +에서 작동하며 사용자에게 멋진 업데이트를 요청할 수있는 기능을 제공합니다. 대화 상자 (FLEXIBLE) 또는 필수 전체 화면 메시지 (IMMEDIATE).

후자를 구현해야합니다. 다음과 같이 표시됩니다. 여기에 이미지 설명 입력

이 답변의 모든 코드를 다루었습니다 : https://stackoverflow.com/a/56808529/5502121


1
이것이 최고의 답변입니다!
fvaldivia

이 기능은 실제로 사용자가 앱을 실행할 때 최신 상태 인 Play 캐시에 의존합니다.
kiran01bm

7

공식적으로 Google은이를 위해 Android API를 제공합니다.

API는 현재 소수의 파트너와 함께 테스트 중이며 곧 모든 개발자에게 제공 될 예정입니다.

업데이트 API는 지금 사용 가능합니다-https: //developer.android.com/guide/app-bundle/in-app-updates



1
이제이 API를 사용할 수 있습니까?
Yayayaya

나는 그것을 구글하고 발견했다 this developer.android.com/guide/app-bundle/in-app-updates
Chulo

이 기능은 실제로 사용자가 앱을 실행할 때 최신 상태 인 Play 캐시에 의존합니다.
kiran01bm

6

이를 위해 Firebase의 원격 구성 기능을 확인하는 것이 좋습니다 .

다음과 같은 "Disabled Android Versions"조건으로 app_version_enabled 매개 변수를 사용하여 구현했습니다.

applies if App ID == com.example.myapp and App version regular expression ^(5.6.1|5.4.2) 

매개 변수의 기본값은 "true"이지만 비활성화 된 Android 버전의 값은 false입니다. 비활성화 된 Android 버전에 대한 정규식에서 |{version name}해당 괄호 안에 다른 비활성화 된 버전을 추가 할 수 있습니다 .

그런 다음 구성에서 버전이 활성화되었는지 여부를 확인합니다. 사용자가 업그레이드하도록 강제하는 활동이 있습니다. 외부에서 앱을 실행할 수있는 두 곳 (내 기본 런처 활동 및 인 텐트 처리 활동) 만 체크인합니다. 원격 구성은 캐시 기반으로 작동하기 때문에 캐시를 무효화하는 데 필요한 시간이 지나지 않은 경우 앱의 '사용 중지 된'버전을 즉시 캡처하지 않지만, 계속 진행하는 경우 최대 12 시간입니다. 권장 캐시 만료 값입니다.


이것은 아주 좋은 선택입니다. "비활성화 된"버전의 하위 집합을 지정하면 앱에 보안 문제 나 주요 성능 문제가있는 경우 신속하게 자신을 보호 할 수 있습니다. 이를 통해 모든 버전을 계속 지원할 수 있지만 필요한 경우 특정 버전을 금지 할 수 있습니다.
Terry

3

로컬 및 Play 스토어 APK의 버전 코드 확인

try {
        versionChecker VersionChecker = new versionChecker();
        String versionUpdated = VersionChecker.execute().get().toString();
        Log.i("version code is", versionUpdated);


        PackageInfo packageInfo = null;
        try {
            packageInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        int version_code = packageInfo.versionCode;
        String version_name = packageInfo.versionName;
        Log.i("updated version code", String.valueOf(version_code) + "  " + version_name);
        if (version_name != versionUpdated) {
            String packageName = getApplicationContext().getPackageName();//
            UpdateMeeDialog updateMeeDialog = new UpdateMeeDialog();
            updateMeeDialog.showDialogAddRoute(MainActivity.this, packageName);
            Toast.makeText(getApplicationContext(), "please updated", Toast.LENGTH_LONG).show();
        }
    } catch (Exception e) {
        e.getStackTrace();
    }

버전 확인을위한 클래스 구현

class versionChecker extends AsyncTask<String, String, String> {
String newVersion;

@Override
protected String doInBackground(String... params) {

    try {
        newVersion = Jsoup.connect("https://play.google.com/store/apps/details?id=+YOR_PACKAGE_NAME+&hl=en")
                .timeout(30000)
                .userAgent("Mozilla/5.0 (Windows; U; WindowsNT 5.1; en-US; rv1.8.1.6) Gecko/20070725 Firefox/2.0.0.6")
                .referrer("http://www.google.com")
                .get()
                .select("div[itemprop=softwareVersion]")
                .first()
                .ownText();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return newVersion;
}
}

업데이트 용 다이얼 롭 박스

public class UpdateMeeDialog {

ActivityManager am;
TextView rootName;
Context context;
Dialog dialog;
String key1,schoolId;
public void showDialogAddRoute(Activity activity, final String packageName){
    context=activity;
    dialog = new Dialog(context);

    dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
    dialog.setCancelable(false);
    dialog.setContentView(R.layout.dialog_update);
    am = (ActivityManager)activity.getSystemService(Context.ACTIVITY_SERVICE);

    Button cancelDialogue=(Button)dialog.findViewById(R.id.buttonUpdate);
    Log.i("package name",packageName);
    cancelDialogue.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent=new Intent(Intent.ACTION_VIEW);                
    intent.setData(Uri.parse("https://play.google.com/store/apps/details?
    id="+packageName+"&hl=en"));
            context.startActivity(intent);
        }
    });
    dialog.show();
}
}

대화 레이아웃

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#d4e9f2">


<TextView
    android:layout_width="match_parent"
    android:layout_height="40dp"

    android:text="Please Update First..!!"
    android:textSize="20dp"
    android:textColor="#46a5df"
    android:textAlignment="center"
    android:layout_marginTop="50dp"
    android:id="@+id/textMessage"
    />
<LinearLayout
    android:layout_width="match_parent"
    android:orientation="horizontal"
    android:weightSum="1"
    android:layout_marginTop="50dp"
    android:layout_below="@+id/textMessage"
    android:layout_height="50dp">

    <Button
        android:id="@+id/buttonUpdate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="Update"
        android:background="#67C6F1"
        android:textAlignment="center" />
</LinearLayout>


2

업그레이드를 위해 자체 프로세스를 정의하는 것이 좋습니다.

  1. 서버에서 최신 버전의 앱 (ios, android)을 제공하는 웹 서비스를 만듭니다.
  2. 또는 앱에서 사용한 모든 웹 서비스 (예 : 로그인)는 서버에서 최신 앱 버전을 반환합니다.
  3. 앱이 # 1 또는 2에서 버전을 가져 오면 앱이 로컬 / cuurent 앱 버전과 교차 확인합니다. 차이가 있으면 다음과 같이 경고를 표시 할 수 있습니다.

Android 및 iOS : 최신 앱 버전이있는 경우 "더 많은 기능이있는 최신 버전을 사용할 수 있습니다. 업그레이드하려면 업그레이드 버튼을 클릭하십시오."( "Upgarde"및 "아니요. 감사합니다"버튼으로 알림) 경고가 표시됩니다. 그러면 앱이 다음으로 리디렉션됩니다. playstore / Appstore를 선택하면 최신 버전이 열립니다.

 --- we can do upgrade compulsory or optionally.

업그레이드 프로세스 전에 db 스키마 변경이있는 경우 적절한 db 마이그레이션 프로세스를 처리했는지 확인하십시오.


1

시장에서 업데이트가 가능한 경우 앱 사용자에게 업데이트를 강요하려면 먼저 시장의 앱 버전을 확인하고 기기의 앱 버전과 비교해야합니다. 다른 경우 사용 가능한 업데이트 일 수 있습니다. 이 게시물에서는 장치에서 현재 버전의 시장과 현재 버전을 가져 와서 함께 비교하는 코드를 작성했습니다. 또한 업데이트 대화 상자를 표시하고 사용자를 업데이트 페이지로 리디렉션하는 방법도 보여주었습니다. 다음 링크를 방문하십시오 : https://stackoverflow.com/a/33925032/5475941 대화 상자에서 사용자 업데이트 버튼 만 표시하고 취소 버튼은 표시하지 않는지 확인하세요. 이 경우 앱을 사용하기 전에 업데이트해야합니다.


1

여기서 확실히 언급해야 할 것은 곧 출시 될 인앱 업데이트 API 입니다.

이 API에는 두 가지 옵션이 있습니다. 첫 번째는 업데이트가 즉시 적용될 때까지 사용자가 기다릴 것으로 예상 할 때 중요 업데이트에 대한 전체 화면 환경입니다. 두 번째 옵션은 유연한 업데이트로, 업데이트가 다운로드되는 동안 사용자가 앱을 계속 사용할 수 있습니다. 앱의 일부처럼 느껴지도록 업데이트 흐름을 완전히 사용자 지정할 수 있습니다.



1

Play Core 라이브러리 인앱 업데이트를 사용하여이 문제를 해결할 수 있습니다. 업데이트 가용성을 확인하고 가능한 경우 원활하게 설치할 수 있습니다.

인앱 업데이트는 APK 확장 파일 (.obb 파일)을 사용하는 앱과 호환되지 않습니다. 유연한 다운로드를 받거나 Google Play에서 업데이트를 다운로드하고 설치하는 즉시 업데이트 할 수 있습니다.

dependencies {
    implementation 'com.google.android.play:core:1.5.0'
    ...
}

이 답변을 참조하십시오 https://stackoverflow.com/a/58212818/7579041


0

변수에있는 앱에 유지되는 버전 번호를 일치 시켜서이를 수행 할 수 있으며, 유사하게 현재 앱 버전이 서버 측에 유지되며 사용자가 앱을 열 때마다 첫 번째 요청을 보내어 확인해야합니다. 매칭은 단순히 사용자가 앱을 사용하도록합니다. 그렇지 않으면 Google Playstore에 인 텐트를 실행하거나 앱에 대한 웹뷰 창을 엽니 다 (window.open ( " https://play.google.com/store/apps/details?id= package_name ", '_system', 'location = yes');) 자동 업데이트가 설정되지 않은 경우 Google Playstore가 수행하는 업데이트를 요청하는 버튼이 자동으로 표시됩니다.


0

업데이트 할 수있는 현재 앱의 새 버전이 있음을 사용자에게 알릴 수 있습니다. 또한이 조건이 참이면 앱에서 로그인을 차단할 수 있습니다.

이것이 솔루션을 제공 하는지 확인하십시오 .


0

음, 앱 페이지 (Google Play 앱 페이지)에서 버전 코드를 스크랩하는 등이 문제에 대한 많은 솔루션이있을 수 있습니다.

하지만 저는 한 푼도 들지 않고 마법처럼 작동하는 궁극적 인 솔루션을 보여 드리겠습니다.

  1. Firebase 원격
    구성 패널 에 앱의 최신 버전 코드를 저장하기 만하면 됩니다.
  2. 앱이 열릴 때마다 해당 버전 코드 값을 가져옵니다.
  3. 다음 코드에서 얻을 수있는 앱의 현재 버전 코드와 비교합니다.

    private int getCurrentVersionCode() {
    try {
        return getPackageManager().getPackageInfo(getPackageName(), 0).versionCode;
    } catch (NameNotFoundException e) {
        e.printStackTrace();
    }
    return -1;

    }

가져온 버전 코드가 현재 버전보다 큰 경우 앱 업데이트를 요청하는 AlertDialog를 표시합니다. 그렇지 않으면 앱이 이미 업데이트되었습니다.

따라서 새 버전을 출시 할 때마다 Firebase 원격 구성 패널에 새 버전 코드를 입력해야합니다.

Firebase 원격 구성을 사용하여 사용자가 앱을 업데이트하도록하는 방법대한 전체 가이드를 읽을 수 있습니다.



0

var activeVersion = "3.9.2";

var currentVersion = "3.9.1";

var activeVersionArr = activeVersion.split ( "."); var currentVersionArr = currentVersion.split ( ".");

var compareArray = JSON.stringify (activeVersionArr) == JSON.stringify (currentVersionArr);

if (compareArray) {return false; }

if (! compareArray) {for (var i = 0; i <activeVersionArr.length; i ++) {
if (activeVersionArr [i]! == currentVersionArr [i]) {
if (activeVersionArr [i]> currentVersionArr [i]) { true를 반환하십시오. } else {반환 거짓; }
}}}

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.