PulsateManager Methods
PULPulsateManager is the umbrella API surface for the SDK. Obtain it from the factory once the SDK is initialized:
import PULPulsate
let manager = PULPulsateFactory.getDefaultInstance() // Optional — nil if not yet createdThe sections below group the public instance API by topic. Each callback method takes a RequestListener:
public typealias RequestListener = (Bool, Error?) -> Voidpublic typealias Completion = () -> VoidTwo enums are used by the methods below:
@objc public enum PULUserGender: Int { case pulMale case pulFemale}
@objc public enum PULPrivacyLevel: Int { case pulPrivacySubscribed case pulPrivacyUnsubscribed}Delegates
Section titled “Delegates”/// Receives callbacks when the SDK tries to open the feed for an unauthorized user./// The action is blocked and you get a callback to run your own auth flow (login, PIN, etc.)./// After authorizing, call setUserAuthorized(true), then showLastUnauthorizedMessage() to replay it.@IBOutlet public weak var unauthorizedDelegate: PULPulsateUnauthorizedManagerDelegate?
/// Receives callbacks when the SDK changes the badge count.@IBOutlet public weak var badgeDelegate: PULPulsateBadgeDelegate?Session
Section titled “Session”/// Starts the Pulsate session lifecycle for an anonymous user./// The first session must be started by you; subsequent sessions are handled automatically./// Start a session from an active view controller, not from the AppDelegate.func startPulsateSession(debugMode: Bool = false, _ listener: @escaping RequestListener)
/// Starts / switches the session for an identified user./// - Parameter alias: a unique identifier for this user in your system. An empty alias fails the listener.func startPulsateSession(forAlias alias: String, debugMode: Bool = false, withListener listener: @escaping RequestListener)
/// Logs out the current user and detaches this device from the alias, clearing notifications./// After logout, Pulsate can no longer reach this user with campaigns. This is close to a "soft delete";/// it is NOT a way to end a session (sessions end automatically on background).func logout(_ listener: @escaping RequestListener)
/// Forces the user/attribute sync that normally runs when the app enters the background. Debounced.func forceAttributeSync()
/// Triggers a user-data update pass.func startBackgroundUpdates(_ listener: @escaping RequestListener)
/// Returns the Pulsate device GUID used to identify the user.func getDeviceGuid() -> String?/// Builds the Pulsate feed/inbox navigation controller for you to present however you like.func getFeedNavigationController(completion: Completion? = nil) -> UINavigationController?
/// Dismisses a feed that was opened automatically (for example, by tapping a push notification).func closeAutomaticallyOpenedFeed()User profile data
Section titled “User profile data”All profile setters persist locally and sync when the app enters the background.
func updateFirstName(_ firstName: String?)func updateLastName(_ lastName: String?)func updateEmail(_ email: String?)
/// Phone number in E.164 format (validated against ^(\+)[0-9]{8,15}$), e.g. "+14085551234".func updatePhoneNumber(_ phoneNumber: String?)func getPhoneNumber() -> String?
func updateAge(_ age: Int)func updateGender(_ gender: PULUserGender)Custom attributes
Section titled “Custom attributes”Set, increment, and decrement custom attributes. Empty or nil keys/values are silently rejected.
func createAttribute(_ propertyName: String?, withString value: String?)func createAttribute(_ propertyName: String?, withDecimal number: NSDecimalNumber?)func createAttribute(_ propertyName: String?, withInteger number: Int)func createAttribute(_ propertyName: String?, withBoolean boolean: Bool)func createAttribute(_ propertyName: String?, withDate date: Date?)
func incrementIntegerAttribute(_ attributeName: String?, withInteger value: Int)func decrementIntegerAttribute(_ attributeName: String?, withInteger value: Int)func incrementDecimalAttribute(_ attributeName: String?, withDecimal value: NSDecimalNumber?)func decrementDecimalAttribute(_ attributeName: String?, withDecimal value: NSDecimalNumber?)Events
Section titled “Events”func createEvent(_ event: String?)func createEvents(_ event: [Any]?)func createRevenueEvent(_ revenueEvent: PULRevenueEvent?)Deeplinks
Section titled “Deeplinks”/// Registers a handler for campaign/CTA links. Return true if your app consumed the link.func setPULPulsateLinkListener(_ listener: @escaping PULPulsateLinkListener)// public typealias PULPulsateLinkListener = (String) -> BoolPush, privacy & notification settings
Section titled “Push, privacy & notification settings”/// Enable/disable Pulsate push (60s debounce).func setPushNotificationEnabled(_ enabled: Bool)func isPushNotificationEnabled() -> Bool
/// Set subscribed/unsubscribed privacy (60s debounce).func setPrivacy(_ privacyLevel: PULPrivacyLevel)func getPrivacy() -> Int
/// Enable/disable geofencing (60s debounce).func setLocationUpdatesEnabled(_ enabled: Bool)func isLocationEnabled() -> Bool
func enable(inAppNotification enabled: Bool)func isInAppNotificationEnabled() -> Bool
func setSmallInAppNotificationDuration(_ seconds: Int)func getSmallInAppNotificationDuration() -> Int
/// Re-shows the last in-app notification. In-app notifications must be enabled.func showLastInAppNotification(_ forceShow: Bool = false)
/// Toggle whether the user's initials (vs. an anonymous icon) are used for the avatar. Default: enabled.func useInitials(forUserAvatar useInitials: Bool)func getUseInitialsForUserAvatar() -> Bool
/// Toggle the APNS sandbox vs. production environment.func setBuildEnvironment(isDebug enabled: Bool)Badge & notifications
Section titled “Badge & notifications”/// Requests the Pulsate badge count from the server; delivered via PULPulsateBadgeDelegate.badgeUpdated(_:).func getBadgeCount()
/// Fetches the unread feed count via completion handler.func getFeedUnreadCount(completion: @escaping (Int) -> Void)
/// Resets the app badge to 0 and clears delivered/pending notifications.func clearAllNotifications()Authorization
Section titled “Authorization”See User & Inbox Authorization for the full flow.
/// Marks the user authorized (default true) — controls whether gated messages are shown.func setUserAuthorized(_ authorized: Bool)func isUserAuthorized() -> Bool
/// Convenience: authorize + show queued in-app / unauthorized content.func userHasLoggedIn()
/// Convenience: de-authorize + disable in-app notifications.func userHasLoggedOut()
/// Shows the last message/card that was blocked while the user was unauthorized.func showLastUnauthorizedMessage()
/// Clears the pending unauthorized message.func removeUnauthorizedMessage()Location
Section titled “Location”/// If you deferred location at init, enable it later (defers the location prompt until now).func startLocation()
/// Swift-only. Returns the locally stored locations.func getAllLocations() -> [PULLocation]
/// Swift-only. Clears the stored locations.func resetStoredLocations() throwsAppDelegate proxy
Section titled “AppDelegate proxy”/// Returns Pulsate's delegate proxy for manual AppDelegate/UNUserNotificationCenter forwarding./// See "AppDelegate Configuration".func getPulsateSystemManager() -> (UIApplicationDelegate & UNUserNotificationCenterDelegate)?
