Apple Pay in-app ID&V
Last updated
Was this helpful?
Was this helpful?
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
guard let components = URLComponents(url: url, resolvingAgainstBaseURL: true) else {
// handle error e.g. logging
return false
}
guard let queryItems = components.queryItems else {
// handle error e.g. logging
return false
}
// example of checking the query items
let containsPassTypeIdentifier = queryItems.contains(where: { $0.name == "passTypeIdentifier" && $0.value == "paymentpass.com.apple" })
let containsSerialNumber = queryItems.contains(where: { $0.name == "serialNumber" })
let containsAction = queryItems.contains(where: { $0.name == "action" })
let validated = containsPassTypeIdentifier && containsSerialNumber && containsAction
if validated {
// continue with activation
} else {
// handle error e.g. show error UI
}
return validated
}func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
guard let components = URLComponents(url: url, resolvingAgainstBaseURL: true) else {
// handle error e.g. logging
return false
}
guard let queryItems = components.queryItems else {
// handle error e.g. logging
return false
}
var passTypeIdentifier: String? = nil
var serialNumber: String? = nil
var action: String? = nil
for queryItem in queryItems {
if queryItem.name == "passTypeIdentifier" {
passTypeIdentifier = queryItem.value
} else if queryItem.name == "serialNumber" {
serialNumber = queryItem.value
} else if queryItem.name == "action" {
action = queryItem.value
}
}
if let passTypeIdentifier = passTypeIdentifier,
let serialNumber = serialNumber,
action != nil {
let library = PKPassLibrary()
if let pendingPass = library.pass(withPassTypeIdentifier: passTypeIdentifier, serialNumber: serialNumber) {
if #available(iOS 13.4, *) {
if let primaryAccountNumberSuffix = pendingPass.secureElementPass?.primaryAccountNumberSuffix,
let deviceAccountIdentifier = pendingPass.secureElementPass?.deviceAccountIdentifier {
// continue with activation through SDK
}
} else {
if let primaryAccountNumberSuffix = pendingPass.paymentPass?.primaryAccountNumberSuffix,
let deviceAccountIdentifier = pendingPass.paymentPass?.deviceAccountIdentifier {
// continue with activation through SDK
}
}
}
return true
} else {
// handle error e.g. show error UI
return false
}
}