시나리오: 빌드 후에 앱 아이콘이 보이지 않는 현상, 구글 플레이 스토어에서 앱을 설치했지만 열기 버튼이 보이지 않는 현상.
카카오 채널 연동 작업을 하면서 테스트를 진행하는데 빌드 후에 앱 아이콘이 보이지 않는 기이한 현상을 경험했다. 내부 테스트로 업로드 후 다운로드 해봤지만 구글 플레이 스토어에서 설치는 했지만 열기 버튼이 보이지 않았다. 어플리케이션 탭에서 앱 검색 시에 찾을 수는 있었지만 사용할 수가 없는 상황.
원인은 intent-filter에 action의 중복이었다.
<activity
android:name=".presentation.main.view.MaiActivity"
android:exported="true"
android:label="${appLabel}">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.MAIN" />
<data android:host="channel" android:scheme="kakao${kakaoKey}" />
</intent-filter>
</activity>
서로 다른 용도의 action이 하나의 intent-filter에서 선언되어 있는 것이 문제였다. View와 Main의 경우는 별도의 <intent-filter>로 구분해서 선언하여 사용해야 한다.
각 액션의 의미를 한번 정리해보면 ,
• android.intent.action.MAIN: 이 액션은 애플리케이션의 진입점을 정의. 주로 앱의 런처 아이콘을 클릭할 때 호출되는 액티비티를 지정한다.
• android.intent.action.VIEW: 이 액션은 URI를 통해 특정 데이터를 표시하거나 처리하는 용도로 사용. 주로 웹 링크나 딥 링크를 처리하는 데 사용된다.
두 개의 액션을 하나의 인텐트 필터에서 사용했을 때 생기는 문제점을 정리해 보면, 두 액션이 함께 사용되면, 어떤 상황에서 어떤 액션이 우선시 되어야 하는지 명확하지 않다. 예를 들어, 저자의 경우를 들면 앱을 런처에서 실행하는 액션이랑 딥 링크를 통해 실행하는 액션 중 어떤 액션을 해야 하는지 명확하게 처리할 수 없다. 이로 인해 인텐트가 잘못 처리되거나 예상치 못한 동작이 발생하는 것이다.
android.intent.action.MAIN과 android.intent.action.VIEW가 함께 정의된 경우, 사용자가 앱 아이콘을 클릭했을 때와 딥 링크를 통해 앱을 열었을 때 동일한 액티비티가 호출되는데, 두 액션이 같은 인텐트 필터 내에 있으면, 이러한 상황을 구분하기 어려워 예상치 못한 동작이 발생할 수 있습니다.
즉, 명확하지 않은 인텐트 처리로 앱 실행시에 의도치 않은 동작이 발생하게 된 것이다.
<activity android:name=".MainActivity">
<!-- 런처에서 실행될 때 -->
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<!-- 딥 링크를 처리할 때 -->
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<data android:host="channel" android:scheme="kakao${kakaoKey}" />
</intent-filter>
</activity>
- ...😩
댓글 영역