Customize the StorageClient
The ForgeRock Authenticator default storage client utilizes both Apple’s Keychain Service, and Secure Enclave.
This means that the ForgeRock Authenticator module safely stores all shared secrets, account information, and notifications.
You can also customize the StorageClient
.
You can implement the StorageClient
protocol,
and register your own StorageClient
with the ForgeRock Authenticator module.
For example, you could customize StorageClient
to use SQLite, CoreData, or any other storage destination.
The ForgeRock Authenticator module uses your storage client and manages all data through that client.
To customize StorageClient
you must implement the following interfaces:
/// StorageClient protocol represents predefined interfaces and protocols for FRAuthenticator's storage method.
public protocol StorageClient {
/// Stores Account object into Storage Client and returns discardable Boolean result of operation.
/// - Parameter account: Account object to store.
@discardableResult func setAccount(account: Account) -> Bool
/// Removes Account object from Storage Client, and returns discardable Boolean result of operation.
/// - Parameter account: Account object to remove.
@discardableResult func removeAccount(account: Account) -> Bool
/// Retrieves Account object with its unique identifier.
/// - Parameter accountIdentifier: String value of Account's unique identifier.
func getAccount(accountIdentifier: String) -> Account?
/// Retrieves all Account objects stored in Storage Client.
func getAllAccounts() -> [Account]
/// Stores Mechanism object into Storage Client, and returns discardable Boolean result of operation.
/// - Parameter mechanism: Mechanism object to store.
@discardableResult func setMechanism(mechanism: Mechanism) -> Bool
/// Removes Mechanism object from Storage Client, and returns discardable Boolean result of operation.
/// - Parameter mechanism: Mechanism object to remove.
@discardableResult func removeMechanism(mechanism: Mechanism) -> Bool
/// Retrieves all Mechanism objects stored in Storage Client.
/// - Parameter account: Account object that is associated with Mechanism(s).
func getMechanismsForAccount(account: Account) -> [Mechanism]
/// Retrieves Mechanism object with given Mechanism UUID.
/// - Parameter uuid: UUID of Mechanism.
func getMechanismForUUID(uuid: String) -> Mechanism?
/// Stores PushNotification object into Storage Client, and returns discardable Boolean result of operation.
/// - Parameter notification: PushNotification object to store.
@discardableResult func setNotification(notification: PushNotification) -> Bool
/// Removes PushNotification object from Storage Client, and returns discardable Boolean result of operation.
/// - Parameter notification: PushNotification object to remove.
@discardableResult func removeNotification(notification: PushNotification) -> Bool
/// Retrieves all Notification objects from Storage Client with given Mechanism object.
/// - Parameter mechanism: Mechanism object that is associated with Notification(s).
func getAllNotificationsForMechanism(mechanism: Mechanism) -> [PushNotification]
/// Returns whether or not StorageClient has any data stored.
@discardableResult func isEmpty() -> Bool
}
For each method of getting an For example, when retrieving |
After implementing your custom StorageClient
, register it with your FRAClient
as follows:
// Initiate your custom StorageClient
let customStorageClient = CustomStorageClient()
// Register it with your FRAClient
FRAClient.setStorage(storage: customStorageClient)
// Initiate the SDK
FRAClient.start()
You must register the Once the SDK starts, the |