mirror of
https://github.com/RoyalnetworkTR/simple-launcher.git
synced 2026-09-25 00:59:49 +03:00
Backend (PHP+SQLite): Discord OAuth2 + JWT, coklu hesap (1 Discord = 3-5), tek-kullanimlik join token (/api/join/prepare+verify), custom skin yukleme/sunma, hesap/Discord/HWID ban, admin paneli kartlari; deterministik offline UUID (PHP<->C# paritesi dogrulandi). 25 entegrasyon testi gecti. AthenaCore (Forge 1.12.2): tek client+server mod — join token dogrulama + kick, grace-gate, custom skin uygulama. Sunucu offline-mode kalir (UUID/dunya verisi korunur). Masaustu: WPF -> Avalonia (Windows+Linux), Discord giris/hesap/skin/oyna; WMI/DPAPI yerine cross-platform (machine-id HWID, AES-GCM secret store). Derlenir + calisir. CI: athenacore-mod.yml (JDK8), desktop-release.yml (Win+Linux self-contained). Deploy: deploy.sh (.env uretimi, php-gd, nginx Authorization gecisi) + HANDOFF.md. Android: backend hazir; entegrasyon spec'i ANDROID_INTEGRATION.md.
59 lines
3.8 KiB
Markdown
59 lines
3.8 KiB
Markdown
# Android — Athena v2 Entegrasyon Planı (uygulanabilir spec)
|
||
|
||
Backend ve masaüstü tamamlandı ve doğrulandı. Android tarafı, dış bir projenin
|
||
(MojoLauncher) fork'lanmasını gerektirdiği için bu repoda **uygulanabilir bir spec**
|
||
olarak bırakıldı. Backend **Android'i tam destekler** — eksik olan yalnızca istemci kodu.
|
||
|
||
## Backend Android için zaten hazır
|
||
- Discord giriş **deep-link** akışı: `GET /api/auth/discord/start?platform=android&nonce=<n>` →
|
||
Discord → `GET /api/auth/discord/callback` → `athena://auth?token=<jwt>&state=<n>` ile geri döner.
|
||
- Tüm uçlar JWT ile çalışır: `/api/accounts`, `/api/skin/upload`, `/api/join/prepare`,
|
||
`/api/skin/{uuid}.png|.json`, `/api/auth/refresh`.
|
||
- Modpack: `GET /api/modpack.mrpack` (mevcut), AthenaCore modu pakete dahil → skin + auth otomatik.
|
||
|
||
## İki katmanlı yol (MOBILE.md ile uyumlu)
|
||
|
||
### Katman A — Mevcut companion'a backend entegrasyonu (orta iş, CI ile derlenir)
|
||
`AndroidLauncher/` (Kotlin/Compose) zaten var ve `android-release.yml` ile APK derliyor.
|
||
Eklenecekler (masaüstü `AuthService.cs` ile birebir mantık):
|
||
|
||
1. **`AndroidManifest.xml`** — deep-link Activity:
|
||
```xml
|
||
<activity android:name=".AuthCallbackActivity" android:exported="true">
|
||
<intent-filter>
|
||
<action android:name="android.intent.action.VIEW"/>
|
||
<category android:name="android.intent.category.DEFAULT"/>
|
||
<category android:name="android.intent.category.BROWSABLE"/>
|
||
<data android:scheme="athena" android:host="auth"/>
|
||
</intent-filter>
|
||
</activity>
|
||
```
|
||
2. **Discord giriş**: `CustomTabsIntent` ile `BASE_URL + "/api/auth/discord/start?platform=android&nonce=<rastgele>"` aç.
|
||
`AuthCallbackActivity` `athena://auth?token=&state=` yakalar → `state==nonce` doğrula →
|
||
JWT'yi `EncryptedSharedPreferences` (androidx.security-crypto) ile sakla.
|
||
3. **`data/BackendClient.kt`** — yeni metotlar (OkHttp + `Authorization: Bearer <jwt>`):
|
||
`getAccounts()`, `createAccount(name)` (secret'i EncryptedSharedPreferences'a yaz),
|
||
`deleteAccount(id)`, `uploadSkin(accountId, fileUri, model)` (multipart),
|
||
`prepareJoin(accountId)` → dönen `join_token`'ı oyun dizinine `config/athena_session.json` yaz.
|
||
4. **UI** (`ui/AppRoot.kt`, `AppViewModel.kt`): LoginScreen (Discord butonu), AccountsScreen
|
||
(listele/ekle[cap 5]/sil/seç), SkinScreen (foto seç → upload). Masaüstü `Views/`'larının Compose karşılığı.
|
||
5. **Otomatik akış** (kullanıcı isteği — manuel adım YOK): ilk açılış → Discord giriş → hesap seç →
|
||
arka planda `modpack.mrpack` import + SHA-256 sync (mevcut `ModpackInstaller.kt`) →
|
||
`prepareJoin` ile `athena_session.json` yaz → MojoLauncher'a **force-connect + otomatik launch**
|
||
(`GameLauncher.kt` handoff Intent'ine `--server oyna.athenastudios.com.tr` + autostart).
|
||
|
||
> Bu katman tek başına: tam özellikli (Discord+hesap+skin) launcher + MojoLauncher motoru (handoff).
|
||
> CI: mevcut `android-release.yml` derler. **Bu, en hızlı tam-parite yoludur.**
|
||
|
||
### Katman B — Tek kilitli APK (MojoLauncher fork) (büyük iş)
|
||
`github.com/MojoLauncher/MojoLauncher` (LGPL) fork'la; Katman A UI'sını fork'un ön Activity'si yap
|
||
(handoff yerine gömülü `app_pojavlauncher` motoru). App id `com.athenastudios.mc`, marka/tema Athena,
|
||
1.12.2 Forge'a kilitle. CI: `.github/workflows/android-fork-release.yml` (submodules + NDK + JDK17 +
|
||
`./gradlew :app_pojavlauncher:assembleDebug`).
|
||
- **Riskler**: native (NDK) build, LGPL uyumu (fork kaynağını yayınla + relink izni), MojoLauncher'ın
|
||
Play'den kaldırılmış olması (bakım belirsizliği). Önce CI build'ini prototiple, sonra entegre et.
|
||
|
||
## Öneri
|
||
Önce **Katman A** (mevcut companion + backend entegrasyonu) ile tam-parite + otomatik akışı yayına al;
|
||
**Katman B** fork'u ikinci aşama olarak tek-APK için yap. Backend her iki katmanı da bugün destekliyor.
|