Contentful Personalization & Analytics
    Preparing search index...

    Contentful Logo

    Contentful Personalization & Analytics

    React Native Reference Implementation

    Readme · Guides · Reference · Contributing

    Warning

    The Optimization SDK Suite is pre-release (alpha). Breaking changes may be published at any time.

    This is a reference implementation for the Optimization React Native SDK and is part of the Contentful Optimization SDK Suite.

    All steps should be run from the monorepo root.

    1. Install pnpm packages:

      pnpm install
      
    2. Build and package SDK tarballs used by this implementation:

      pnpm run build:pkgs
      
    3. Install implementation dependencies:

      pnpm --dir implementations/react-native-sdk --ignore-workspace install --no-frozen-lockfile
      
    4. Ensure an Android emulator is available and running.

    See implementations/react-native-sdk/package.json for more commands.

    You can run this implementation from the monorepo root via the root package.json implementation scripts.

    1. Run the full Android E2E flow:

      pnpm run implementation:react-native-sdk -- test:e2e:android:full
      
    2. Build Android Detox binaries:

      pnpm run implementation:react-native-sdk -- test:e2e:android:build
      
    3. Run Android Detox tests only:

      pnpm run implementation:react-native-sdk -- test:e2e:android:run
      
    4. Pass script arguments through to the one-shot runner:

      pnpm run implementation:react-native-sdk -- test:e2e:android:full -- --test-file e2e/offline-behavior.test.js
      

    Android E2E tests use Detox.

    1. Run the one-shot Android E2E flow:

      pnpm --dir implementations/react-native-sdk --ignore-workspace test:e2e:android:full
      

      This command:

      • creates .env from .env.example for E2E
      • starts the mock server and Metro
      • configures adb reverse
      • builds the Android app (unless skipped)
      • runs Detox tests
      • cleans up background processes
    2. Useful one-shot variants:

      # Skip rebuild if app is already built
      SKIP_BUILD=true pnpm --dir implementations/react-native-sdk --ignore-workspace test:e2e:android:full

      # Run one test file
      pnpm --dir implementations/react-native-sdk --ignore-workspace test:e2e:android:full -- --test-file e2e/offline-behavior.test.js

      # Run tests matching a name pattern
      pnpm --dir implementations/react-native-sdk --ignore-workspace test:e2e:android:full -- -t "should recover gracefully when network is restored"
    3. Run Detox steps manually if needed:

      pnpm --dir implementations/react-native-sdk --ignore-workspace test:e2e:android:build
      pnpm --dir implementations/react-native-sdk --ignore-workspace test:e2e:android:run
    4. iOS commands:

      pnpm --dir implementations/react-native-sdk --ignore-workspace test:e2e:ios:build
      pnpm --dir implementations/react-native-sdk --ignore-workspace test:e2e:ios:run

    Local Android E2E logging is intentionally minimal by default.

    1. Enable script/service logs (Metro, mock server, and adb logcat stream):

      STREAM_BACKGROUND_LOGS=true ENABLE_DEVICE_LOGCAT=true METRO_VERBOSE=true pnpm --dir implementations/react-native-sdk --ignore-workspace test:e2e:android:full
      
    2. Increase Detox runner logging and artifacts:

      pnpm --dir implementations/react-native-sdk --ignore-workspace exec detox test --configuration android.emu.debug --loglevel trace --record-logs all --take-screenshots failing --record-videos failing
      
    3. Read generated logs:

      • implementations/react-native-sdk/logs/mock-server.log
      • implementations/react-native-sdk/logs/metro.log
      • implementations/react-native-sdk/logs/device.log
      • implementations/react-native-sdk/logs/test-results.log