Buộc cập nhật ứng dụng Android khi có phiên bản mới


100

Tôi có một ứng dụng trong Cửa hàng Google Play. Khi có phiên bản cập nhật, phiên bản cũ hơn sẽ không sử dụng được - nghĩa là nếu người dùng không cập nhật ứng dụng, họ sẽ không tham gia ứng dụng. Làm cách nào để buộc người dùng cập nhật ứng dụng khi có phiên bản mới?


1
Dự án GitHub mã nguồn mở này (MAHAndroidUpdater) hoàn toàn cung cấp chức năng này. Hãy thử nó, Rất đơn giản. github.com/hummatli/MAHAndroidUpdater
Sattar Hummatli

Câu trả lời:


99

Tôi đồng ý với quan điểm của Scott Helme trong một câu trả lời khác ở đây. Nhưng trong một số tình huống nghiêm trọng (vấn đề bảo mật, thay đổi liên quan đến API ...) khi bạn thực sự cần người dùng cập nhật để tiếp tục sử dụng ứng dụng, bạn có thể cung cấp một API lập phiên bản đơn giản. API sẽ giống như sau:

API versionCheck:

Yêu cầu thông số:

  • int appVersion

Phản ứng

  1. boolean forceUpgrade
  2. boolean recommendUpgrade

Khi ứng dụng của bạn khởi động, bạn có thể gọi API này vượt qua trong phiên bản ứng dụng hiện tại và kiểm tra phản hồi của lệnh gọi API lập phiên bản.

Nếu forceUpgradetrue, hãy hiển thị hộp thoại bật lên với các tùy chọn cho phép người dùng thoát ứng dụng hoặc truy cập Cửa hàng Google Play để nâng cấp ứng dụng.

Nếu recommendUpgradetrue, hãy hiển thị hộp thoại bật lên với các tùy chọn để cập nhật hoặc tiếp tục sử dụng ứng dụng.

Ngay cả với khả năng nâng cấp bắt buộc này, bạn vẫn nên tiếp tục hỗ trợ các phiên bản cũ hơn, trừ khi thực sự cần thiết.


Bạn sẽ hiển thị cửa sổ bật lên mỗi khi ứng dụng khởi động và giới thiệu Nâng cấp có đúng không? (từ quan điểm UX) Hoặc chỉ hiển thị cửa sổ bật lên một lần và không hiển thị lại nếu người dùng từ chối nâng cấp.
Aneesh

8
Đối với nâng cấp được đề xuất, tôi nghĩ bạn không nên hiển thị lại nếu người dùng từ chối. Bạn cũng có thể hiển thị nó "một lần mỗi n lần người dùng mở ứng dụng". Bạn có thể tự mình quyết định giá trị n và thực hiện điều đó.
Michael

3
giải pháp tốt hơn imo là chuyển phiên bản của ứng dụng một cách có hệ thống vào tiêu đề của tất cả các lệnh gọi API và sau đó yêu cầu API trả về mã trạng thái cụ thể nếu phát hiện phiên bản đã lỗi thời. và sau đó xử lý nó bên trong ứng dụng. điều này tốt hơn là phải gọi thêm một API chuyên dụng khác cho việc kiểm tra này và phải tìm ra chính xác thời điểm / vị trí mà lệnh gọi API này nên thực hiện bên trong ứng dụng / dịch vụ.
Raphael C

@RaphaelC Điều này thực sự phụ thuộc vào việc triển khai phía máy chủ của bạn. Nó cũng không hoàn hảo để thêm một bộ lọc kiểm tra phiên bản trên tất cả các API trong một số trường hợp.
tháng 9,

4
@SepGH mọi thứ đã thay đổi kể từ đó và Android hiện cung cấp một API mà bạn có thể sử dụng để buộc người dùng nâng cấp và chặn anh ta tiếp tục sử dụng ứng dụng nếu anh ta không nâng cấp lên phiên bản tối thiểu: developer.android.com/guide/ app-pack / in-app-update
Raphael C

55

hãy thử cách này: Trước tiên, bạn cần thực hiện yêu cầu gọi đến liên kết cửa hàng chơi, tìm nạp phiên bản hiện tại từ đó và sau đó so sánh nó với phiên bản hiện tại của bạn.

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
Tôi đoán điều này sẽ yêu cầu sử dụng để thêm JSoup thư viện bên ngoài?
Abraham Philip

1
Có, nhưng đó sẽ là để lấy trang div html. Tôi muốn nói, rằng bạn có thể không cần phải sử dụng bất kỳ thư viện của bên thứ ba để đạt được chức năng này, nếu bạn có thể cạo rằng yếu tố html mà không JSoup, nó vẫn sẽ làm việc
AshuKingSharma

1
điều gì sẽ xảy ra nếu họ thay đổi giá trị itemprop ??
asok Buzz,

1
Nếu họ thay đổi giá trị itemprop, sau đó nó sẽ ảnh hưởng đến ứng dụng của tôi quá, tôi muốn chỉnh sửa câu trả lời của tôi để hỗ trợ ngay lập tức, vì vậy không lo lắng đến lúc đó :)
AshuKingSharma

Đẹp setCancelable (false)
Kai Wang

46

Bạn không nên ngừng hỗ trợ phiên bản cũ hơn ngay khi có phiên bản mới. Điều này sẽ dẫn đến trải nghiệm người dùng tồi tệ. Tôi không biết có nhà cung cấp phần mềm nào thực hiện điều này, vì lý do chính đáng.

Điều gì xảy ra nếu người dùng không thể cập nhật hoặc không muốn vào thời điểm đó? Đơn giản là họ không thể sử dụng ứng dụng của bạn, điều này thật tệ.

Google không cung cấp bất kỳ tùy chọn nào để theo dõi phiên bản như vậy, vì vậy bạn sẽ phải tự thực hiện. Một dịch vụ web đơn giản để trả về phiên bản trực tiếp hiện tại mà ứng dụng của bạn có thể kiểm tra là đủ. Sau đó, bạn có thể cập nhật phiên bản và ứng dụng sẽ biết nó đã lỗi thời. Tôi chỉ khuyên bạn nên sử dụng tính năng này để cho người dùng của bạn biết có bản cập nhật nhanh hơn thay vì phụ thuộc vào Google Play. Nó không thực sự được sử dụng để ngăn ứng dụng hoạt động, chỉ để nhắc người dùng cập nhật.


2
@ashraful nếu điều này hoặc bất kỳ câu trả lời nào đã giải quyết được câu hỏi của bạn, vui lòng xem xét chấp nhận nó bằng cách nhấp vào dấu kiểm. Điều này cho biết với cộng đồng rộng lớn rằng bạn đã tìm ra giải pháp và mang lại danh tiếng cho cả người trả lời và chính bạn. Không có nghĩa vụ phải làm điều này.
Sufian

Câu trả lời là chủ quan của số lượng nhà cung cấp phần mềm BẠN BIẾT đang tồn tại. Bạn có thể định lượng điều đó không?
Lou Morda

1
Có thể tải phiên bản ứng dụng hiện tại từ cửa hàng ứng dụng hoặc cửa hàng chơi không? hoặc liệu tôi có cần giữ phiên bản ứng dụng mới nhất trong máy chủ của mình không? Bởi vì hiện tại tôi có lệnh gọi dịch vụ trong máy chủ của mình để trả về phiên bản ứng dụng mới nhất, nhưng khó khăn là mỗi lần cần cập nhật máy chủ trong khi xuất bản ứng dụng. Do đó, có thể nhận được số phiên bản hiện tại từ các cửa hàng tương ứng không?
subha

2
Supercell chỉ hỗ trợ phiên bản mới nhất của trò chơi của họ. Sau khi họ đã đẩy phiên bản mới lên Google Play, bất kỳ ứng dụng khách nào cũ hơn đang cố gắng kết nối sẽ nhận được phản hồi "cần cập nhật" từ máy chủ và kết nối bị đóng. Họ làm điều này nhiều lần mỗi năm. Vì vậy, trừ khi bạn không muốn coi một "công ty trò chơi" là "nhà cung cấp phần mềm", thì bây giờ bạn đã biết một điều đó :) Xét rằng họ vẫn kiếm được vài triệu đô la mỗi ngày, rõ ràng trải nghiệm người dùng khủng khiếp này không phải là một điểm dừng chân .
Arjan

@Subha Vâng, điều đó có thể. Nhưng không có API chính thức cho nó, vì vậy bạn cần phải tìm kiếm các trang web. Điều này cũng có nghĩa là nó có thể bị hỏng nếu trang web thay đổi. Tôi đã làm điều đó trong một ứng dụng của bên thứ ba mà tôi đã viết và đăng đoạn mã khá đơn giản làm câu trả lời ở đây . Hiện tại, mã sẽ hoạt động cho cả trang Play và iTunes. Tuy nhiên, trong môi trường sản xuất, có thể tốt hơn là tìm kiếm giải pháp tự động cập nhật phiên bản ứng dụng mới nhất trên máy chủ một cách hợp pháp, thay vì phải dựa vào định dạng của các trang tại Google hoặc Apple?
Arjan

27

Giải pháp từ nhóm Google

Bắt đầu từ Android 5.0, điều này có thể dễ dàng đạt được thông qua cơ chế cập nhật Google Play Trong ứng dụng mới. Yêu cầu là phải có thư viện Play Core phiên bản 1.5.0+ và sử dụng idstribution của App Bundle thay vì apks.

Thư viện cung cấp cho bạn 2 cách khác nhau để thông báo cho người dùng về bản cập nhật:

  1. Linh hoạt, khi người dùng có thể tiếp tục sử dụng ứng dụng trong khi nó đang được cập nhật ở chế độ nền.

  2. Ngay lập tức - màn hình chặn không cho phép người dùng vào ứng dụng cho đến khi họ cập nhật ứng dụng.

Có các bước tiếp theo để thực hiện nó:

  1. Kiểm tra tính khả dụng của bản cập nhật
  2. Bắt đầu cập nhật
  3. Nhận cuộc gọi lại cho trạng thái cập nhật
  4. Xử lý bản cập nhật

Tất cả các bước triển khai này được mô tả chi tiết trên trang web chính thức: https://developer.android.com/guide/app-bundle/in-app-updates


16

Câu trả lời của Scott và Michael là đúng. Lưu trữ một dịch vụ cung cấp số phiên bản tối thiểu mà bạn hỗ trợ và so sánh số đó với phiên bản đã cài đặt. Bạn hy vọng sẽ không bao giờ cần sử dụng cái này, nhưng nó là một phần mềm bảo vệ tính mạng nếu một số phiên bản có sẵn, bạn nhất thiết phải giết do một số lỗi nghiêm trọng.

Tôi chỉ muốn thêm mã để làm gì tiếp theo. Đây là cách bạn khởi chạy Google Play Intent và đưa họ đến phiên bản mới của bạn trong cửa hàng sau khi nhắc người dùng rằng họ phải nâng cấp.

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

            }
        });
    }
}

Bạn nên xem xét lại thiết kế của mình nếu bạn buộc phải nâng cấp trên mỗi bản phát hành.


11

Google đã giới thiệu các bản cập nhật trong ứng dụng lib, ( https://developer.android.com/guide/app-bundle/in-app-updates ) nó hoạt động trên Lollipop + và cung cấp cho bạn khả năng yêu cầu người dùng cập nhật một cách tốt đẹp hộp thoại (LINH HOẠT) hoặc với thông báo bắt buộc toàn màn hình (NGAY LẬP TỨC).

Bạn cần phải thực hiện sau. Đây là cách nó sẽ trông như thế nào: nhập mô tả hình ảnh ở đây

Tôi đã bao gồm tất cả mã trong câu trả lời này: https://stackoverflow.com/a/56808529/5502121


1
Đây là câu trả lời tốt nhất!
fvaldivia,

Tính năng này thực sự dựa vào việc bộ nhớ cache của Play được cập nhật khi người dùng khởi chạy ứng dụng của bạn, tức là Nếu số phiên bản cho ứng dụng của bạn trong bộ nhớ cache không giống với số phiên bản của lần triển khai mới nhất trên Playstore thì nó sẽ không nhắc người dùng ..
kiran01bm

6

Tôi thực sự khuyên bạn nên kiểm tra chức năng Cấu hình từ xa của Firebase cho điều này.

Tôi đã triển khai nó bằng cách sử dụng một tham số - app_version_enabled - với điều kiện "Phiên bản Android bị vô hiệu hóa" trông giống như sau:

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

Mặc định cho tham số là "true", nhưng các Phiên bản Android bị Vô hiệu hóa có giá trị là false. Trong regex của tôi dành cho Phiên bản Android bị Vô hiệu hóa, bạn có thể thêm các phiên bản bị vô hiệu hóa khác chỉ bằng một phiên bản khác |{version name}bên trong các dấu ngoặc đơn đó.

Sau đó, tôi chỉ kiểm tra xem cấu hình cho biết phiên bản đã được bật hay chưa - Tôi có một hoạt động mà tôi khởi chạy buộc người dùng phải nâng cấp. Tôi kiểm tra hai nơi duy nhất có thể khởi chạy ứng dụng từ bên ngoài (hoạt động trình khởi chạy mặc định của tôi và hoạt động xử lý ý định). Vì Cấu hình từ xa hoạt động trên cơ sở bộ nhớ cache, nên nó sẽ không bắt ngay các phiên bản "bị vô hiệu hóa" của ứng dụng nếu chưa qua thời gian cần thiết để bộ nhớ cache bị vô hiệu, nhưng đó là tối đa 12 giờ nếu bạn đang sử dụng giá trị hết hạn bộ nhớ cache được đề xuất của họ.


Đây là một lựa chọn rất tốt. Bằng cách chỉ định một tập hợp con các phiên bản "bị vô hiệu hóa", bạn có thể nhanh chóng tự bảo vệ mình, nếu ứng dụng có vấn đề về bảo mật hoặc vấn đề hiệu suất lớn. Nó cho phép bạn tiếp tục hỗ trợ mọi phiên bản nhưng cấm phiên bản cụ thể khi có nhu cầu.
Terry

6

Chính thức google cung cấp một API Android cho việc này.

API hiện đang được thử nghiệm với một số đối tác và sẽ sớm có sẵn cho tất cả các nhà phát triển.

API cập nhật hiện có sẵn - https://developer.android.com/guide/app-bundle/in-app-updates



1
Api này hiện có sẵn không?
Yayayaya


Tính năng này thực sự dựa vào việc bộ nhớ cache của Play được cập nhật khi người dùng khởi chạy ứng dụng của bạn, tức là Nếu số phiên bản cho ứng dụng của bạn trong bộ nhớ cache không giống với số phiên bản của lần triển khai mới nhất trên Playstore thì nó sẽ không nhắc người dùng ..
kiran01bm

3

kiểm tra mã phiên bản của apk local và 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();
    }

triển khai lớp để kiểm tra phiên bản

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

hộp dialob để cập nhật

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

bố cục hộp thoại

<?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

Tốt hơn là xác định quy trình của riêng chúng tôi để nâng cấp.

  1. Tạo một dịch vụ web cung cấp phiên bản mới nhất cho ứng dụng (ios, android) từ máy chủ của chúng tôi.
  2. Hoặc Bất kỳ dịch vụ web nào bạn đã sử dụng trong ứng dụng (ví dụ: Đăng nhập) sẽ trả về phiên bản ứng dụng mới nhất từ ​​máy chủ.
  3. Sau khi ứng dụng sẽ nhận được phiên bản từ # 1 hoặc 2. Ứng dụng sẽ kiểm tra chéo nó với ứng dụng cục bộ / cuurent. nếu có sự khác biệt thì chúng tôi có thể hiển thị cảnh báo như sau,

Android & iOS: Nếu có phiên bản ứng dụng mới nhất thì nó sẽ hiển thị cảnh báo là “Có phiên bản mới nhất với nhiều tính năng hơn, Để nâng cấp, hãy nhấp vào nút nâng cấp” (Cảnh báo bằng nút “Upgarde” và “Không. Cảm ơn”.) Sau đó, ứng dụng sẽ chuyển hướng đến playstore / Appstore và nó sẽ mở phiên bản mới nhất.

 --- we can do upgrade compulsory or optionally.

Trước quá trình Nâng cấp, vui lòng đảm bảo rằng bạn đã xử lý quy trình di chuyển db thích hợp nếu có bất kỳ thay đổi giản đồ db nào.


1

Để buộc người dùng ứng dụng cập nhật nếu có bản cập nhật trên thị trường, trước tiên bạn nên kiểm tra phiên bản ứng dụng trên thị trường và so sánh với phiên bản của ứng dụng trên thiết bị. Nếu chúng khác nhau, nó có thể là một bản cập nhật có sẵn. Trong bài đăng này, tôi đã viết ra mã để lấy phiên bản thị trường và phiên bản hiện tại trên thiết bị và so sánh chúng với nhau. Tôi cũng đã hướng dẫn cách hiển thị hộp thoại cập nhật và chuyển hướng người dùng đến trang cập nhật. Vui lòng truy cập liên kết này: https://stackoverflow.com/a/33925032/5475941 Chỉ cần đảm bảo rằng trong hộp thoại bạn chỉ hiển thị nút cập nhật người dùng và không hiển thị cho anh ta nút hủy. Trong trường hợp này, anh ấy sẽ buộc phải cập nhật trước khi có thể sử dụng ứng dụng.


1

Điều chắc chắn cần được đề cập ở đây là API cập nhật trong ứng dụng sắp được phát hành .

Bạn sẽ có hai tùy chọn với API này; đầu tiên là trải nghiệm toàn màn hình cho các bản cập nhật quan trọng khi bạn mong đợi người dùng đợi bản cập nhật được áp dụng ngay lập tức. Tùy chọn thứ hai là cập nhật linh hoạt, có nghĩa là người dùng có thể tiếp tục sử dụng ứng dụng trong khi tải xuống bản cập nhật. Bạn hoàn toàn có thể tùy chỉnh quy trình cập nhật để nó giống như một phần của ứng dụng của bạn.


1

Bạn nên sử dụng cấu hình từ xa cho phiên bản ứng dụng và luôn kiểm tra hoạt động khởi chạy xem phiên bản ứng dụng hiện tại có giống phiên bản từ xa hay không nếu không buộc phải cập nhật từ cửa hàng ứng dụng ..

Logic đơn giản mã hóa hạnh phúc ..

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


1

Bạn có thể sử dụng các bản cập nhật trong ứng dụng Thư viện Play Core để giải quyết vấn đề này. Bạn có thể kiểm tra tính khả dụng của bản cập nhật và cài đặt chúng nếu có sẵn liên tục.

Các bản cập nhật trong ứng dụng không tương thích với các ứng dụng sử dụng tệp mở rộng APK (tệp .obb). Bạn có thể tải xuống linh hoạt hoặc cập nhật ngay lập tức mà Google Play đảm nhận việc tải xuống và cài đặt bản cập nhật cho bạn.

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

Tham khảo câu trả lời này https://stackoverflow.com/a/58212818/7579041


0

bạn có thể thực hiện việc này bằng cách so khớp giữa số phiên bản được giữ trên ứng dụng trong một biến và tương tự như vậy, phiên bản ứng dụng hiện tại được giữ ở phía máy chủ và mỗi khi người dùng mở ứng dụng, yêu cầu đầu tiên phải được gửi để kiểm tra xem nó có thành công không đối sánh không làm gì chỉ đơn giản là cho phép người dùng sử dụng ứng dụng của bạn, nếu không, kích hoạt một ý định đến google playstore hoặc mở cửa sổ webview cho ứng dụng của bạn (window.open (" https://play.google.com/store/apps/details?id= package_name ", '_system', 'location = yes');) và ở đó họ sẽ tự động có nút yêu cầu cập nhật, đó là những gì google playstore làm cho bạn nếu bạn không có cập nhật tự động.


0

Bạn có thể thông báo cho người dùng của mình rằng có một phiên bản mới của ứng dụng hiện tại để cập nhật. Ngoài ra, nếu điều kiện này là đúng, bạn có thể chặn đăng nhập trong ứng dụng.

Vui lòng xem nếu điều này cung cấp cho bạn giải pháp.


0

Chà, có thể có nhiều giải pháp cho vấn đề này như cạo mã phiên bản từ Trang ứng dụng (Trang ứng dụng Google Play), v.v.

Nhưng tôi sẽ chỉ cho bạn giải pháp tối ưu không tốn một xu và sẽ hoạt động như một phép thuật.

  1. Chỉ cần lưu mã phiên bản mới nhất của ứng dụng của bạn trên
    bảng điều khiển Cấu hình từ xa của Firebase
  2. Tìm nạp giá trị mã phiên bản đó bất cứ khi nào ứng dụng được mở
  3. So sánh nó với mã phiên bản hiện tại của ứng dụng, bạn có thể lấy mã này bằng mã sau

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

    }

Nếu mã phiên bản đã tìm nạp lớn hơn phiên bản hiện tại, hãy hiển thị AlertDialog yêu cầu cập nhật ứng dụng. Nếu không, ứng dụng đã được cập nhật.

Vì vậy, bất cứ khi nào bạn triển khai phiên bản mới, bạn cần đặt mã phiên bản mới đó vào bảng cấu hình Firebase Remote

Bạn có thể đọc toàn bộ hướng dẫn về cách buộc người dùng cập nhật ứng dụng bằng Firebase Remote Config


0

Google đã phát hành Bản cập nhật trong ứng dụng cho thư viện Play Core.

Tôi đã triển khai một thư viện nhẹ để dễ dàng triển khai các bản cập nhật trong ứng dụng. Bạn có thể tìm đến liên kết sau một ví dụ về cách buộc người dùng thực hiện cập nhật.

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.