Skip to main content
Documentation for version v73

Public SDK API

class AltcraftSDK
AltcraftSDK
// Entry-point singleton of the SDK
├─ public static let shared: AltcraftSDK
// Initialize SDK with configuration (completion is called on main)
├─ public func initialization(configuration: AltcraftConfiguration?, completion: ((Bool) -> Void)? = nil): Void
// Set App Group and initialize Core Data inside the shared container
├─ public func setAppGroup(groupName: String): Void
// Register a JWT provider
├─ public func setJWTProvider(provider: JWTInterface): Void
// Full SDK data cleanup (cache/DB/settings), then call completion
├─ public func clear(completion: (() -> Void)? = nil): Void
|
// SDK event stream (single active subscriber)
├─ public let eventSDKFunctions: SDKEvents
// Subscribe to SDK events (replaces the existing subscriber)
│ ├─ func subscribe(callback: @escaping (Event) -> Void): Void
// Unsubscribe from events (callback stays assigned but delivery stops)
│ ├─ func unsubscribe(): Void
// Event model (base type for all events/errors)
│ ├─ Event
│ │ id: UUID
│ │ function: String
│ │ message: String?
│ │ eventCode: Int?
│ │ value: [String: Any?]?
│ │ date: Date
│ │ init(...)
│ │ static func ==(...)
│ │ func hash(into hasher: inout Hasher)
│ │
│ │ // Non-retryable errors (4xx)
│ │ ErrorEvent : Event
│ │
│ │ // Retryable errors (typically 5xx)
│ │ RetryEvent : ErrorEvent
|
// Push-token and provider management (FCM/HMS/APNs)
├─ public let pushTokenFunction: PublicPushTokenFunctions
// Set Firebase Cloud Messaging provider (nil = remove)
│ ├─ public func setFCMTokenProvider(_ provider: FCMInterface?): Void
// Set Huawei Mobile Services provider (nil = remove)
│ ├─ public func setHMSTokenProvider(_ provider: HMSInterface?): Void
// Set Apple Push Notification service provider (nil = remove)
│ ├─ public func setAPNSTokenProvider(_ provider: APNSInterface?): Void
// Get current push token (async)
│ ├─ public func getPushToken(completion: ((TokenData?) -> Void)? = nil): Void
// Save token manually (String for FCM/HMS, Data for APNs)
│ ├─ public func setPushToken(provider: String, pushToken: Any?): Void
// Update provider priority list and refresh the token
│ ├─ public func changePushProviderPriorityList(_ list: [String]): Void
// Delete provider token
│ ├─ public func deleteDeviceToken(provider: String, completion: @escaping () -> Void): Void
// Force token update (determine provider → delete (except APNs) → request new)
│ └─ public func forcedTokenUpdate(completion: (() -> Void)? = nil): Void
|
// Push subscription management
├─ public let pushSubscriptionFunctions: PublicPushSubscriptionFunctions
// Subscribe (status = SUBSCRIBED)
│ ├─ public func pushSubscribe(...): Void
// Unsubscribe (status = UNSUBSCRIBED)
│ ├─ public func pushUnSubscribe(...): Void
// Suspend (status = SUSPENDED)
│ ├─ public func pushSuspend(...): Void
// UnSuspend subscription (no retries/persistence)
│ ├─ public func unSuspendPushSubscription(
│ │ completion: @escaping (ResponseWithHttp?) -> Void
│ │ ): Void
// Status of latest subscription
│ ├─ public func getStatusOfLatestSubscription(...): Void
// Status matching current token/provider
│ ├─ public func getStatusForCurrentSubscription(...): Void
// Status of last subscription for a provider
│ └─ public func getStatusOfLatestSubscriptionForProvider(...): Void

// Functional profile field (set/incr/etc.)
│ └─ public func actionField(key: String) -> ActionFieldBuilder
|
// Manual push event dispatch (delivery/open)
├─ public let pushEventFunctions: PublicPushEventFunctions
│ ├─ public func deliveryEvent(from request: UNNotificationRequest): Void
│ └─ public func openEvent(from request: UNNotificationRequest): Void
|
// Background task registration (BGAppRefreshTask)
├─ public let backgroundTasks: BackgroundTasks
│ └─ public func registerBackgroundTask(): Void
|
// Notification management (UNUserNotificationCenter delegate)
├─ public let notificationManager: NotificationManager
├─ func registerForPushNotifications(...)
├─ public func userNotificationCenter(...willPresent...)
└─ public func userNotificationCenter(...didReceive...)

class AltcraftNSE
AltcraftNSE
// Used inside Notification Service Extension (NSE)
├─ public static let shared: AltcraftNSE
├─ public let mobileEventFunctions: PublicMobileEventFunctions
├─ public func isAltcraftPush(_ request: UNNotificationRequest) -> Bool
├─ public func handleNotificationRequest(...): Void
├─ public func serviceExtensionTimeWillExpire(): Void
├─ public func setAppGroup(groupName: String): Void
└─ public func setJWTProvider(provider: JWTInterface): Void

class AltcraftConfiguration
AltcraftConfiguration
// Configuration class, created only via Builder.

├─ public class Builder
│ ├─ public init(): Builder
│ ├─ public func setApiUrl(_ url: String) -> Builder
│ ├─ func setRToken(_ rToken: String?) -> Builder
│ ├─ public func setAppInfo(_ info: AppInfo?) -> Builder
│ ├─ public func setProviderPriorityList(_ list: [String]?) -> Builder
│ └─ public func build() -> AltcraftConfiguration?

├─ public func getApiUrl() -> String
├─ public func getRToken() -> String?
├─ public func getAppInfo() -> AppInfo?
└─ public func getProviderPriorityList() -> [String]?

Structures
public struct TokenData: Codable {
public let provider: String
public let token: String
}

public struct AppInfo: Codable {
public var appID: String
public var appIID: String
public var appVer: String
}

public struct ResponseWithHttp {
public let httpCode: Int?
public let response: Response?
}

public struct Response: Codable {
public let error: Int?
public let errorText: String?
public let profile: ProfileData?
}

public struct ProfileData: Codable {
public let id: String?
public let status: String?
public let isTest: Bool?
public let subscription: SubscriptionData?
}

public struct SubscriptionData: Codable {
public let subscriptionId: String?
public let hashId: String?
public let provider: String?
public let status: String?
public let fields: [String: JSONValue]?
public let cats: [CategoryData]?
}

public struct CategoryData: Codable {
public var name: String?
public var title: String?
public var steady: Bool?
public var active: Bool?
}

public struct EmailSubscription: Subscription, Codable {
public let resourceId: Int
public let email: String
public let status: String?
public let priority: Int?
public let customFields: [String: JSONValue]?
public let cats: [String]?
public let channel: String = "email"
}

public struct SmsSubscription: Subscription, Codable {
public let resourceId: Int
public let phone: String
public let status: String?
public let priority: Int?
public let customFields: [String: JSONValue]?
public let cats: [String]?
public let channel: String = "sms"
}

public struct PushSubscription: Subscription, Codable {
public let resourceId: Int
public let provider: String
public let subscriptionId: String
public let status: String?
public let priority: Int?
public let customFields: [String: JSONValue]?
public let cats: [String]?
public let channel: String = "push"
}

public struct CcDataSubscription: Subscription, Codable {
public let resourceId: Int
public let channel: String
public let ccData: [String: JSONValue]
public let status: String?
public let priority: Int?
public let customFields: [String: JSONValue]?
public let cats: [String]?
}

public struct UTM: Codable {
public let campaign: String?
public let content: String?
public let keyword: String?
public let medium: String?
public let source: String?
public let temp: String?
}

Protocols

JWTInterface:

func getToken() -> String?

APNSInterface:

func getToken(completion: @escaping (String?) -> Void)

FCMInterface:

func getToken(completion: @escaping (String?) -> Void)
func deleteToken(completion: @escaping (Bool) -> Void)

HMSInterface:

func getToken(completion: @escaping (String?) -> Void)
func deleteToken(completion: @escaping (Bool) -> Void)

Subscription (protocol):

// Base protocol for all subscription types sent via mobile event