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>
カスタムプロバイダー¶
カスタム設定が必要な場合は、tools:replace を使用してプロバイダーを上書き設定し、同時に 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" />
プロバイダーの強制削除¶
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 名を検索して確認できます。
プロバイダーを削除した後は、デフォルトの SQLite プロバイダーパスに依存し続けることを避けるため、ファイルキャッシュを明示的に有効にすることをお勧めします。
プロバイダー削除後の影響
- デフォルトの SQLite キャッシュパスは使用できなくなります。
ft-sdk1.7.2 以降ではファイルキャッシュにフォールバックします。1.7.2 未満のバージョンではプロバイダーの削除は推奨されません。 FTSDKConfig.setFileDataStoreShadow(true)はプロバイダーに依存して SQLite キャッシュを読み取るため、削除後はシャドウライトモードは有効になりません。FTSDKConfig.setNeedTransformOldCache(true)も設定している場合、プロバイダー削除後は古い SQLite キャッシュを読み取れなくなり、古いキャッシュの移行はスキップされ、過去に未報告のデータは同期できなくなる可能性があります。- マルチプロセスシナリオでは、プロバイダー削除後は SDK の SQLite マルチプロセスアクセスパスは使用されなくなります。まず
enableFileDataStore()を使用し、各プロセスのデータ書き込みと報告が期待通りであることを確認してください。