Ratnadeep
Ratnadeep

Reputation: 1233

Flutter AppUpdateService linkToDeath

I have been trying to add the in app update feature to make the user update the app when there is a new update available in the playstore. I am using the package in_app_update.

But it keeps throwing this error,

I/PlayCore( 8420): UID: [10378]  PID: [8420] AppUpdateService : requestUpdateInfo(com.example.app)
I/PlayCore( 8420): UID: [10378]  PID: [8420] AppUpdateService : Initiate binding to the service.
I/PlayCore( 8420): UID: [10378]  PID: [8420] AppUpdateService : ServiceConnectionImpl.onServiceConnected(ComponentInfo{com.android.vending/com.google.android.finsky.installservice.DevTriggeredUpdateService})
I/PlayCore( 8420): UID: [10378]  PID: [8420] AppUpdateService : linkToDeath
I/PlayCore( 8420): UID: [10378]  PID: [8420] OnRequestInstallCallback : onRequestInfo
I/PlayCore( 8420): UID: [10378]  PID: [8420] AppUpdateService : Unbind from service.
W/JavaBinder( 8420): BinderProxy is being destroyed but the application did not call unlinkToDeath to unlink all of its death recipients beforehand.  Releasing leaked death recipient: com.google.android.play.core.internal.ac

The code I am using is,

try {
  if (Platform.isAndroid) {
    InAppUpdate.checkForUpdate().then((info) {
      setState(() {
        _updateInfo = info;
      });
    }).catchError((error) => print(error));

    if (_updateInfo?.updateAvailable == true) {
      InAppUpdate.performImmediateUpdate()
          .catchError((error) => print(error));
    }
  }
} catch(e) {
    print(e);
}

After failing with the above package for number of days I tried using another package named native_updater. This package also resulted in the same error. Although I followed their example, which should have worked.

The output of flutter doctor is,

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel master, 1.22.0-10.0.pre.121, on Linux, locale en_US.UTF-8)
 
[✓] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
[✓] Android Studio (version 4.0)
[✓] Connected device (1 available)


I could not find any similar question or answer which is why had to post one.

I am using a 64 bit Kali Linux machine.

Upvotes: 16

Views: 11787

Answers (4)

Abdul
Abdul

Reputation: 116

import 'package:in_app_update/in_app_update.dart';


  @override
  void initState() {
    updatePopUp();
    super.initState();
  }

  updatePopUp() async {
    print('<<<<<<=============<<<<<<< Checked');
    await InAppUpdate.checkForUpdate().then(
      (value) async {
        if (value.updateAvailability == UpdateAvailability.updateAvailable) {
          await InAppUpdate.startFlexibleUpdate();
        }
      },// if print is working then all is ok just call updatePopUP() any
    );//   where you want to show official update pop up. It worked for 
  }//      IMPORTANT: But It must be installed via Google Play to work. 

Screenshot:

https://play.google.com/store/apps/details?id=com.abdul.qr_maze

Upvotes: 0

Scorpion
Scorpion

Reputation: 47

Test with internal app sharing

Use internal app sharing to test in-app updates by performing the following steps:

  • Make sure your test device has a version of your app installed that supports in-app updates and was installed using an internal app sharing URL.

  • Follow the Play Console instructions to share your app internally. Upload a version of your app that uses a version code that is higher than the one you already have installed on the test device.

  • On the test device, click the internal app sharing link for the updated version of your app but do not install the app from the Play Store page that appears after you click the link.

  • Open the app from the device's app drawer or home screen. The update should now be available to your app, and you can test your implementation of in-app updates.

https://developer.android.com/guide/playcore/in-app-updates/test#internal-app-sharing

Upvotes: 0

Hiếu nguyễn văn
Hiếu nguyễn văn

Reputation: 96

Make sure 4 things, so you can test your in_app_update feature:

  • Your previous app version code must smaller than future app version code
  • PlayStore should be clear cache before test
  • Previous app version, newer app version must be installed from Internal app sharing. (You can reference this link)
  • Your email which signed in PlayStore must be added to internal tester

Good luck bro!

Upvotes: 3

Jeremy HOFFMANN
Jeremy HOFFMANN

Reputation: 1390

At first I had the same problem as you. But I noticed something, the app must be downloaded from the Play Store, and an update must be available as well. If you do this by launching the app from flutter or vscode, it is normal that it does not work. I don't know if I was very clear.

Be aware that this plugin cannot be tested locally. It must be installed via Google Play to work. Please check the official documentation about In App Updates from Google.

Upvotes: 12

Related Questions