5.4 KiB
دلدل — TWA (Trusted Web Activity)
این پوشه یک پروژهی کامل اندرویدی (Gradle) است که وباپ dating-app-web رو به شکل TWA
بستهبندی میکنه — یعنی روی گوشی مثل یک اپ واقعی نصب میشه (بدون نوار آدرس مرورگر)، ولی
در واقع همون وبسایت شما رو نمایش میده.
وضعیت فعلی
twa-manifest.jsonو کل پروژهی اندروید (app/,build.gradle,gradlew, ...) ساخته شده.- کلید امضا (
android.keystore) ساخته شده — الگوریتم/شکل درست، ولی رمز عبورش placeholder و ناامنه (پایین توضیح داده شده). packageIdفعلاًir.deldel.appو دامنه (host) فعلاً placeholder یعنیapp.deldel.ir— چون هنوز وباپ روی دامنهی واقعی دیپلوی نشده.- وابستگی
com.google.androidbrowserhelper(که در نسخهی فعلی Bubblewrap استفاده میشه) دیگه منتشر نمیشه؛ جایگزینش کردم باcom.meta.androidbrowserhelper:androidbrowserhelper:2.5.0(متا نگهداری این کتابخونه رو از گوگل تحویل گرفته) وjcenter()غیرفعالشدهی قدیمی رو باmavenCentral()عوض کردم.
⚠️ محدودیت این سندباکس (نه پروژه)
نتونستم ./gradlew assembleRelease رو همینجا کامل اجرا کنم چون این محیط sandbox به
dl.google.com (مخزن Maven گوگل که کتابخونههای androidx ازش دانلود میشن) دسترسی نداره —
دقیقاً همون محدودیتی که قبلاً موقع build داکر ایمیجها (docker pull) هم دیدیم. این یک
محدودیت شبکهی همین سندباکسه، نه مشکل پروژه؛ روی سیستم خودت یا هر CI عادی (GitHub Actions و
غیره) که دسترسی اینترنت کامل داره، این build بدون مشکل انجام میشه.
قدمهای باقیمونده (روی سیستم خودت)
۱. دامنهی واقعی رو جایگزین کن
وقتی وباپ رو دیپلوی کردی (مثلاً app.deldel.ir یا هر دامنهای):
sed -i "s/app.deldel.ir/DOMAIN_واقعی/g" app/build.gradle twa-manifest.json
۲. اجرای build
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 # یا مسیر JDK 17 خودت
export ANDROID_HOME=~/Android/Sdk # یا مسیر Android SDK خودت
./gradlew bundleRelease # فایل AAB برای آپلود به Google Play (توصیهشده)
./gradlew assembleRelease # فایل APK مستقیم (برای تست/نصب دستی)
خروجیها:
- APK:
app/build/outputs/apk/release/app-release.apk - AAB:
app/build/outputs/bundle/release/app-release.aab
۳. Digital Asset Links (حتماً لازمه)
برای اینکه اندروید به اپ اعتماد کنه و نوار آدرس مرورگر رو مخفی کنه، باید فایل
assetlinks.json رو روی خودِ دامنه در مسیر /.well-known/assetlinks.json قرار بدی.
این فایل شامل SHA-256 فینگرپرینت کلید امضاست. برای گرفتنش:
keytool -list -v -keystore android.keystore -alias android -storepass deldel1234
خروجی JSON مورد نیاز رو Bubblewrap خودش میتونه بسازه:
npx @bubblewrap/cli fingerprint add # یا دستی طبق مستندات:
# https://developers.google.com/digital-asset-links
۴. امنیت کلید امضا (خیلی مهم)
فایل android.keystore با رمز placeholder deldel1234 ساخته شده — این فقط برای تست
محلیه. قبل از هر انتشار واقعی روی Google Play:
- این فایل رو هرگز به گیت commit نکن (توی
.gitignoreبذارش). - یا با رمز قویتر از نو بسازش (
keytool -genkeypair ...)، یا حداقل جاش رو امن نگه دار. - گوگلپلی از نسخههای بعدی همین کلید برای آپدیت اپ استفاده میکنه؛ اگه گمش کنی، دیگه نمیتونی همون اپ رو آپدیت کنی. توصیه میشه از Play App Signing گوگل هم استفاده کنی (موقع اولین آپلود AAB بهت پیشنهاد میده).
۵. آپلود به Google Play Console
فایل .aab تولیدشده رو در بخش Production/Internal testing کنسول Google Play آپلود کن.
حتماً packageId (ir.deldel.app) رو اگه دوست نداری قبل از هر آپلودی عوض کن — بعد از اولین
انتشار دیگه قابل تغییر نیست.
فایلهای کلیدی
| فایل | توضیح |
|---|---|
twa-manifest.json |
تنظیمات اصلی TWA (دامنه، رنگها، آیکون، signingKey) |
app/build.gradle |
تنظیمات build اندروید + وابستگیها |
app/src/main/AndroidManifest.xml |
مجوزها، اکتیویتیها، asset statement |
android.keystore |
کلید امضای اپ (placeholder — بالا توضیح داده شد) |
generate.js |
اسکریپتی که این پروژه رو (بهجای ویزارد تعاملی bubblewrap) ساخت |