From 36575b94bd8ce8a718a0f4d4ba01e87b5bc6606a Mon Sep 17 00:00:00 2001 From: newtdev Date: Tue, 15 Sep 2026 19:20:58 +0100 Subject: [PATCH] docs: serve the Android demo from a release asset, not an expiring EAS link MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The README's "Install the Android demo" link pointed at an EAS internal-distribution build. Those artifacts are kept 30 days and that one was built 2026-08-27, so it expired on 09-10 and the APK behind it has been returning 404 since. The build *page* still returns 200, which is why a link check wouldn't have caught it — only fetching the artifact does. Rebuilt from 554a96e and published it as a GitHub release asset instead (demo-android-v1). A release asset doesn't expire and needs no Expo account, which matters more now that this link is the main call to action for anyone arriving from a post or article. Same signing key as the expired build (cert SHA-256 4fe3f6d5...90ac), so it installs over it rather than needing an uninstall. Verified the README's exact download URL serves the built bytes: 63954196 both sides, matching SHA-256 over the zip central directory. Also bump versionCode 1 -> 2. Android refuses to install over an installed APK with a lower code and there's no store to enforce ordering for an unlisted build, so this has to climb by hand. Note it lives here and not in app.json: EAS ignores app.json's values outright because this native android/ directory exists. --- README.md | 19 ++++++++++++------- examples/mobile/android/app/build.gradle | 10 +++++++++- 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index b7014b1..a14b3d9 100644 --- a/README.md +++ b/README.md @@ -273,13 +273,18 @@ automatic via the Play referrer param; iOS: a real clipboard check, falling back to a real fingerprint match), with the actual request/response for every step. -**Want the real mobile app, not just the web half?** [Install the Android demo](https://expo.dev/accounts/newtdev/projects/blynk-recovery-demo/builds/547ed52d-afed-4e8e-ab69-fe4d4a42e96e) -— an EAS internal-distribution build, no Play Store listing needed; open -that link on an Android device (or scan its QR code) to install it -directly. iOS doesn't have an equivalent link yet — internal distribution -there needs a registered Apple Developer account and per-device UDID -registration, so for now the iOS side is only reachable by building it -yourself (see below). +**Want the real mobile app, not just the web half?** [Download the Android +demo APK](https://github.com/Newtdev/blynk-deferlink/releases/download/demo-android-v1/blynk-recovery-demo-v1.apk) +— open that link on an Android device and install it; no Play Store +listing and no Expo account needed. You'll have to allow installs from +your browser the first time, since it's unlisted rather than +Play-distributed. It's served from a [GitHub +release](https://github.com/Newtdev/blynk-deferlink/releases/tag/demo-android-v1) +deliberately: the EAS build link this used to point at expires after 30 +days, and did — a release asset doesn't. iOS has no equivalent link — +internal distribution there needs a registered Apple Developer account and +per-device UDID registration, so for now the iOS side is only reachable by +building it yourself (see below). Otherwise, the fastest way to see the whole thing work locally, before installing anything for real. Three terminals. No PHP or database required diff --git a/examples/mobile/android/app/build.gradle b/examples/mobile/android/app/build.gradle index 95fd575..37fcd60 100644 --- a/examples/mobile/android/app/build.gradle +++ b/examples/mobile/android/app/build.gradle @@ -114,7 +114,15 @@ android { applicationId 'dev.blynkdeferlink.demo' minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion - versionCode 1 + // Bump on every build you intend to hand someone. Android refuses to + // install an APK over an installed one with a *lower* code, and the + // demo ships as an unlisted APK (see the demo-android-* releases), so + // there's no store to enforce this for us. Equal codes still reinstall + // fine, which is why demo-android-v1 shipped as 1 twice without + // trouble — but a third at 1 would have been refused. + // This is the value EAS actually reads: app.json's is ignored outright + // because this native android/ directory exists. + versionCode 2 versionName "1.0.0" } signingConfigs {