NativebrikExperiment

定義

public class NativebrikExperiment {
    // dispatching an event to the experiment
    public func dispatch(_ event: NativebrikEvent)

    // embedding a component for swiftui and uikit
    public func embedding(
        _ id: String,
        arguments: Any? = nil,
        onEvent: ((_ event: ComponentEvent) -> Void)? = nil
    ) -> some View
    public func embedding<V: View>(
        _ id: String,
        arguments: Any? = nil,
        onEvent: ((_ event: ComponentEvent) -> Void)? = nil,
        @ViewBuilder content: (@escaping (_ phase: AsyncEmbeddingPhase) -> V)
    ) -> some View
    public func embeddingUIView(
        _ id: String,
        arguments: Any? = nil,
        onEvent: ((_ event: ComponentEvent) -> Void)? = nil
    ) -> UIView
    public func embeddingUIView(
        _ id: String,
        arguments: Any? = nil,
        onEvent: ((_ event: ComponentEvent) -> Void)?,
        content: @escaping (_ phase: EmbeddingPhase) -> UIView
    ) -> UIView

    // remote config
    public func remoteConfig(_ id: String, phase: @escaping ((_ phase: RemoteConfigPhase) -> Void)) -> RemoteConfig
    // remote config as view
    public func remoteConfigAsView<V: View>(_ id: String, @ViewBuilder phase: @escaping ((_ phase: RemoteConfigPhase) -> V)) -> some View

    // overlay
    public func overlay() -> some View
    public func overlayViewController() -> UIViewController
}

.dispatch

NativebrikEvent をディスパッチして、エクスペリメントをトリガーしたり、アプリのKPIを追跡できます:

nativebrik
    .experiment
    .dispatch(NativebrikEvent("your_custom_event_name"))

NativebrikEvent について

.embedding an embedding experiment

Nativebrik のエディタで作成されたエクスペリメントを、特定の場所に埋め込むことができます:

コード側では、エクスペリメントIDまたは任意のカスタムIDを設定し、使用できます。 場所ごとにカスタムIDを事前に設定しておくことをお勧めします。これにより、コードを編集せずに、Nativebrik の管理画面で柔軟にエクスペリメントを変更できます。

struct YourView: View {
    @EnvironmentObject var nativebrik: NativebrikClient
    var body: some View {
        nativebrik
            .experiment
            .embedding("<EXPERIMENT_ID> or <EXPERIMENT_CUSTOME_ID>")
            .frame(height: 200) // recommended: set the frmae size
    }
}

.embedding an embedding experiment adding an event handler

埋め込みタイプのエクスペリメントに、イベントハンドラーを追加することができます:

nativebrik
    .experiment
    .embedding("<EXPERIMENT_ID> or <EXPERIMENT_CUSTOME_ID>") { event in
        print(event)
    }
    .frame(height: 200)

.embedding an embedding experiment with AsyncComponentPhase/ComponentPhase

swiftui

SwiftUI では、AsyncEmbeddingPhase を使って、読み込み中、失敗、完了の各フェーズでビューをカスタマイズできます:

nativebrik
    .experiment
    .embedding("<EXPERIMENT_ID> or <EXPERIMENT_CUSTOME_ID>", onEvent: nil) { phase in
        switch phase {
        case .loading:
            Text("loading")
        case .notFound:
            Text("not found")
        case .failed:
            Text("error")
        case .completed(let component):
            component.frame(height: 200)
        }
    }

uikit

UIKit では、EmbeddingPhase を使って、読み込み中、失敗、完了の各フェーズでビューをカスタマイズできます:

let uiview = nativebrik
    .experiment
    .embeddingUIView("<EXPERIMENT_ID> or <EXPERIMENT_CUSTOME_ID>", onEvent: nil) { phase in
        switch phase {
        case .loading:
            return UILabel(text: "loading")
        case .notFound:
            return UILabel(text: "not found")
        case .failed:
            return UILabel(text: "error")
        case .completed(let component):
            return component
        }
    }

.remoteConfigAsView (for SwiftUI)

アプリ全体のUI/UXをA/Bテストしたい場合や、フィーチャーフラグとして使用する場合に便利な機能です。

RemoteConfigVariant を SwiftUI のビルダーコンテキスト内で取得するために .remoteConfigAsView を使用できます:

struct YourView: View {
    @EnvironmentObject var nativebrik: NativebrikClient
    var body: some View {
        nativebrik
            .experiment
            .remoteConfigAsView("<EXPERIMENT_ID> or <EXPERIMENT_CUSTOME_ID>") { phase in
                switch phase {
                case .completed(let configVariant):
                    Text(configVariant.getAsString("<KEY_IN_VARIANT_CONFIG>"))
                default:
                    Text("loading")
                }
            }
    }
}

RemoteConfigPhase について

.remoteConfig

.remoteConfig を使用し、どの場面でも RemoteConfigVariant を取得できます。

nativebrik
    .experiment
    .remoteConfig("<EXPERIMENT_ID> or <EXPERIMENT_CUSTOME_ID>") { phase in
        switch phase {
        case .completed(let variantConfig):
            print(variantConfig.getAsString("<KEY_IN_VARIANT_CONFIG>"))
        default:
            print("loading or error")
        }
    }

RemoteConfigPhase について

アドバンス設定

オーバーレイの登録

これは、Nativebrik アプリで作成されたポップアップエクスペリメントを管理するオーバーレイビューです。ポップアップを表示するには、アプリケーションにオーバーレイビューを追加する必要があります。

SwiftUI

NativebrikProvider をアプリケーションに追加すると、オーバーレイビューが自動的に追加されます。ただし、NativebrikProvider を使用したくない場合は、オーバーレイビューを手動で追加することもできます。

SwiftUI アプリケーションにオーバーレイビューを追加:

@main
struct YourApp: App {
    let nativebrikClientContext: NativebrikClient = NativebrikClient(projectId: "<YOUR_PROJECT_ID>")

    var body: some Scene {
        WindowGroup {
            ZStack(alignment: .top) {
                // the overlay should be top to show popups in front
                self.nativebrikClientContext.experiment.overlay()
                // to access to the nativebrik client from child views
                ContentView().environmentObject(self.nativebrikClientContext)
            }
        }
    }
}

UIKit

UIKit アプリケーションにオーバーレイコントローラービューを追加:

// singleton
let nativebrik = {
    return NativebrikClient(projectId: "<YOUR_NATIVEBRIK_PROJECT_ID>")
}()

class YourViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        let overlay = nativebrik.experiment.overlayViewController()
        self.addChild(overlay)
        self.view.addSubview(overlay.view)
    }
}

Last updated