MoEngageSDKPersonalize

@objc
public class MoEngageSDKPersonalize : NSObject

Entry point for the MoEngage Personalization SDK.

Use this class to:

  • Fetch experience metadata (to discover available experiences)
  • Fetch experience campaign data for one or more experience keys
  • Track experience impression and click events
  • Track offering impression and click events

Singleton

  • Shared singleton instance.

    Declaration

    Swift

    @objc
    public static let sharedInstance: MoEngageSDKPersonalize

Metadata Fetch (Dual API Pattern)

  • Fetches metadata for experience campaigns from the MoEngage backend (Swift-only).

    Use this API from Swift code for native enum support with full type safety. Use this to discover available experiences and their statuses before fetching full campaign data.

    Example

    // Multiple statuses
    MoEngageSDKPersonalize.sharedInstance.fetchExperiencesMeta(
        status: [.active, .paused],
        onSuccess: { metadata in
            print("Found \(metadata.experienceCampaignMeta.count) experiences")
        },
        onFailure: { error in
            print("Error: \(error.message)")
        }
    )
    
    // Single status
    MoEngageSDKPersonalize.sharedInstance.fetchExperiencesMeta(
        status: [.active],
        onSuccess: { metadata in /* ... */ },
        onFailure: { error in /* ... */ }
    )
    
    // All statuses
    MoEngageSDKPersonalize.sharedInstance.fetchExperiencesMeta(
        status: [],
        onSuccess: { metadata in /* ... */ },
        onFailure: { error in /* ... */ }
    )
    

    Declaration

    Swift

    public func fetchExperiencesMeta(
        status: [MoEngageExperienceStatus],
        onSuccess: @escaping MoEngageMetaSuccessCallback,
        onFailure: @escaping MoEngagePersonalizeFailureCallback,
        workspaceId: String? = nil
    )

    Parameters

    status

    Filter by experience status. Pass an empty array [] to fetch all statuses.

    onSuccess

    Called on the main thread with metadata wrapper containing source and list of experience metadata.

    onFailure

    Called on the main thread with a MoEngageExperienceFailureReason on SDK-level error.

    workspaceId

    Optional MoEngage workspace (App ID). nil uses the default workspace.

  • Fetches metadata for experience campaigns from the MoEngage backend (Objective-C compatible).

    Use this API from Objective-C code. Pass status values as boxed NSNumbers using the MoEngageExperienceStatus enum constants.

    Objective-C Example

    // Multiple statuses
    NSArray<NSNumber *> *statuses = @[
        @(MoEngageExperienceStatusActive),
        @(MoEngageExperienceStatusPaused)
    ];
    [[MoEngageSDKPersonalize sharedInstance]
        fetchExperiencesMetaWithStatusRawValues:statuses
        onSuccess:^(MoEngageExperienceCampaignMetaData *metadata) {
            NSLog(@"Found %lu experiences", (unsigned long)metadata.experienceCampaignMeta.count);
        }
        onFailure:^(MoEngageExperienceFailureReason *error) {
            NSLog(@"Error: %@", error.message);
        }
        workspaceId:nil];
    
    // Single status
    [[MoEngageSDKPersonalize sharedInstance]
        fetchExperiencesMetaWithStatusRawValues:@[@(MoEngageExperienceStatusActive)]
        onSuccess:^(MoEngageExperienceCampaignMetaData *metadata) { /* ... */ }
        onFailure:^(MoEngageExperienceFailureReason *error) { /* ... */ }
        workspaceId:nil];
    
    // All statuses
    [[MoEngageSDKPersonalize sharedInstance]
        fetchExperiencesMetaWithStatusRawValues:@[]
        onSuccess:^(MoEngageExperienceCampaignMetaData *metadata) { /* ... */ }
        onFailure:^(MoEngageExperienceFailureReason *error) { /* ... */ }
        workspaceId:nil];
    

    Note

    For Swift code, use fetchExperiencesMeta(status:onSuccess:onFailure:workspaceId:) which accepts [MoEngageExperienceStatus] directly.

    Declaration

    Swift

    @objc(fetchExperiencesMetaWithStatusRawValues:onSuccess:onFailure:workspaceId:)
    public func fetchExperiencesMetaObjC(
        statusRawValues: [NSNumber],
        onSuccess: @escaping MoEngageMetaSuccessCallback,
        onFailure: @escaping MoEngagePersonalizeFailureCallback,
        workspaceId: String? = nil
    )

    Parameters

    statusRawValues

    Array of NSNumber containing MoEngageExperienceStatus raw values. Pass empty array @[] to fetch all statuses. Invalid values are filtered out.

    onSuccess

    Called on the main thread with metadata wrapper containing source and list of experience metadata.

    onFailure

    Called on the main thread with a MoEngageExperienceFailureReason on SDK-level error.

    workspaceId

    Optional MoEngage workspace (App ID). nil uses the default workspace.

Single Experience Fetch

  • Fetches campaign data for a single experience key.

    Uses cache-first strategy: checks local cache first, falls back to network if cache is missing or expired.

    Declaration

    Swift

    @objc
    public func fetchExperience(
        experienceKey: String,
        attributes: [String: String] = [:],
        onSuccess: @escaping MoEngageExperienceSuccessCallback,
        onFailure: @escaping MoEngagePersonalizeFailureCallback,
        workspaceId: String? = nil
    )

    Parameters

    experienceKey

    The experience key to fetch.

    attributes

    Optional custom key-value attributes sent with the request.

    onSuccess

    Called on the main thread with the result containing experiences and/or failures.

    onFailure

    Called on the main thread with a MoEngageExperienceFailureReason on SDK-level error.

    workspaceId

    Optional MoEngage workspace (App ID). nil uses the default workspace.

Multiple Experience Fetch

Experience Tracking

  • Tracks an impression event for a single experience campaign.

    Declaration

    Swift

    @objc
    public func experienceShown(
        campaign: MoEngageExperienceCampaign,
        workspaceId: String? = nil
    )

    Parameters

    campaign

    The experience campaign that was shown.

    workspaceId

    Optional MoEngage workspace (App ID). nil uses the default workspace.

  • Tracks impression events for multiple experience campaigns.

    Declaration

    Swift

    @objc
    public func experiencesShown(
        campaigns: [MoEngageExperienceCampaign],
        workspaceId: String? = nil
    )

    Parameters

    campaigns

    The experience campaigns that were shown.

    workspaceId

    Optional MoEngage workspace (App ID). nil uses the default workspace.

  • Tracks a click event for a single experience campaign.

    Declaration

    Swift

    @objc
    public func experienceClicked(
        campaign: MoEngageExperienceCampaign,
        workspaceId: String? = nil
    )

    Parameters

    campaign

    The experience campaign that was clicked.

    workspaceId

    Optional MoEngage workspace (App ID). nil uses the default workspace.

Offering Tracking

  • Tracks an impression event for a specific offering.

    Pass the full offering dict from the campaign payload. The SDK extracts offering_context internally.

    Declaration

    Swift

    @objc
    public func offeringShown(
        offeringPayload: [String: Any],
        workspaceId: String? = nil
    )

    Parameters

    offeringPayload

    The full offering dict — one element from the offerings array parsed from campaign.payload.

    workspaceId

    Optional MoEngage workspace (App ID). nil uses the default workspace.

  • Tracks impression events for multiple offerings.

    Declaration

    Swift

    @objc
    public func offeringsShown(
        offeringPayloads: [[String: Any]],
        workspaceId: String? = nil
    )

    Parameters

    offeringPayloads

    Array of full offering dicts from the campaign payload.

    workspaceId

    Optional MoEngage workspace (App ID). nil uses the default workspace.

  • Tracks a click event for a specific offering within an experience campaign.

    Fires both MOE_PERSONALIZATION_MESSAGE_CLICKED (experience-level) and MOE_OFFERING_CLICKED (offering-level) events.

    Declaration

    Swift

    @objc
    public func offeringClicked(
        campaign: MoEngageExperienceCampaign,
        offeringPayload: [String: Any],
        workspaceId: String? = nil
    )

    Parameters

    campaign

    The experience campaign containing the clicked offering.

    offeringPayload

    The full offering dict from the campaign payload.

    workspaceId

    Optional MoEngage workspace (App ID). nil uses the default workspace.

Deprecated Experience Tracking

Deprecated Offering Tracking