Files
simple-launcher/ANDROID_INTEGRATION.md
Barış Keser 83be058d23 feat: Athena v2 — Discord auth, AthenaCore mod, cross-platform launcher, CI
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.
2026-06-13 23:45:21 +03:00

59 lines
3.8 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.
# 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.