// 1. Add dependencies (see Installation section)
// 2. Initialize the Datadog Android SDK (in Application.onCreate)
valconfiguration=Configuration.Builder(clientToken="<CLIENT_TOKEN>",env="<ENV_NAME>",variant="<APP_VARIANT_NAME>").useSite(DatadogSite.).build()Datadog.initialize(this,configuration,TrackingConsent.GRANTED)// 3. Enable Feature Flags with a bounded initialization timeout
Flags.enable(FlagsConfiguration.Builder().initializationTimeout(2_000L).build())// 4. Create and set up the OpenFeature provider
valprovider=FlagsClient.Builder().build().asOpenFeatureProvider()OpenFeatureAPI.setProviderAndWait(provider)// 5. Set evaluation context (who is the user)
OpenFeatureAPI.setEvaluationContext(ImmutableContext(targetingKey="user-123",attributes=mapOf("tier"toValue.String("premium"))))// 6. Evaluate flags anywhere in your app
valclient=OpenFeatureAPI.getClient()valisEnabled=client.getBooleanValue("my-feature",false)
dependencies{implementation"com.datadoghq:dd-sdk-android-flags:<latest-version>"implementation"com.datadoghq:dd-sdk-android-flags-openfeature:<latest-version>"// Recommended: RUM integration drives analysis and enriches RUM session data
implementation"com.datadoghq:dd-sdk-android-rum:<latest-version>"}
importcom.datadog.android.flags.FlagsClientimportcom.datadog.android.flags.openfeature.asOpenFeatureProviderimportdev.openfeature.kotlin.sdk.OpenFeatureAPI// Create and configure the provider
valprovider=FlagsClient.Builder().build().asOpenFeatureProvider()// Set it as the OpenFeature provider
OpenFeatureAPI.setProviderAndWait(provider)
OpenFeature プロバイダーは Datadog を FlagsClient 内部的にラップします。これは実装の詳細です。一度設定すれば、標準の OpenFeature API のみを通じて操作できます。
valdetails=client.getStringDetails(key="paywall.layout",defaultValue="control")print(details.value)// Evaluated value (for example: "A", "B", or "control")
print(details.variant)// Variant name, if applicable
print(details.reason)// Reason for this value (for example: "TARGETING_MATCH" or "DEFAULT")
print(details.errorCode)// Error code, if any
importdev.openfeature.kotlin.sdk.OpenFeatureAPIimportdev.openfeature.kotlin.sdk.events.OpenFeatureProviderEventsimportkotlinx.coroutines.flow.catchimportkotlinx.coroutines.launchvalstateJob=lifecycleScope.launch{OpenFeatureAPI.observe<OpenFeatureProviderEvents>().catch{// Handle Flow collection errors.
}.collect{event->when(event){isOpenFeatureProviderEvents.ProviderReady->{// The provider is ready to evaluate flags.
}isOpenFeatureProviderEvents.ProviderStale->{// Cached assignments are available, but they may be out of date.
}isOpenFeatureProviderEvents.ProviderError->{// The provider cannot evaluate flags.
}isOpenFeatureProviderEvents.ProviderConfigurationChanged->{// The provider configuration changed.
}else->{// Handle other OpenFeature provider events as needed.
}}}}
true (デフォルト) の場合、フラグ評価は RUM で追跡され、ユーザーセッションと関連付けることができます。これにより、_「バリアント B のユーザーはより多くのエラーを経験しているか」_といった分析が可能になります。アプリで RUM を使用していない場合、このフラグは影響しないため、デフォルト値のままにしておいても問題ありません。RUM インテグレーションを無効にするには、rumIntegrationEnabled(false) を使用してください。
gracefulModeEnabled()
SDK が API の不適切な使用をどのように処理するかを制御します。たとえば、Flags.enable() を呼び出す前にクライアントを作成する、同じ名前で重複するクライアントを作成する、またはまだ作成されていないクライアントを取得する場合などです。
dependencies{implementation"com.datadoghq:dd-sdk-android-flags:<latest-version>"// Recommended: RUM integration drives analysis and enriches RUM session data
implementation"com.datadoghq:dd-sdk-android-rum:<latest-version>"}
クライアントの作成と取得 (FlagsClient)
通常はアプリの起動時にクライアントを一度作成します。
FlagsClient.Builder().build()// Creates the default client
アプリ内のどこからでも同じクライアントを取得できます。
valflagsClient=FlagsClient.get()// Retrieves the "default" client
importcom.datadog.android.flags.FlagsStateListenerimportcom.datadog.android.flags.model.FlagsClientStatevallistener=object: FlagsStateListener{overridefunonStateChanged(newState:FlagsClientState){when(newState){FlagsClientState.NotReady->{// The client has not loaded assignments yet.
}FlagsClientState.Reconciling->{// The client is fetching assignments for a context change.
}FlagsClientState.Ready->{// Assignments are loaded and available for evaluation.
}FlagsClientState.Stale->{// Cached assignments are available, but the latest fetch failed.
}isFlagsClientState.Error->{// No assignments are available for evaluation.
}}}}flagsClient.state.addListener(listener)valcurrentState=flagsClient.state.getCurrentState()
valdetails=flagsClient.resolve(flagKey="paywall.layout",defaultValue="control")print(details.value)// Evaluated value (for example: "A", "B", or "control")
print(details.variant)// Variant name, if applicable
print(details.reason)// Description of why this value was chosen
print(details.errorCode)// The error that occurred during evaluation, if any
API の比較
このテーブルは、OpenFeature および FlagsClient API の主な違いを強調しており、要件に合ったインテグレーションを選択する上で役立ちます。