บังคับให้อัปเดตแอป Android เมื่อมีเวอร์ชันใหม่


104

ฉันมีแอปใน Google Play Store เมื่อมีเวอร์ชันอัปเดตเวอร์ชันเก่าจะใช้ไม่ได้นั่นคือหากผู้ใช้ไม่อัปเดตแอปผู้ใช้จะไม่เข้าสู่แอป ฉันจะบังคับให้ผู้ใช้อัปเดตแอปเมื่อเวอร์ชันใหม่พร้อมใช้งานได้อย่างไร


1
โครงการ GitHub แบบโอเพนซอร์ส (MAHAndroidUpdater) นี้มีฟังก์ชันนี้อย่างสมบูรณ์ ลองมันง่ายมาก github.com/hummatli/MAHAndroidUpdater
Sattar Hummatli

คำตอบ:


103

ฉันเห็นด้วยกับประเด็นของ Scott Helme ในคำตอบอื่นที่นี่ แต่ในสถานการณ์ที่รุนแรงบางอย่าง (ปัญหาด้านความปลอดภัยการเปลี่ยนแปลงการทำลาย API ... ) ที่คุณต้องการให้ผู้ใช้อัปเดตเพื่อใช้งานแอปต่อไปคุณสามารถจัดเตรียม API การกำหนดเวอร์ชันที่เรียบง่าย API จะมีลักษณะดังนี้:

versionCheck API:

ขอพารามิเตอร์:

  • int appVersion

การตอบสนอง

  1. boolean forceUpgrade
  2. boolean recommendUpgrade

เมื่อแอปของคุณเริ่มต้นคุณสามารถเรียก API นี้ที่ส่งผ่านในเวอร์ชันปัจจุบันของแอปและตรวจสอบการตอบสนองของการเรียก API การกำหนดเวอร์ชัน

หากforceUpgradeมีtrueให้แสดงกล่องโต้ตอบป๊อปอัปพร้อมตัวเลือกเพื่อให้ผู้ใช้ออกจากแอปหรือไปที่ Google Play Store เพื่ออัปเกรดแอป

หากrecommendUpgradeเป็นtrueเช่นนั้นให้แสดงกล่องโต้ตอบป๊อปอัปพร้อมตัวเลือกในการอัปเดตหรือใช้แอปต่อไป

แม้ว่าจะมีความสามารถในการอัปเกรดแบบบังคับนี้คุณควรสนับสนุนเวอร์ชันเก่าต่อไปเว้นแต่จำเป็นจริงๆ


คุณจะแสดงป๊อปอัปทุกครั้งที่แอปเริ่มทำงานและแนะนำอัปเกรดเป็นจริงหรือไม่ (จากมุมมอง UX) หรือแสดงป๊อปอัปเพียงครั้งเดียวและไม่แสดงอีกหากผู้ใช้ปฏิเสธที่จะอัปเกรด
Aneesh

8
สำหรับการอัปเกรดที่แนะนำฉันคิดว่าคุณไม่ควรแสดงอีกครั้งหากผู้ใช้ปฏิเสธ คุณยังสามารถแสดง "ทุกๆ n ครั้งที่ผู้ใช้เปิดแอป" คุณสามารถตัดสินใจค่า n ด้วยตัวคุณเองและนำไปใช้
Michael

4
วิธีแก้ปัญหาที่ดีกว่าคือการส่งผ่านเวอร์ชันของแอปอย่างเป็นระบบในส่วนหัวของการเรียก API ทั้งหมดจากนั้นให้ API ส่งคืนรหัสสถานะเฉพาะหากตรวจพบว่าเวอร์ชันล้าสมัย แล้วจัดการภายในแอพ ดีกว่าการเรียกใช้ API เฉพาะอื่นสำหรับการตรวจสอบนี้และต้องหาว่าเมื่อใด / ที่การเรียก API นี้ควรทำภายในแอป / บริการ
Raphael C

@RaphaelC สิ่งนี้ขึ้นอยู่กับการใช้งานฝั่งเซิร์ฟเวอร์ของคุณ นอกจากนี้ยังไม่เหมาะที่จะเพิ่มตัวกรองที่ตรวจสอบเวอร์ชันของ API ทั้งหมดในบางสถานการณ์
ก.ย. GH

5
@SepGH มีการเปลี่ยนแปลงตั้งแต่นั้นเป็นต้นมาและตอนนี้ Android มี API ที่คุณสามารถใช้บังคับให้ผู้ใช้อัปเกรดและบล็อกไม่ให้เขาใช้แอปต่อไปหากเขาไม่อัปเกรดเป็นเวอร์ชันขั้นต่ำ: developer.android.com/guide/ app-bundle / in-app-updates
Raphael 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 ฉันตั้งใจจะบอกว่าคุณอาจไม่จำเป็นต้องใช้ไลบรารีของบุคคลที่สามเพื่อให้สามารถใช้งานฟังก์ชันนี้ได้หากคุณสามารถขูดองค์ประกอบ html นั้นโดยไม่ใช้ JSoup มันก็ยังคงใช้งานได้
AshuKingSharma

1
ถ้าเปลี่ยนค่า itemprop ล่ะ ??
asok Buzz

1
หากพวกเขาเปลี่ยนค่า itemprop มันจะส่งผลกระทบต่อแอปของฉันด้วยฉันจะแก้ไขคำตอบเพื่อรองรับสิ่งนั้นทันทีดังนั้นไม่ต้องกังวลไปก่อน :)
AshuKingSharma

Nice setCancelable (false)
Kai Wang

48

คุณไม่ควรหยุดสนับสนุนเวอร์ชันเก่าทันทีที่เวอร์ชันใหม่ออกมา ซึ่งจะส่งผลให้เกิดประสบการณ์การใช้งานที่แย่มาก ฉันไม่ทราบว่ามีผู้จำหน่ายซอฟต์แวร์รายใดที่ทำเช่นนี้ด้วยเหตุผลที่ดี

จะเกิดอะไรขึ้นหากผู้ใช้ไม่สามารถอัปเดตหรือไม่ต้องการในเวลานั้น? พวกเขาไม่สามารถใช้แอปของคุณได้ซึ่งไม่ดี

Google ไม่มีตัวเลือกใด ๆ สำหรับการติดตามเวอร์ชันเช่นนั้นดังนั้นคุณจะต้องดำเนินการเอง บริการเว็บที่เรียบง่ายเพื่อส่งคืนเวอร์ชันปัจจุบันที่แอปของคุณตรวจสอบได้นั้นเพียงพอแล้ว จากนั้นคุณสามารถอัปเดตเวอร์ชันและแอปจะทราบว่าล้าสมัย ฉันขอแนะนำให้ใช้สิ่งนี้เพื่อแจ้งให้ผู้ใช้ของคุณทราบว่ามีการอัปเดตเร็วกว่าขึ้นอยู่กับ Google Play ไม่ควรใช้เพื่อป้องกันไม่ให้แอปทำงานเพียงเพื่อแจ้งให้ผู้ใช้อัปเดต


2
@ashraful หากคำตอบนี้หรือคำตอบใด ๆ สามารถแก้ไขคำถามของคุณได้โปรดพิจารณายอมรับโดยคลิกที่เครื่องหมายถูก สิ่งนี้บ่งบอกต่อชุมชนในวงกว้างว่าคุณได้พบวิธีแก้ปัญหาและสร้างชื่อเสียงให้กับทั้งผู้ตอบและตัวคุณเอง ไม่มีข้อผูกมัดในการทำเช่นนี้
Sufian

คำตอบคือขึ้นอยู่กับจำนวนผู้จำหน่ายซอฟต์แวร์ที่คุณทราบว่ามีอยู่ คุณสามารถหาปริมาณได้หรือไม่?
Lou Morda

1
เป็นไปได้ไหมที่จะรับแอพเวอร์ชันปัจจุบันจาก app store หรือ play store หรือว่าฉันต้องเก็บแอพเวอร์ชันล่าสุดไว้ในเซิร์ฟเวอร์ของฉัน? เนื่องจากตอนนี้ฉันมี service call ในเซิร์ฟเวอร์ของฉันเพื่อส่งคืนแอพเวอร์ชันล่าสุด แต่ความยากคือแต่ละครั้งที่ต้องอัปเดตเซิร์ฟเวอร์ในขณะที่เผยแพร่แอป ดังนั้นจึงสามารถรับหมายเลขเวอร์ชันปัจจุบันจากร้านค้าที่เกี่ยวข้องได้หรือไม่?
subha

2
Supercell รองรับเฉพาะเกมเวอร์ชันล่าสุดเท่านั้น หลังจากที่พวกเขาส่งเวอร์ชันใหม่ไปยัง Google Play ไคลเอ็นต์รุ่นเก่าที่พยายามเชื่อมต่อจะได้รับการตอบกลับ "จำเป็นต้องอัปเดต" จากเซิร์ฟเวอร์และเห็นว่าการเชื่อมต่อถูกปิด พวกเขาทำหลายครั้งทุกปี ดังนั้นถ้าคุณไม่ต้องการนับ "บริษัท เกม" เป็น "ผู้จำหน่ายซอฟต์แวร์" ตอนนี้คุณก็รู้แล้ว :) เมื่อพิจารณาว่าพวกเขายังคงทำเงินได้สองสามล้านดอลลาร์ทุกวันเห็นได้ชัดว่าประสบการณ์การใช้งานที่แย่มากนี้ไม่ใช่สิ่งขัดขวางการแสดง .
Arjan

@ คุณสุภาใช่เป็นไปได้ แต่ไม่มี API อย่างเป็นทางการสำหรับมันดังนั้นคุณต้องขูดหน้าเว็บ ซึ่งหมายความว่าอาจพังได้หากหน้าเว็บเปลี่ยนไป ฉันไม่ได้ในแอพพลิเคบุคคลที่สามที่ผมเขียนและโพสต์รหัสค่อนข้างง่ายเป็นคำตอบที่นี่ ขณะนี้รหัสจะใช้ได้กับทั้งหน้า Play และ iTunes ในสภาพแวดล้อมการใช้งานจริงอาจเป็นการดีกว่าที่จะมองหาโซลูชันที่อัปเดตแอปเวอร์ชันล่าสุดบนเซิร์ฟเวอร์โดยอัตโนมัติแทนที่จะต้องพึ่งพารูปแบบของหน้าเว็บที่ Google หรือ Apple
Arjan

28

โซลูชันจากทีม Google

เริ่มจาก Android 5.0 ที่ทำได้อย่างง่ายดายผ่านกลไกการอัปเดต Google Play In App ใหม่ ข้อกำหนดคือต้องมีไลบรารี Play Core เวอร์ชัน 1.5.0+ และใช้ App Bundles idstribution แทน apks

ไลบรารีมี 2 วิธีในการแจ้งผู้ใช้เกี่ยวกับการอัปเดต:

  1. มีความยืดหยุ่นเมื่อผู้ใช้สามารถใช้แอปต่อไปได้ในขณะที่กำลังอัปเดตอยู่เบื้องหลัง

  2. หน้าจอปิดกั้นทันทีที่ไม่อนุญาตให้ผู้ใช้เข้าสู่แอพจนกว่าพวกเขาจะอัปเดต

มีขั้นตอนต่อไปในการใช้งาน:

  1. ตรวจสอบความพร้อมในการอัปเดต
  2. เริ่มการอัปเดต
  3. รับการติดต่อกลับสำหรับสถานะการอัปเดต
  4. จัดการการอัปเดต

ขั้นตอนการใช้งานทั้งหมดเหล่านี้มีรายละเอียดอธิบายไว้ในเว็บไซต์อย่างเป็นทางการ: https://developer.android.com/guide/app-bundle/in-app-updates


16

คำตอบของสก็อตและไมเคิลถูกต้อง โฮสต์บริการที่ระบุหมายเลขเวอร์ชันขั้นต่ำที่คุณรองรับและเปรียบเทียบกับเวอร์ชันที่ติดตั้ง หวังว่าคุณจะไม่จำเป็นต้องใช้สิ่งนี้ แต่มันช่วยชีวิตได้หากมีบางเวอร์ชันออกมาคุณต้องฆ่าอย่างแน่นอนเนื่องจากข้อบกพร่องร้ายแรงบางอย่าง

ฉันแค่ต้องการเพิ่มโค้ดสำหรับสิ่งที่ต้องทำต่อไป ต่อไปนี้คือวิธีที่คุณเปิดใช้งาน Google Play Intent และนำไปยังเวอร์ชันใหม่ของคุณในสโตร์หลังจากแจ้งให้ผู้ใช้ทราบว่าต้องอัปเกรด

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)));

            }
        });
    }
}

คุณควรพิจารณาการออกแบบของคุณอีกครั้งหากคุณต้องบังคับให้อัปเกรดในแต่ละรุ่น


15

Google เปิดตัวการอัปเดตในแอป lib ( https://developer.android.com/guide/app-bundle/in-app-updates ) มันทำงานบน Lollipop + และช่วยให้คุณสามารถขอให้ผู้ใช้อัปเดตด้วยสิ่งดีๆ ไดอะล็อก (FLEXIBLE) หรือด้วยข้อความบังคับแบบเต็มหน้าจอ (ทันที)

คุณต้องดำเนินการอย่างหลัง ลักษณะจะเป็นดังนี้: ป้อนคำอธิบายภาพที่นี่

ฉันครอบคลุมรหัสทั้งหมดในคำตอบนี้: https://stackoverflow.com/a/56808529/5502121


1
นี่คือคำตอบที่ดีที่สุด!
fvaldivia

คุณลักษณะนี้อาศัยแคชของ Play ที่อัปเดตเมื่อผู้ใช้เปิดแอปของคุณเช่นหากหมายเลขเวอร์ชันสำหรับแอปของคุณในแคชไม่ตรงกับหมายเลขเวอร์ชันของการปรับใช้ล่าสุดของคุณบน Playstore จะไม่แจ้งให้ผู้ใช้ ..
kiran01bm

7

Google อย่างเป็นทางการมี Android API สำหรับสิ่งนี้

ขณะนี้ API อยู่ระหว่างการทดสอบกับพันธมิตรจำนวนหนึ่งและจะพร้อมใช้งานสำหรับนักพัฒนาทุกคนในเร็ว ๆ นี้

อัปเดต API พร้อมใช้งานแล้ว - https://developer.android.com/guide/app-bundle/in-app-updates


2
ดูเพิ่มเติมที่: android-developers.googleblog.com/2018/11/…
albert c braun

1
ตอนนี้ api ใช้ได้หรือยัง
Yayayaya

ฉัน Google และพบผู้พัฒนา
Chulo

คุณลักษณะนี้อาศัยแคชของ Play ที่อัปเดตเมื่อผู้ใช้เปิดแอปของคุณเช่นหากหมายเลขเวอร์ชันสำหรับแอปของคุณในแคชไม่ตรงกับหมายเลขเวอร์ชันของการปรับใช้ล่าสุดของคุณบน Playstore จะไม่แจ้งให้ผู้ใช้ ..
kiran01bm

6

ขอแนะนำให้ตรวจสอบฟังก์ชันการกำหนดค่าระยะไกลของ Firebaseสำหรับสิ่งนี้

ฉันติดตั้งโดยใช้พารามิเตอร์ - app_version_enabled - โดยมีเงื่อนไข "Disabled Android Versions" ที่มีลักษณะดังนี้:

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

ค่าเริ่มต้นสำหรับพารามิเตอร์คือ "จริง" แต่เวอร์ชัน Android ที่ปิดใช้งานมีค่าเป็นเท็จ ใน regex ของฉันสำหรับเวอร์ชัน Android ที่ปิดใช้งานคุณสามารถเพิ่มเวอร์ชันที่ปิดใช้งานเพิ่มเติมได้โดยใช้อีกเวอร์ชันหนึ่ง|{version name}ภายในวงเล็บเหล่านั้น

จากนั้นฉันก็ตรวจสอบว่าการกำหนดค่าระบุว่าเวอร์ชันเปิดใช้งานอยู่หรือไม่ - ฉันมีกิจกรรมที่ฉันเปิดตัวซึ่งบังคับให้ผู้ใช้อัปเกรด ฉันเช็คอินเพียงสองแห่งที่แอปสามารถเปิดใช้งานได้จากภายนอก (กิจกรรมตัวเรียกใช้งานเริ่มต้นของฉันและกิจกรรมการจัดการตามเจตนา) เนื่องจากการกำหนดค่าระยะไกลทำงานบนพื้นฐานแคชจึงจะไม่จับแอปเวอร์ชัน "ปิดใช้งาน" ในทันทีหากไม่ผ่านเวลาที่จำเป็นเพื่อให้แคชเป็นโมฆะ แต่จะใช้เวลาไม่เกิน 12 ชั่วโมงหากคุณไป ค่าการหมดอายุแคชที่แนะนำ


นี่เป็นตัวเลือกที่ดีมาก การระบุเวอร์ชัน "ปิดใช้งาน" ส่วนย่อยจะทำให้คุณสามารถป้องกันตัวเองได้อย่างรวดเร็วหากแอปมีปัญหาด้านความปลอดภัยหรือปัญหาด้านประสิทธิภาพที่สำคัญ ช่วยให้คุณสามารถสนับสนุนทุกเวอร์ชันต่อไป แต่ห้ามบางเวอร์ชันเมื่อมีความต้องการ
Terry

3

ตรวจสอบรหัสเวอร์ชันของ apk ในเครื่องและ play store

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


1

ในการบังคับให้ผู้ใช้แอปอัปเดตหากมีการอัปเดตในตลาดก่อนอื่นคุณควรตรวจสอบเวอร์ชันของแอปในตลาดและเปรียบเทียบกับเวอร์ชันของแอปบนอุปกรณ์ หากแตกต่างกันอาจเป็นการอัปเดตที่พร้อมใช้งาน ในโพสต์นี้ฉันได้เขียนโค้ดสำหรับการรับเวอร์ชันปัจจุบันของตลาดและเวอร์ชันปัจจุบันบนอุปกรณ์และเปรียบเทียบเข้าด้วยกัน ฉันยังแสดงวิธีแสดงกล่องโต้ตอบการอัปเดตและเปลี่ยนเส้นทางผู้ใช้ไปยังหน้าอัปเดต โปรดไปที่ลิงค์นี้: https://stackoverflow.com/a/33925032/5475941ตรวจสอบให้แน่ใจว่าในกล่องโต้ตอบคุณจะแสดงปุ่มอัปเดตผู้ใช้เท่านั้นและไม่แสดงปุ่มยกเลิกให้เขาเห็น ในกรณีนี้เขาจะถูกบังคับให้อัปเดตก่อนที่จะสามารถใช้แอปได้


1

สิ่งที่แน่นอนควรจะได้รับการกล่าวถึงที่นี่เป็นเร็ว ๆ นี้เพื่อได้รับการปล่อยตัวในแอปพลิอัพเดท API

คุณมีสองตัวเลือกสำหรับ API นี้ ประการแรกคือประสบการณ์แบบเต็มหน้าจอสำหรับการอัปเดตที่สำคัญเมื่อคุณคาดว่าผู้ใช้จะต้องรอให้การอัปเดตใช้งานได้ทันที ตัวเลือกที่สองคือการอัปเดตที่ยืดหยุ่นซึ่งหมายความว่าผู้ใช้สามารถใช้แอปต่อไปได้ในขณะที่ดาวน์โหลดอัปเดต คุณสามารถปรับแต่งขั้นตอนการอัปเดตได้ทั้งหมดเพื่อให้รู้สึกเหมือนเป็นส่วนหนึ่งของแอปของคุณ


1

เป็นความคิดที่ดีที่จะใช้การกำหนดค่าระยะไกลสำหรับเวอร์ชันของแอปและการตรวจสอบในกิจกรรมการเปิดตัวเสมอคือเวอร์ชันของแอปปัจจุบันจะเหมือนกับเวอร์ชันระยะไกลหรือไม่หากไม่บังคับให้อัปเดตจากร้านแอป ..

ตรรกะง่ายๆ happy coding ..

https://firebase.google.com/docs/remote-config/android


1

คุณสามารถใช้การอัปเดตในแอป Play Core Library เพื่อแก้ไขปัญหานี้ คุณสามารถตรวจสอบความพร้อมในการอัปเดตและติดตั้งได้หากมีอย่างราบรื่น

การอัปเดตในแอปเข้ากันไม่ได้กับแอปที่ใช้ไฟล์สำหรับขยาย 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 Remote
    แผง Config
  2. ดึงค่ารหัสเวอร์ชันนั้นทุกครั้งที่เปิดแอป
  3. เปรียบเทียบกับรหัสเวอร์ชันปัจจุบันของแอปซึ่งคุณจะได้รับโดยใช้รหัสต่อไปนี้

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

    }

หากรหัสเวอร์ชันที่ดึงมามีค่ามากกว่าเวอร์ชันปัจจุบันให้แสดง AlertDialog เพื่อขอให้อัปเดตแอป มิฉะนั้นแอปจะอัปเดตแล้ว

ดังนั้นเมื่อใดก็ตามที่คุณเปิดตัวเวอร์ชันใหม่คุณจะต้องใส่รหัสเวอร์ชันใหม่นั้นในแผงการกำหนดค่า Firebase Remote

คุณสามารถอ่านบทแนะนำทั้งหมดเกี่ยวกับวิธีบังคับให้ผู้ใช้อัปเดตแอปโดยใช้ Firebase Remote Config


0

Google เปิดตัว In-App Updates สำหรับไลบรารี Play Core

ฉันใช้ไลบรารีที่มีน้ำหนักเบาเพื่อใช้อัปเดตในแอปได้อย่างง่ายดาย คุณสามารถค้นหาลิงก์ต่อไปนี้เป็นตัวอย่างเกี่ยวกับวิธีบังคับให้ผู้ใช้ทำการอัปเดต

https://github.com/dnKaratzas/android-inapp-update#forced-updates


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);

ถ้า (CompareArray) {กลับเท็จ; }

if (! CompareArray) {สำหรับ (var i = 0; i <activeVersionArr.length; i ++) {
if (activeVersionArr [i]! == currentVersionArr [i]) {
if (activeVersionArr [i]> currentVersionArr [i]) { กลับจริง; } else {กลับเท็จ; }
}}}

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.