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 trackExperienceShown(
        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 trackExperiencesShown(
        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 trackExperienceClicked(
        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 offering_context attributes of the specific offering that was shown. The offering must have required attributes (moe_offering_id, moe_offering_name, moe_offering_type, moe_decision_policy_id, moe_decision_policy_name).

    Declaration

    Swift

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

    Parameters

    offeringAttributes

    The offering_context attributes of the offering that was shown.

    workspaceId

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

  • Tracks impression events for multiple offerings.

    Declaration

    Swift

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

    Parameters

    offeringsAttributes

    Array of offering_context attribute dictionaries for each offering shown.

    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. Only one offering can be clicked at a time — pass the attributes of the specific offering clicked.

    Declaration

    Swift

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

    Parameters

    campaign

    The experience campaign containing the clicked offering.

    offeringAttributes

    The offering_context attributes of the specific offering that was clicked.

    workspaceId

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