mikehardy / react-native-update-apk

Update apk from non-play store servers, and update ios from app store in React Native.
MIT License
195 stars 57 forks source link

Examine in-app-updates from official play store for inspiration #16

Open mikehardy opened 5 years ago

mikehardy commented 5 years ago

https://developer.android.com/guide/app-bundle/in-app-updates

Some good ideas here - mostly the UI is what I have looked at now and the example app doesn't really provide any UI cues but maybe we could change that

The troubleshooting section is very relevant for this package - all of those items should be called out here (they tripped me up during development at least...)

Beyond that I want to look at the code they provide and see if they are doing anything special

vforvasile commented 5 years ago

hey @mikehardy, any updates on this?

mikehardy commented 5 years ago

Hmm - no I haven't moved it forward any - but the library does support basically all the uses cases, and the example app provides the raw material to do it (like, a progress event callback so you can update a graphical progress bar etc.

In the app where I use the library I check update status during bootstrap and route to an update page that does the app similar to their "immediate update" example.

If I were to sum up the idea of this bug it would be really to provide a more polished example, but it does not really add functionality - there's nothing extra required in the library itself I don't think?

mikehardy commented 5 years ago

For completeness since I mention the troubleshooting section - those are almost all issues for active development where you don't have .apk splits on ABIs with different version code streams on your local debug installs, then you attempt to install the release version (different certificate) or you attempt to go from release to debug version (usually a version code regression). They aren't bugs, they are just annoying while developing. But even then after download the library makes that data available prior to install I believe, so you can message appropriately (e.g. "Hey this update attempt will likely fail because of certificate mismatch" or version code downgrade etc)

BoKKeR commented 4 years ago

One of the interesting features they mention is the ability to use the core library to check if there is a published play store update. I don't think this is possible with this package in its current implementation.

mikehardy commented 4 years ago

@BoKKeR I may be misunderstanding, but that's almost the entire purpose of this library, and how I use it? I use it to check if there is a published update, then behave accordingly

BoKKeR commented 4 years ago

but the update check for android has to be from an external URL. From my understanding from the example project the library does not check the play store version but uses an external url.

mikehardy commented 4 years ago

That is true, the point of this module at the moment is mostly to handle the "distribution outside of the play store" use case. I could see checking the version code(s) available from the play store being a useful counterpart. I'd be happy to merge a PR that implemented it

BoKKeR commented 4 years ago

I have been using this library that does exactly that, found it after I commented here. https://github.com/kimxogus/react-native-version-check

mikehardy commented 4 years ago

Yeah I've seen that one before but I always hesitate when I see "looking for maintainers" on the readme and a low level of commits even though that module appears relatively solid.

The version check itself from play store is trivial but it unfortunately only picks up the "public version" and can't see the version code

https://github.com/kimxogus/react-native-version-check/blob/master/packages/react-native-version-check/src/providers/playStore.js#L24-L53

I find all of this distasteful honestly. There's no official API, we're scraping a web page out of our control. I vastly prefer a published descriptor like the one this app uses. It's a shame Google doesn't publish the information necessary via a machine consumable interface like the App Store does with it's JSON