Khi bạn tung ra một phiên bản mới của ứng dụng, bạn muốn người dùng biết về nó. Cho dù bạn đã sửa một lỗi nghiêm trọng, thêm tính năng mới hay ứng dụng chạy mượt hơn hoặc nhanh hơn – họ đều cần biết.
Với tư cách là nhà phát triển ứng dụng, chúng tôi muốn tất cả người dùng sử dụng phiên bản ứng dụng mới nhất của chúng tôi.
Nhưng làm cách nào chúng tôi có thể đảm bảo rằng người dùng biết về phiên bản mới của ứng dụng của chúng tôi?
Câu trả lời cho câu hỏi đó khá đơn giản:Tại sao không thông báo cho họ khi có phiên bản mới của ứng dụng?
Bạn có thể thực hiện việc này theo nhiều cách khác nhau:
- Sử dụng thông báo đẩy
- Hãy cho họ biết khi ứng dụng được khởi chạy
Chúng tôi sẽ không xử lý thông báo đẩy trong bài viết này. Thay vào đó, chúng tôi sẽ tập trung vào cách bạn có thể (sử dụng một hoặc hai gói) hiển thị hộp thoại cho người dùng để thông báo cho họ rằng đã có phiên bản mới của ứng dụng và cách xử lý bản cập nhật.
Đợi đã, cái này đã được bao gồm chưa?
Bạn có thể nghĩ rằng loại chức năng này nên được đưa vào hệ điều hành di động hiện đại. Và bạn sẽ đúng – nhưng chỉ dành cho Android.
iOS không (hiện tại) cung cấp cho các nhà phát triển khả năng xem liệu có phiên bản mới của ứng dụng hay không và thông báo cho người dùng về nó. Trong Android, bạn có thư viện Cập nhật trong ứng dụng, là một phần của thư viện Google Play.
Vì lý do này và vì Flutter hỗ trợ cả hai nền tảng nên tôi sẽ giới thiệu hai gói nổi bật giúp bạn xử lý các bản cập nhật phiên bản cho ứng dụng của mình:
- Trình nâng cấp
- Trong bản cập nhật ứng dụng
Cả hai đều có thể mang lại cho bạn kết quả như mong muốn nhưng chúng rất khác nhau về cách thực hiện.
Trước khi chúng ta bắt đầu, điều quan trọng là phải hiểu rằng bạn phải có phiên bản ứng dụng được cài đặt trực tiếp từ cửa hàng Google Play . Điều này là bắt buộc vì cả hai gói đều dựa vào dịch vụ Google Play và khả năng xác minh chủ sở hữu ứng dụng.
Nếu không thực hiện được, bạn sẽ gặp lỗi sau khi thử sử dụng một trong các gói:
_Lỗi cài đặt (-10):Ứng dụng không thuộc quyền sở hữu của bất kỳ người dùng nào trên thiết bị này. Một ứng dụng được "sở hữu" nếu nó được mua từ Play. (https://developer.android.com/reference/com/google/android/play/core/install/model/InstallErrorCode#ERROR_APP_NOTSỞ HỮU)
Cách sử dụng Gói cập nhật trong ứng dụng
Ngay lập tức bạn nên biết rằng gói này sẽ chỉ hoạt động trên Android. Điều này là do nó dựa vào thư viện cập nhật trong ứng dụng để hoạt động bên trong.
Gói này về cơ bản là một trình bao bọc cho thư viện Android. Dưới đây là các phương thức API được hiển thị:
Future<AppUpdateInfo> checkForUpdate():Kiểm tra xem có bản cập nhật nào khôngFuture<AppUpdateResult> performImmediateUpdate():Thực hiện cập nhật ngay lập tức (toàn màn hình)Future<AppUpdateResult> startFlexibleUpdate():Bắt đầu cập nhật linh hoạt (tải xuống nền)Future<void> completeFlexibleUpdate():Trên thực tế cài đặt một bản cập nhật linh hoạt có sẵn
✋ Nếu bạn muốn đọc thêm về sự khác biệt giữa bản cập nhật ngay lập tức và bản cập nhật linh hoạt, hãy truy cập vào đây.
Cách thiết lập gói
Đầu tiên, thêm gói vào tệp pubspec.yaml của bạn:
dependencies:
flutter:
sdk: flutter
in_app_update: ^3.0.0
Sau đó thực hiện pub get.
Bên trong ứng dụng của bạn, nơi bạn dự định thực hiện logic để xử lý các bản cập nhật ứng dụng, hãy thêm nội dung nhập sau:
import 'package:in_app_update/in_app_update.dart';
Trước tiên chúng ta sẽ cần thêm logic để kiểm tra xem ứng dụng của chúng ta có bản cập nhật hay không. Để làm điều đó, chúng tôi sẽ sử dụng checkForUpdate phương pháp. Giá trị trả về của nó là Tương lai chứa thông tin về tính khả dụng và tiến trình cập nhật ứng dụng.
Chúng ta có thể kiểm tra xem có bản cập nhật hay không bằng cách sử dụng thuộc tính updateAvailability. Nếu có bản cập nhật, bản cập nhật đó sẽ có giá trị UPDATE_AVAILABLE . Vì vậy, phương pháp của bạn có thể trông như thế này:
InAppUpdate.checkForUpdate().then((updateInfo) {
if (updateInfo.updateAvailability == UpdateAvailability.updateAvailable) {
//Logic to perform an update
}
});
Tiếp theo, chúng ta cần quyết định loại cập nhật nào chúng ta muốn kích hoạt – cập nhật linh hoạt hoặc cập nhật ngay lập tức.
Việc cập nhật ngay lập tức nên được dành riêng cho bản cập nhật ứng dụng quan trọng đối với người dùng của bạn. Điều đó có thể có nghĩa là một phiên bản sửa một lỗi nghiêm trọng hoặc cung cấp một tính năng mới.
Để bắt đầu cập nhật ngay lập tức, chúng tôi có thể sử dụng performImmediateUpdate phương pháp. Phương thức này trả về một enum AppUpdateResult cho phép bạn biết liệu bản cập nhật có thành công hay không.
Trước khi gọi phương thức này, chúng ta cần kiểm tra xem liệu chúng ta có được phép chạy bản cập nhật ngay lập tức hay không. Chúng tôi thực hiện điều đó bằng cách truy cập vào immediateUpdateAllowed cờ trên đối tượng AppUpdateInfo.
Nếu muốn kích hoạt cập nhật linh hoạt, chúng tôi sử dụng startFleixbleUpdate phương pháp. Điều này chạy ở chế độ nền và tương tự như phương pháp cập nhật ngay lập tức. Nó cũng trả về một enum AppUpdateResult.
Nếu trong trường hợp này, quá trình cập nhật thành công, chúng ta cần gọi completeFlexibleUpdate phương pháp cài đặt bản cập nhật cho ứng dụng của chúng tôi.
Vì vậy, nếu chúng ta xem đoạn mã ở trên và thêm logic cho các loại cập nhật khác nhau, nó sẽ trông như thế này:
InAppUpdate.checkForUpdate().then((updateInfo) {
if (updateInfo.updateAvailability == UpdateAvailability.updateAvailable) {
if (updateInfo.immediateUpdateAllowed) {
// Perform immediate update
InAppUpdate.performImmediateUpdate().then((appUpdateResult) {
if (appUpdateResult == AppUpdateResult.success) {
//App Update successful
}
});
} else if (updateInfo.flexibleUpdateAllowed) {
//Perform flexible update
InAppUpdate.startFlexibleUpdate().then((appUpdateResult) {
if (appUpdateResult == AppUpdateResult.success) {
//App Update successful
InAppUpdate.completeFlexibleUpdate();
}
});
}
}
});
Cách sử dụng gói nâng cấp
Trái ngược với tùy chọn đầu tiên, tùy chọn này cung cấp giải pháp cho cả iOS và Android. Nó dựa vào việc thu thập dữ liệu từ cửa hàng và kiểm tra dữ liệu đó với dữ liệu hiện tại từ chính ứng dụng.
Thay vì có API để truy vấn dữ liệu, gói này có các tiện ích thực hiện logic một cách sâu sắc.
Cách thiết lập gói
Đầu tiên, thêm gói vào tệp pubspec.yaml của bạn:
dependencies:
flutter:
sdk: flutter
upgrader: ^5.0.0
Sau đó thực hiện pub get.
Bên trong ứng dụng của bạn, nơi bạn dự định thực hiện logic để xử lý các bản cập nhật ứng dụng, hãy thêm nội dung nhập sau:
import 'package:upgrader/upgrader.dart';
Sự khác biệt chính giữa hai tùy chọn này chỉ là giao diện người dùng, vì vậy hãy chọn tùy chọn phù hợp nhất với bạn.
Để tích hợp gói này, bạn sẽ cần bọc tiện ích nội dung của mình bằng UpgradeAlert hoặc Thẻ nâng cấp . Dưới đây là một ví dụ:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: applicationName,
home: UpgradeAlert( /// <------------------
child: MainPage(
key: Key("YOUR_KEY"),
title: applicationName
),
)
);
}
}
Nếu có phiên bản mới của ứng dụng của bạn trong cửa hàng, bạn sẽ thấy điều này:
Để kiểm tra mọi thứ, hãy đảm bảo bạn thêm phần này:
await Upgrader.clearSavedSettings()
bên trong phương thức chính của bạn trong tệp main.dart.
Xin lưu ý rằng có rất nhiều cấu hình mà bạn có thể đặt cho gói Nâng cấp. Tôi thực sự khuyên bạn nên đi và kiểm tra những thứ này.
Cách kiểm tra gói
Bất kể bạn chọn làm việc với gói nào, bạn cần biết rằng logic của bạn hoạt động đúng.
Nhưng làm thế nào bạn có thể làm điều đó mà không cần phát hành phiên bản chính thức của ứng dụng? Bạn có thể sử dụng tùy chọn thử nghiệm nội bộ trong Google Play Console. Bằng cách phát hành phiên bản mới của ứng dụng của bạn cho những người thử nghiệm nội bộ, phiên bản đó sẽ không phải là phiên bản công khai và sẽ cho phép bạn thử nghiệm chức năng nâng cấp.
Đây là những gì bạn cần làm:
- Đăng nhập vào tài khoản Google Play Console của bạn và truy cập vào ứng dụng bạn đang làm việc để có logic cập nhật
- Trong phần Thiết lập → Chia sẻ ứng dụng nội bộ, đi tới Quản lý người thử nghiệm và đảm bảo cho phép người thử nghiệm tải xuống và cài đặt ứng dụng được chia sẻ. Bạn có thể chọn thực hiện việc này qua liên kết hoặc qua email.
- Sau đó, đi tới Thử nghiệm → Thử nghiệm nội bộ và nhấp vào nút Tạo bản phát hành mới (trên cùng bên phải).
- Sau khi thực hiện phát hành, bạn có thể quay lại trang Thử nghiệm nội bộ chính và nhấp vào tab Người thử nghiệm. Ở đó bạn sẽ thấy một danh sách chứa các email của người kiểm tra (hiện tại trống). Nhấp vào biểu tượng mũi tên màu xanh.
- Trong màn hình này, bạn có thể thêm chính mình làm người thử nghiệm nội bộ (trong phần Thêm địa chỉ email).
- Khi hoàn tất, bạn có thể quay lại cửa sổ Kiểm tra nội bộ. Cuộn xuống phía dưới và bạn sẽ thấy Cách người thử nghiệm tham gia bài kiểm tra của bạn và bạn sẽ thấy nút Sao chép liên kết.
Bây giờ, bạn có thể nhấp vào nút và gửi liên kết cho chính mình để có thể tải xuống phiên bản mới của ứng dụng.
Nếu bạn không thực hiện một trong các bước trên, liên kết được tạo sẽ dẫn đến trang không tìm thấy (Lỗi 404):
Nếu bạn đã làm mọi thứ thành công, bạn sẽ thấy thông tin sau khi nhấp vào liên kết được tạo:
Nếu bạn thấy lỗi này:
_Lỗi cài đặt(-6):Không cho phép tải xuống/cài đặt do trạng thái hiện tại của thiết bị (ví dụ:pin yếu, dung lượng ổ đĩa thấp,…). (https://developer.android.com/reference/com/google/android/play/core/install/model/InstallErrorCode#ERROR_INSTALL_NOTALLOWED)
Điều đó có thể có nghĩa là bạn đang chạy ứng dụng của mình trên một thiết bị được mô phỏng và bạn cần cài đặt Cửa hàng Google Play trên thiết bị đó và đăng nhập.
Kết thúc
Tôi viết bài viết này vì tôi đã phải trải qua quá trình tương tự khi tích hợp gói cập nhật trong ứng dụng với ứng dụng của riêng tôi.
Bạn có thể xem thử tại Cửa hàng Google Play:
Và xem toàn bộ mã nguồn tại đây:
Cảm ơn bạn đã đọc!
Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu