Files

84 lines
5.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# دلدل — 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` یا هر دامنه‌ای):
```bash
sed -i "s/app.deldel.ir/DOMAIN_واقعی/g" app/build.gradle twa-manifest.json
```
### ۲. اجرای build
```bash
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 فینگرپرینت کلید امضاست. برای گرفتنش:
```bash
keytool -list -v -keystore android.keystore -alias android -storepass deldel1234
```
خروجی JSON مورد نیاز رو Bubblewrap خودش می‌تونه بسازه:
```bash
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) ساخت |