retrieveFromCredentialOffer

abstract fun retrieveFromCredentialOffer(credentialOfferIntentData: String): Flow<CredentialOfferEvent>

Start of the process of downloading and saving credentials. Returns events and errors through the process of offering an com.youniqx.walletsdk.attestation.Attestation for download to the app.

Return

Flow of CredentialOfferEvents

Example usage for Android:

private val infoResult: CompleteableDeferred<Unit>?  = null

suspend fun retrieveCredentialFromOffer(credentialOfferIntentData: String) {
walletSdk.attestations.retrieveFromCredentialOffer(credentialOfferIntentData).collect { event ->
when (event) {
is CredentialOfferEvent.InfoEvent -> {
// this contains information about the credential offered to the app
credentialOfferInfo = event.credentialOfferInfo
// save this event's result, it needs to be completed to continue the flow
infoResult = event.result
}
CredentialOfferEvent.InfoParsingError, // credential info not parsable
CredentialOfferEvent.ParsingError, // credential not parsable
CredentialOfferEvent.IssuanceError, // credential issuance fails
CredentialOfferEvent.NotImplementedError // trying to issue a credential type no implemented yet
-> {
// handle the error in the app
}
is CredentialOfferEvent.OpenUrlForAuthEvent -> {
// open url returned by event in browser or handle login process in the app
val url = event.authoriztationUrl
}
}
}
}

// complete the InfoEvent, continue with next (success) event -> CredentialOfferEvent.OpenUrlForAuthEvent
fun approveDownloadOfferedCredential() {
infoResult?.complete(Unit)
infoResult = null
}

Example usage for iOS:

public func fetchCredentialOffer(with _data: String) async
throws(CredentialOfferError) -> ([CredentialOfferInfo], URL?) {
var array: [CredentialOfferInfo] = []
for await value in WalletSdk.shared.attestations.retrieveFromCredentialOffer(credentialOfferIntentData: _data) {
if let error = CredentialOfferError.from(event: value) {
// handle error in the app
}
switch onEnum(of: value) {
case .infoEvent(let _event):
array = _event.credentialOfferInfo
_event.result.complete(value: KotlinUnit()) // Trigger to process for auth-url for download
continue
case .openUrlForAuthEvent(let _event):
let authURL = _event.authorizationUrl
return (array, URL(string: authURL))
// open url returned by event in browser or handle login process in the app
default:
// check if we are missing a new error code / event
// in CredentialOfferError.from(event: value)
}
}
return (array, nil)
}

Parameters

credentialOfferIntentData

the intent data of the credential offer