Android(TWA) 앱 패키징 + 재실행 불가 버그 수정

Cloudflare Pages 가 /index.html 을 / 로 308 리다이렉트하는데, 서비스워커가
그 리다이렉트 응답을 캐시해 두면 navigation 요청에 응답할 수 없어(스펙상 금지)
두 번째 실행부터 ERR_FAILED 로 앱이 아예 열리지 않았다.

- sw.js: navigation 은 네트워크 우선 + 캐시된 './' 오프라인 폴백,
  프리캐시는 리다이렉트 플래그 없는 새 Response 로 복사해 저장 (tetrig-v2)
- manifest.webmanifest: start_url 을 './' 로 바꿔 리다이렉트 자체를 회피
- android/: Bubblewrap TWA 프로젝트 (kr.tkrmagid.tetrig, launchUrl '/')
- .well-known/assetlinks.json: 서명 키 SHA-256 등록 → 주소창 없는 전체화면 실행
This commit is contained in:
2026-09-23 04:30:10 +09:00
parent c9463fe46b
commit 0839705b97
46 changed files with 1177 additions and 8 deletions

View File

@@ -95,6 +95,31 @@ wrangler deploy # 배포
- Google OAuth 클라이언트 ID (Phase 4)
- 애드센스 계정 ID (Phase 7)
## 배포
웹(Cloudflare Pages) — `dist/` 에 `index.html`, `manifest.webmanifest`, `sw.js`,
아이콘 3종, `.well-known/assetlinks.json` 을 담아 올린다.
```bash
node build.js
wrangler pages deploy dist --project-name tetrig --branch main
```
안드로이드(Play Store) — `android/` 는 위 사이트를 감싸는 TWA(Trusted Web Activity)
프로젝트다. 패키지는 `kr.tkrmagid.tetrig`. Bubblewrap 으로 빌드한다.
```bash
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 # Bubblewrap 은 JDK 17 고정
export BUBBLEWRAP_KEYSTORE_PASSWORD=... BUBBLEWRAP_KEY_PASSWORD=...
cd android && bubblewrap build --skipPwaValidation
# → app-release-signed.apk (테스트 설치용), app-release-bundle.aab (Play 업로드용)
```
서명 키는 저장소에 넣지 않는다. 키를 바꾸면 `.well-known/assetlinks.json` 의
SHA-256 지문도 같이 갱신해야 TWA 가 주소창 없이 전체화면으로 뜬다.
Play App Signing 을 쓰면 Play Console 이 발급한 앱 서명 키 지문도
assetlinks 에 함께 넣어야 한다.
## 구현 가드레일 (반드시 지킬 것)
- **IP 금지**: 사용자 노출 텍스트에 "Tetris/테트리스" 금지, 테트리스 음악(Korobeiniki 등) 금지, 표준 가이드라인 색상 1:1 복제 금지, TETR.IO 에셋·명칭 복제 금지.