let coreConfig = ConfigParams.coreConfig(consumerID: "<obtained from server>")
let cardConfig = ConfigParams.cardConfig()
var issuerParamsList: [ConfigParams.IssuerParams] = []
let card1 = ConfigParams.CardParams(cardID: "<obtained from server>",
cardArt: UIImage(named: "<image_name>")!, productTitle: "<product title>", last4: "<last4>")
let card2 = ConfigParams.CardParams(cardID: "<obtained from server>",
cardArt: UIImage(named: "<image_name>")!, productTitle: "<product title>", last4: "<last4>")
let card3 = ConfigParams.CardParams(cardID: "<obtained from server>",
cardArt: UIImage(named: "<image_name>")!, productTitle: "<product title>", last4: "<last4>")
let issuerParam1 = ConfigParams.IssuerParams(cardParams: card1, issuerID: "<issuerId 1>", consumerID: "<consumerId 1>")
let issuerParam2 = ConfigParams.IssuerParams(cardParams: card2, issuerID: "<issuerId 2>", consumerID: "<consumerId 2>")
let issuerParam3 = ConfigParams.IssuerParams(cardParams: card3, issuerID: "<issuerId 2>", consumerID: "<consumerId 3>")
issuerParamsList.append(issuerParam1)
issuerParamsList.append(issuerParam2)
issuerParamsList.append(issuerParam3)
let walletExtensionConfig = ConfigParams.walletExtensionConfig(issuerParamsList: issuerParamsList,
appGroupID: "<App Group ID defined in app capabilities>")
d1Task.configure([coreConfig, cardConfig, walletExtensionConfig]) { errors in
if let errors = errors {
for error in errors {
// Inspect errors to identify which configuration failed
// Refer to the D1 SDK integration error management section
}
}
}
// Save issuerId values for use during wallet extension authentication
saveToKeychain(key: "issuerID1", value: "<issuerId 1>")
saveToKeychain(key: "issuerID2", value: "<issuerId 2>")
func saveToKeychain(key: String, value: String) {
guard let valueData = value.data(using: .utf8) else {
return
}
let query: [String: Any] = [kSecClass as String: kSecClassGenericPassword,
kSecAttrService as String: "<service associated, e.g. IssuerAppService>",
kSecAttrAccessGroup as String: "<App Group ID defined in app capabilities>",
kSecAttrAccount as String: key]
var addQuery = query
addQuery[kSecValueData as String] = valueData
let status = SecItemAdd(addQuery as CFDictionary, nil)
if status == errSecDuplicateItem {
let updatedData: [String: Any] = [kSecValueData as String: valueData]
SecItemUpdate(query as CFDictionary, updatedData as CFDictionary)
}
}