자체 호스팅한 Discourse 사이트의 TWA에서 네이티브 알림을 작동시키려다 디지털 자산 링크(Digital Asset Link) 인증에서 매우 이상한 “소프트 페일(soft fail)” 현상을 겪고 있습니다.
구체적인 증상은 다음과 같습니다:
-
앱이 URL 바 없이 전체 화면으로 실행됩니다. 이는 자산 링크가 부분적으로 작동하고 있음을 시사합니다.
-
그러나 모든 실행 시마다 "Chrome에서 실행 중"이라는 토스트 메시지가 표시됩니다.
-
가장 중요한 점은, PWA가 알림 권한을 요청할 때 네이티브 Android 다이얼로그가 아닌 브라우저 스타일의 프롬프트가 표시된다는 것입니다. 이는 네이티브 API 위임이 실패하고 있음을 증명합니다.
이러한 동작은 모든 테스트 기기(Android 12 및 13)와 Bubblewrap 및 Microsoft PWABuilder로 생성된 APK에서 일관되게 나타납니다.
광범위한 디버깅을 거쳐, 클라이언트 측 및 공개된 서버 구성이 완벽하다는 것을 확인했습니다. 문제는 Android 검증기에만 영향을 미치는 미묘한 서버 측 문제인 것으로 보입니다.
이미 검증한 내용은 다음과 같습니다:
-
서명 키 및
assetlinks.json: 제android.keystore의 SHA-256 지문은 라이브/.well-known/assetlinks.json파일 내의 지문과 100% 정확히 일치합니다. -
서버 응답: 제 서버는
assetlinks.jsonURL을200 OK상태 코드, 올바른application/jsonContent-Type, 그리고 표준 웹 도구로 확인했을 때 차단하는 CORS 헤더 없이 제공합니다. -
Android 앱 구성: 생성된
AndroidManifest.xml은 정확하며 표준com.google.androidbrowserhelper.trusted.DelegationService를 포함하고 있습니다. -
Discourse 관리자 설정: 제 관리자 보안 설정인
cors origins및 **Allowed crawler user agents**는 모두 비어 있습니다.
이러한 특정한 “소프트 페일” 동작을 고려할 때, 제 질문은 다음과 같습니다:
기본 Discourse 자체 호스팅 환경에서 Android 검증기가 “부분적 신뢰”(전체 화면 UI 허용)는 부여하지만 네이티브 API 위임에 필요한 더 높은 수준의 신뢰는 거부하게 만드는 알려진 Nginx 규칙, 방화벽 설정, 또는 미묘한 서버 응답 문제(예: slight delay 또는 비표준 헤더)가 존재합니까?
클라이언트 측에서 진단할 수 있는 한계에 도달했습니다. 서버의 깊은 구성에 대한 통찰이 있다면 큰 도움이 될 것입니다.