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.
3.8 KiB
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):
AndroidManifest.xml— deep-link Activity:<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>- Discord giriş:
CustomTabsIntentileBASE_URL + "/api/auth/discord/start?platform=android&nonce=<rastgele>"aç.AuthCallbackActivityathena://auth?token=&state=yakalar →state==noncedoğrula → JWT'yiEncryptedSharedPreferences(androidx.security-crypto) ile sakla. 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önenjoin_token'ı oyun dizinineconfig/athena_session.jsonyaz.- 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ığı. - Otomatik akış (kullanıcı isteği — manuel adım YOK): ilk açılış → Discord giriş → hesap seç →
arka planda
modpack.mrpackimport + SHA-256 sync (mevcutModpackInstaller.kt) →prepareJoinileathena_session.jsonyaz → MojoLauncher'a force-connect + otomatik launch (GameLauncher.kthandoff 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.ymlderler. 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.