---
schema_version: "1"
id: 43b9d5c9481f1324b9cb67a9a6b4594535b5360259236544337db3017598696b
title: Architecture Reference - React Native
collection: developer
version: current
locale: en-us
portal_url: https://docs.salesforce.com/developer/current/en-us/genai/agentforce-mobile-sdk/references/react-native/architecture-integration-react-native.md
canonical_url: https://developer.salesforce.com/docs/ai/agentforce-mobile-sdk/references/agentforce-mobile-sdk/architecture-integration-react-native.html
source_site: developer.salesforce.com
content_type: documentation
content_hash: 196e50feef43669bb7b865482ef26dc34870d7627a6e19ea933aec343240f492
products:
  - Agentforce Mobile SDK
  - Agentforce and Einstein Generative AI
---
# Architecture Reference - React Native

Reference documentation for the architecture of the Agentforce Mobile SDK for React Native.

## Overview

The React Native Agentforce SDK is a bridge to the native iOS and Android SDKs, not a reimplementation. It provides a JavaScript API that delegates to platform-specific native modules.

```
┌─────────────────────────────────────────────────────┐
│                  React Native App                   │
│                                                     │
│  ┌─────────────────────────────────────────────┐   │
│  │       AgentforceService (JS Singleton)      │   │
│  └─────────────────────────────────────────────┘   │
│                         │                           │
│                    NativeModules                    │
│                         │                           │
├─────────────────────────┼───────────────────────────┤
│           iOS           │          Android          │
│  ┌──────────────────┐   │   ┌──────────────────┐   │
│  │ AgentforceModule │   │   │ AgentforceModule │   │
│  │     (Swift)      │   │   │     (Kotlin)     │   │
│  └──────────────────┘   │   └──────────────────┘   │
│           │             │            │              │
│  ┌──────────────────┐   │   ┌──────────────────┐   │
│  │  AgentforceSDK   │   │   │  agentforce-sdk  │   │
│  │   (CocoaPods)    │   │   │     (Maven)      │   │
│  └──────────────────┘   │   └──────────────────┘   │
└─────────────────────────┴───────────────────────────┘
```

## iOS Architecture

The iOS implementation uses Swift and CocoaPods.

### CocoaPods Setup

The bridge is distributed as a CocoaPods podspec with two subspecs:

| Subspec          | Dependencies                  | Use Case                            |
| ---------------- | ----------------------------- | ----------------------------------- |
| `Core` (default) | `React-Core`, `AgentforceSDK` | Service Agent only                  |
| `WithMobileSDK`  | `Core` + `SalesforceSDKCore`  | Service Agent + Employee Agent auth |

### Source File Layout

```
ios/
  ReactNativeAgentforce.podspec
  Agentforce/
    AgentforceModule.swift          -- Main native module (RCTEventEmitter subclass)
    BridgeLogger.swift              -- Log forwarding bridge
    BridgeNavigation.swift          -- Navigation event bridge
    BridgeHiddenPreChat.swift       -- Hidden prechat field delegate
    ServiceAgentManager.swift       -- Legacy Service Agent manager
    Models/
      AgentMode.swift               -- Service/Employee mode enum
    Providers/
      UnifiedCredentialProvider.swift -- Credential provider for both modes
      BridgeViewProvider.swift       -- Custom view provider bridge
```

### Native Module Registration

`AgentforceModule` is a subclass of `RCTEventEmitter`:

```swift
@objc(AgentforceModule)
class AgentforceModule: RCTEventEmitter {
    override static func requiresMainQueueSetup() -> Bool { return true }
    override func supportedEvents() -> [String]! {
        return ["onLogMessage", "onNavigationRequest"]
    }
}
```

### UserDefaults Keys

| Key                                  | Type     | Purpose                        |
| ------------------------------------ | -------- | ------------------------------ |
| `AgentforceFF_enableMultiAgent`      | `Bool`   | Multi-agent feature flag       |
| `AgentforceFF_enableMultiModalInput` | `Bool`   | Multi-modal input feature flag |
| `AgentforceFF_enablePDFUpload`       | `Bool`   | PDF upload feature flag        |
| `AgentforceFF_enableVoice`           | `Bool`   | Voice feature flag             |
| `EmployeeAgentId`                    | `String` | Stored Employee Agent ID       |

## Android Architecture

The Android implementation uses Kotlin and Gradle.

### Gradle Setup

Key settings from the bridge's `android/build.gradle`:

```gradle
android {
    namespace = "com.salesforce.android.reactagentforce"
    compileSdk 36
    defaultConfig {
        minSdkVersion 29
        targetSdkVersion 36
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_17
        targetCompatibility JavaVersion.VERSION_17
        coreLibraryDesugaringEnabled true
    }
    buildFeatures {
        compose = true
    }
}
```

### Maven Repositories

```gradle
repositories {
    google()
    mavenCentral()
    maven { url 'https://jitpack.io' }
    maven { url 'https://opensource.salesforce.com/AgentforceMobileSDK-Android/agentforce-sdk-repository' }
    maven { url 'https://s3.amazonaws.com/inapp.salesforce.com/public/android' }
    maven { url 'https://s3.amazonaws.com/salesforce-async-messaging-experimental/public/android' }
}
```

### Key Dependencies

| Dependency         | Scope                 | Version    | Purpose                                   |
| ------------------ | --------------------- | ---------- | ----------------------------------------- |
| `agentforce-sdk`   | api                   | 14.97.1    | Core Agentforce SDK                       |
| `SalesforceReact`  | compileOnly           | 13.1.1     | Mobile SDK (host app provides at runtime) |
| `compose-bom`      | implementation        | 2024.02.00 | Jetpack Compose BOM                       |
| `desugar_jdk_libs` | coreLibraryDesugaring | 2.1.5      | Java 8+ API desugaring                    |

### Source File Layout

```
android/src/main/java/com/salesforce/android/reactagentforce/
  AgentforcePackage.kt              -- ReactPackage registration
  AgentforceModule.kt               -- Main native module (@ReactMethod)
  AgentforceConversationActivity.kt -- Compose Activity for conversation UI
  AgentforceClientHolder.kt         -- Static holder for client/conversation
  EmployeeAgentAuthBridge.kt        -- Mobile SDK auth bridge
  BridgeLogger.kt                   -- Log forwarding
  BridgeNavigation.kt               -- Navigation event forwarding
  BridgeHiddenPreChat.kt            -- Hidden prechat field storage
  models/
    AgentMode.kt                    -- Service/Employee mode sealed class
  providers/
    UnifiedCredentialProvider.kt    -- Credential provider for both modes
    BridgeViewProvider.kt           -- Custom view provider bridge
```

### Native Package Registration

`AgentforcePackage` registers native modules dynamically:

```kotlin
class AgentforcePackage : ReactPackage {
    override fun createNativeModules(reactContext: ReactApplicationContext): List<NativeModule> {
        val modules = mutableListOf<NativeModule>(AgentforceModule(reactContext))
        if (isMobileSdkAvailable()) {
            modules.add(EmployeeAgentAuthBridge(reactContext))
        }
        return modules
    }
}
```

The Mobile SDK check uses reflection. If not found, `EmployeeAgentAuthBridge` isn't registered.

### SharedPreferences

| Preferences File          | Keys                                                                                                      | Purpose                  |
| ------------------------- | --------------------------------------------------------------------------------------------------------- | ------------------------ |
| `AgentforceFeatureFlags`  | `enableMultiAgent`, `enableMultiModalInput`, `enablePDFUpload`, `enableVoice`, `enableCustomViewProvider` | Feature flags            |
| `AgentforceEmployeeAgent` | `employee_agent_id`                                                                                       | Stored Employee Agent ID |

## Event Communication

Events flow from native to JS via `NativeEventEmitter`:

| Event                 | Payload                      | Description                   |
| --------------------- | ---------------------------- | ----------------------------- |
| `onLogMessage`        | `{ level, message, error? }` | SDK log message               |
| `onNavigationRequest` | `{ type, ...fields }`        | Navigation request from agent |

## See Also

- [Configuration Reference](https://developer.salesforce.com/docs/ai/agentforce-mobile-sdk/references/agentforce-mobile-sdk/configuration-overview-react-native.md)
- [Limitations Guide](/docs/ai/agentforce-mobile-sdk/guide/react-native/agentforce-mobile-sdk-react-native-limitations)
