Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Android

In-App Update: Cách hiệu quả thông báo người dùng Flutter về phiên bản mới

In-App Update: Cách hiệu quả thông báo người dùng Flutter về phiên bản mới

Khi roll out phiên bản mới ứng dụng, bạn muốn user biết. Dù fix critical bug, thêm feature mới, hoặc app chạy mượt/nhanh hơn – họ cần biết.

Là developer, chúng ta muốn tất cả user dùng phiên bản mới nhất.

Nhưng làm sao chắc chắn user nhận biết phiên bản mới?

Câu trả lời khá đơn giản: Tại sao không thông báo họ khi phiên bản mới ra?

Bạn làm theo nhiều cách:

  • Dùng push notification
  • Thông báo khi app launch

Chúng ta không bàn push notification bài này. Thay vào đó focus vào cách dùng package để show dialog thông báo user có phiên bản mới và xử lý update.

Chờ, Không có sẵn rồi sao?

Bạn nghĩ functionality này nên có sẵn trong OS mobile hiện đại. Bạn đúng – nhưng chỉ có Android.

iOS hiện tại không cho developer xem có phiên bản mới và thông báo user. Android có In-App Update library trong Google Play libraries.

Vì vậy, và vì Flutter hỗ trợ cả hai platform, tôi sẽ đi qua hai package nổi bật xử lý version update:

  1. Upgrader
  2. In App Update

Cả hai cho kết quả mong muốn, nhưng khác biệt lớn về cách làm.

Trước khi bắt đầu, quan trọng phải hiểu bạn phải có phiên bản ứng dụng cài trực tiếp từ Google Play Store. Bắt buộc vì cả hai package dựa trên Google Play services và khả năng verify owner ứng dụng.

Nếu không làm vậy, bạn sẽ thấy lỗi sau khi dùng package:

_Install Error(-10): The app is not owned by any user on this device. An app is "owned" if it has been acquired from Play. (https://developer.android.com/reference/com/google/android/play/core/install/model/InstallErrorCode#ERROR_APP_NOTOWNED)

Cách dùng Package In App Update

Ngay từ đầu bạn phải biết package này chỉ chạy trên Android. Vì nó dựa trên in app update library cho inner workings.

Package này về cơ bản là wrapper cho Android library. Dưới đây API exposed:

  • Future<AppUpdateInfo> checkForUpdate(): Kiểm tra có update không
  • Future<AppUpdateResult> performImmediateUpdate(): Thực hiện immediate update (full-screen)
  • Future<AppUpdateResult> startFlexibleUpdate(): Bắt đầu flexible update (tải background)
  • Future<void> completeFlexibleUpdate(): Cài đặt flexible update có sẵn

✋ Nếu muốn đọc thêm sự khác biệt immediate vs flexible update, vào đây.

Cách setup Package

Thêm package vào pubspec.yaml:

dependencies: flutter: sdk: flutter in_app_update: ^3.0.0 

Chạy pub get.

Trong ứng dụng, nơi định xử lý logic in app update, thêm import:

import 'package:in_app_update/in_app_update.dart'; 

Trước tiên cần logic kiểm tra app có update. Dùng method checkForUpdate. Return value là Future chứa thông tin availability và progress update.

Kiểm tra update available dùng property updateAvailability. Nếu có update, giá trị UPDATE_AVAILABLE. Method có thể như sau:

InAppUpdate.checkForUpdate().then((updateInfo) { if (updateInfo.updateAvailability == UpdateAvailability.updateAvailable) { //Logic perform update } }); 

Tiếp theo, quyết định loại update trigger – flexible hay immediate.

Immediate update dành cho update critical cho user. Nghĩa là version fix critical bug hoặc feature mới.

Để start immediate update, dùng method performImmediateUpdate. Return AppUpdateResult enum cho biết update thành công hay không.

Trước khi gọi method, kiểm tra cho phép immediate update không. Lấy flag immediateUpdateAllowed trên object AppUpdateInfo.

Nếu muốn flexible update, dùng startFlexibleUpdate. Chạy background và giống immediate update method. Cũng return AppUpdateResult enum.

Nếu update thành công, cần gọi completeFlexibleUpdate cài update vào app.

Ghé code snippet trên thêm logic cho loại update khác nhau:

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 dùng Package Upgrader

Khác với option đầu, cái này giải pháp cho cả iOS và Android. Nó dựa trên thu thập data từ store và check với data hiện tại từ app.

Thay vì API query data, package này có widget thực hiện logic dưới màn.

Cách setup Package

Thêm package vào pubspec.yaml:

dependencies: flutter: sdk: flutter upgrader: ^5.0.0 

Chạy pub get.

Trong app, nơi định xử lý logic in app update, thêm import:

import 'package:upgrader/upgrader.dart'; 

Khác biệt chính giữa hai option chỉ là UI, chọn cái phù hợp nhất.

Để tích hợp, wrap body widget với UpgradeAlert hoặc UpgradeCard. 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 phiên bản mới có trong store, bạn sẽ thấy:

In-App Update: Cách hiệu quả thông báo người dùng Flutter về phiên bản mới

Để test, thêm này:

await Upgrader.clearSavedSettings() 

trong main method của main.dart.

Chỉ để biết, có ton config cho Upgrader package. Khuyên bạn check chúng.

Cách test các Package

Dù chọn package nào, cần biết logic chạy đúng.

Nhưng làm sao test không release phiên bản chính thức? Dùng internal testing option trong Google Play Console. Bằng cách release phiên bản mới cho internal tester, không public và cho test upgrading functionality.

Cần làm:

  1. Login Google Play Console account và vào app đang làm việc có logic update
  2. Dưới Setup → Internal App Sharing, vào Manage Testers và chắc chắn cho tester download và install shared app. Chọn via link hoặc email.

In-App Update: Cách hiệu quả thông báo người dùng Flutter về phiên bản mới

  1. Sau đó, vào Testing → Internal Testing và bấm Create new release button (góc trên phải).

In-App Update: Cách hiệu quả thông báo người dùng Flutter về phiên bản mới

  1. Sau khi release, quay lại trang chính Internal Testing và bấm tab Testers. Sẽ thấy list email tester (rỗng lúc này). Bấm icon mũi tên xanh.

In-App Update: Cách hiệu quả thông báo người dùng Flutter về phiên bản mới

  1. Màn hình này thêm bản thân làm internal tester (Add email addresses).

In-App Update: Cách hiệu quả thông báo người dùng Flutter về phiên bản mới

  1. Khi xong, quay lại Internal Testing window. Cuộn xuống dưới thấy How testers join your test và nút Copy link.

Bây giờ click nút và gửi link cho bản thân để download phiên bản mới app.

Nếu thất bại một bước trên, link generated dẫn đến not found (Error 404):

In-App Update: Cách hiệu quả thông báo người dùng Flutter về phiên bản mới

Nếu mọi thứ thành công, click link generated thấy:

In-App Update: Cách hiệu quả thông báo người dùng Flutter về phiên bản mới

Nếu thấy lỗi:

_Install Error(-6): The download/install is not allowed, due to the current device state (e.g. low battery, low disk space, …). (https://developer.android.com/reference/com/google/android/play/core/install/model/InstallErrorCode#ERROR_INSTALL_NOTALLOWED)

Có nghĩa bạn chạy app trên emulator và cần Google Play Store cài trên đó và login.

Tổng kết

Tôi viết bài này vì tôi phải qua quy trình tương tự khi tích hợp in app update package với app của mình.

Mời check tại Google Play Store:

In-App Update: Cách hiệu quả thông báo người dùng Flutter về phiên bản mới

Và xem toàn bộ source code tại đây:

Cảm ơn bạn đã đọc!

Học lập trình miễn phí. Chương trình mở của freeCodeCamp đã giúp hơn 40.000 người có việc làm developer. Bắt đầu ngay