---
title: "Connect with Unreal"
description: "Connect an Unreal mobile game through Blueprint or C++ and verify native Experience delivery."
sidebar:
  label: "Unreal"
search:
  tags: ["sdk", "setup", "unreal"]
  keywords: ["Blueprint", "C++", "Unreal", "install", "initialize", "integration_test"]
---

The Unreal plugin displays Nuxie Experiences above your game and provides Blueprint and C++ APIs for events, purchases, and feature access. Publish or update an onboarding flow or paywall without packaging a new build. Use UE 5.8.2 with its mobile platform components; the mobile defaults target iOS 17+ and Android SDK 35.

1. **Installation**

    <span id="add-the-plugin" />

    ## Installation [toc]

    Copy the prepared plugin into `Plugins/Nuxie`, enable **Nuxie**, and restart the editor. Enter your public keys under **Project Settings → Nuxie**. Only the current platform's key is required.

    ### Prepare the plugin

    From the [Unreal SDK checkout](https://github.com/nuxieai/nuxie-ue), use macOS with UE 5.8.2, its iOS and Android components, Xcode, JDK 21, Python 3, and the Android SDK/NDK required by Unreal. Set `UNREAL_ENGINE_ROOT`, `JAVA_HOME`, and `ANDROID_HOME` to your installed toolchain paths.

    Build the native dependencies, then package the plugin:

    ```sh title="Prepare the Unreal plugin"
    python3 scripts/prepare-android.py
    bash ThirdParty/IOS/scripts/build-framework.sh
    python3 scripts/package.py --platforms IOS+Android+Mac --output dist/prepared-mobile
    ```

    The output directory must be new. Copy the prepared plugin from `dist/prepared-mobile` into your game's `Plugins/Nuxie` directory. It includes the native frameworks, Android dependencies, and resources. Blueprint-only games use the same plugin. The [build guide](https://github.com/nuxieai/nuxie-ue/blob/main/docs/getting-started.md) includes the example project setup.

    <span id="configure-the-game-instance-subsystem" />

2. **Initialize**

    ## Initialize [toc]

    Copy your app's public keys from **Connect your app**. Use `pk_test_` keys in development builds and `pk_live_` keys in release builds. Keep the default service environment for both; the key selects preview or live content.

    In Blueprint, use **Get Project Options → Configure (Nuxie)** from GameInstance initialization. In C++, add `"Nuxie"` to your module dependencies and configure on the game thread:

    ```cpp title="GameInstance initialization" {7-8}
    #include "NuxieSubsystem.h"

    UNuxieSubsystem* Nuxie =
        GetGameInstance()->GetSubsystem<UNuxieSubsystem>();

    FNuxieOptions Options;
    Options.IOSPublicKey = TEXT("YOUR_IOS_PUBLIC_KEY");
    Options.AndroidPublicKey = TEXT("YOUR_ANDROID_PUBLIC_KEY");

    Nuxie->Configure(Options, FNuxieCompletion::CreateLambda(
        [](const FNuxieResult& Result)
        {
            if (!Result.IsSuccess())
            {
                // Surface Result.GetError() through your game's error UI.
                return;
            }
            // Enable interactions that depend on the configured client.
        }));
    ```

    Wait for successful completion before calling the client. The subsystem continues across map travel.

    <span id="check-the-connection" />

    Run your app on a device or simulator. **Connect your app** shows **Connected** after Nuxie receives a request from the SDK.

    <span id="prepare-the-experience-you-will-test" />
    <span id="add-a-test-trigger" />

3. **Trigger an Experience**

    ## Trigger an Experience [toc]

    [Publish an Experience](/docs/guides/publishing) for this app with the event trigger `integration_test`. Set its re-entry rule to **Every time** if you want to show it repeatedly while integrating. Add this call to a button handler after setup:

    ```cpp
    Nuxie->Trigger(
        TEXT("integration_test"),
        FNuxieProperties{},
        FNuxieCompletion::CreateLambda([](const FNuxieResult& Result) {
            if (!Result.IsSuccess()) {
                // Surface Result.GetError() through your game's error UI.
            }
        })
    );
    ```

    Tapping the button sends the event. Nuxie displays the Experience when the customer matches its audience and delivery rules. For an existing Experience, replace `integration_test` with its published event name.

    <span id="show-the-experience" />

    **Connect your app** changes to **Shown** after the SDK reports that the Experience appeared. For games, run this in an iOS or Android player or export. Your game controls pause, audio, and input while the Experience is visible.

    <span id="try-a-remote-update" />

4. **Update an Experience**

    ## Update an Experience [toc]

    Edit the Experience and publish your changes. Bring the app back to the foreground to fetch the update, then send the event again with a customer who can re-enter. New Journeys use the updated version; a Journey already in progress keeps the version it started with. The app code stays the same.

    <span id="continue" />

    See the [SDK reference](/docs/reference/unreal) for identity, feature access, and App Actions. [Delivery](/docs/guides/delivery) explains trigger and audience configuration.
