Content Provider 설정¶
Content Provider 설정 가이드¶
멀티 프로세스 데이터 수집을 최적화하기 위해 ft-sdk >= 1.6.14 버전부터 ContentProvider를 사용합니다. SDK는 기본적으로 다음 구성을 사용하며, 애플리케이션의 applicationId에 따라 자동으로 조정됩니다.
<provider
android:name="com.ft.sdk.garble.db.FTContentProvider"
android:authorities="${applicationId}.com.ft.sdk.provider"
android:exported="false"
android:multiprocess="false">
</provider>
커스텀 provider¶
커스텀 설정이 필요한 경우 tools:replace를 사용하여 provider를 재정의하고 meta-data도 함께 설정해야 합니다.
provider의android:authorities와meta-data의android:value는 일치해야 합니다.
<provider
tools:replace="android:authorities"
android:name="com.ft.sdk.garble.db.FTContentProvider"
android:authorities="com.custom.app.provider"
android:exported="false"
android:multiprocess="false">
</provider>
<meta-data
android:name="com.ft.sdk.PROVIDER_AUTHORITY"
android:value="com.custom.app.provider" />
provider 강제 제거¶
일반적으로 SDK에서 기본으로 선언한 FTContentProvider를 제거하는 것은 권장되지 않습니다. Manifest 규정 준수, 컴포넌트 통합 또는 기타 특수 요구사항으로 인해 반드시 제거해야 하는 경우, 애플리케이션 메인 모듈의 AndroidManifest.xml에서 tools:node="remove"를 사용할 수 있습니다.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application>
<provider
android:name="com.ft.sdk.garble.db.FTContentProvider"
android:authorities="${applicationId}.ft_sdk_provider_removed"
tools:node="remove" />
</application>
</manifest>
이전에 커스텀 android:authorities를 구성한 경우, 제거 구성의 android:authorities도 일치해야 하며, 해당 meta-data도 함께 제거해야 합니다.
설정을 완료한 후, 대상 변형을 빌드하고 애플리케이션 모듈의 build/intermediates/merged_manifest/ 디렉터리에서 최종 병합된 AndroidManifest.xml을 확인하여 com.ft.sdk.garble.db.FTContentProvider와 com.ft.sdk.PROVIDER_AUTHORITY가 모두 제거되었는지 확인하세요. Android Gradle Plugin 버전에 따라 생성되는 하위 디렉터리가 다를 수 있으므로 merged_manifest 디렉터리에서 해당 클래스명 또는 meta-data 이름을 검색하여 확인할 수 있습니다.
provider를 제거한 후에는 기본 SQLite provider 경로에 의존하지 않도록 파일 캐시를 명시적으로 활성화하는 것이 좋습니다.
provider 제거 시 영향
- 기본 SQLite 캐시 경로를 사용할 수 없습니다.
ft-sdk1.7.2 이상 버전에서는 파일 캐시로 대체됩니다. 1.7.2 미만 버전에서는 provider를 제거하지 않는 것이 좋습니다. FTSDKConfig.setFileDataStoreShadow(true)는 provider를 통해 SQLite 캐시를 읽으므로, 제거 후 섀도우 쓰기 모드가 적용되지 않습니다.FTSDKConfig.setNeedTransformOldCache(true)를 함께 설정한 경우, provider를 제거하면 이전 SQLite 캐시를 읽을 수 없어 이전 캐시 마이그레이션이 건너뛰어지며, 과거에上报되지 않은 데이터가 계속 동기화되지 않을 수 있습니다.- 멀티 프로세스 시나리오에서 provider를 제거하면 SDK의 SQLite 멀티 프로세스 접근 경로를 더 이상 사용하지 않습니다.
enableFileDataStore()를 우선 사용하고 각 프로세스의 데이터 쓰기 및上报가 예상대로 작동하는지 확인하세요.