Skip to content

Commit

Permalink
0.2.0
Browse files Browse the repository at this point in the history
  • Loading branch information
davidwilliamsAdyen committed Nov 5, 2024
1 parent 2eb3c50 commit 721e973
Show file tree
Hide file tree
Showing 129 changed files with 3,897 additions and 181 deletions.
50 changes: 38 additions & 12 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,21 @@

## Installation

The SDK is available either through [Maven Central][maven] or via manual installation.
The SDK is available from [Maven Central](https://central.sonatype.com/artifact/com.adyen.issuing/provisioning).

### Import from Maven Central

1. Import the SDK by adding this line to your `build.gradle` file.
```kotlin
implementation("com.adyen.issuing:provisioning:0.1.1")
implementation("com.adyen.issuing:provisioning:0.2.0")
```

### Import manually

1. Copy the SDK package `adyen-provisioning-0.1.1.aar` to the `/libs` folder in your module.
1. Copy the SDK package `adyen-provisioning-0.2.0.aar` to the `/libs` folder in your module.
2. Import the SDK by adding this line to your module `build.gradle` file.
```kotlin
implementation("com.adyen.issuing:provisioning:0.1.1@aar")
implementation("com.adyen.issuing:provisioning:0.2.0@aar")
```

## Usage
Expand All @@ -29,19 +29,23 @@ The SDK interaction is performed through calls to an instance of `CardProvisioni
fun create(
sdkInput: String,
activityProvider: () -> Activity,
provisionCardRequestCode: Int = REQUEST_PROVISION_CARD
provisionCardRequestCode: Int, // Optional
createWalletRequestCode: Int // Optional
): CardProvisioningCreateResult
```

The `CardProvisioning` class utilises `suspend` functions which return when the requested operation has either completed or failed and return objects which can be queried for the request state, plus a function which serves to pass an `Activity` result into the SDK:

```kotlin
suspend fun hasWallet(): HasWalletResult
suspend fun createWallet(): CreateWalletResult
suspend fun canProvision(): CanProvisionResult
suspend fun getSdkOutput(): GetSdkOutputResult
suspend fun provision(sdkInput: String, cardDisplayName: String, cardAddress: CardAddress): ProvisionResult
fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?): Boolean
```

The underlying Google Wallet API makes use of the Android `onActivityResult()` API (now flagged as deprecated in Android). This means the process of provisioning cards involves an `Activity` from the client application and this `Activity` must forward the data passed to`onActivityResult()` into the Adyen provisioning SDK.
The underlying Google Wallet API makes use of the Android `onActivityResult()` API (now flagged as deprecated in Android). This means the process of provisioning cards and creating a wallet involves an `Activity` from the client application and this `Activity` must forward the data passed to`onActivityResult()` into the Adyen provisioning SDK.

### Creating a provisioning client instance

Expand All @@ -54,7 +58,8 @@ The `create()` function returns a result object which indicates success or failu
val result = CardProvisioning.create(
sdkInput = sdkInput,
activityProvider = { cardIssuingActivity },
provisionCardRequestCode = MY_REQUEST_CODE // Optional. Default Value: 217
provisionCardRequestCode = MY_PROVISIONING_REQUEST_CODE, // Optional. Default Value: 217
createWalletRequestCode = MY_CREATE_WALLET_REQUEST_CODE // Optional. Default Value: 218
)

val cardProvisioning = when(result) {
Expand All @@ -64,6 +69,28 @@ val cardProvisioning = when(result) {
}
```

### Checking if an active Google Wallet exists on the device

Check if the cardholder has an active Google Wallet on their device.
```kotlin
val result = cardProvisioning.hasWallet()
val hasWallet = when(result) {
is HasWallet.Success -> result.hasWallet
is HasWallet.Failure -> throw Exception(result.errorMessage)
}
```

### Creating a Wallet

If the `hasWallet()` call returns the result: `HasWallet.Success(false)`then a wallet must be
created before card provisioning can proceed.

To create a wallet use the following call:

```kotlin
val walletCreated = cardProvisioning.createWallet() == CreateWalletResult.Success
```

### Checking if a card can be provisioned

Check if the cardholder can add a payment card to their Google Wallet.
Expand All @@ -90,7 +117,7 @@ cardProvisioning.provision(

### Handle the Activity Result

The Google Wallet API delivers the result of the provisioning request to the `Acivity` returned by the function passed to `CardProvisioning.create()`.
The Google Wallet API delivers the result of the provisioning and wallet creation requests to the `Acivity` returned by the function passed to `CardProvisioning.create()`.

Override the `onActivityResult()` for your `Activity` (or modify your existing `onActivityResult()`):

Expand All @@ -102,16 +129,15 @@ Override the `onActivityResult()` for your `Activity` (or modify your existing `
}
```

**Note:** If you do not forward the `Activity.onActivityResult()` call to the provisioning client then the `cardProvisioning.provision()` call will remain suspended forever!

[//]: # (TODO: Ensure all the following URLs point to actual documentation )
**Note:** If you do not forward the `Activity.onActivityResult()` call to the provisioning client then the `cardProvisioning.provision()` and `cardProvisionoing.createWallet()`
calls will remain suspended forever!

For more documentation refer to our [complete documentation](https://docs.adyen.com/issuing/digital-wallets/google-wallet-provisioning/)

## See also

* [Complete Documentation](https://docs.adyen.com/issuing/digital-wallets/google-wallet-provisioning/)
* [SDK Reference Adyen Google Pay Provisioning](https://adyen.github.io/adyen-google-pay-provisioning-android/0.1.1/AdyenGoogleWalletProvisioning//)
* [SDK Reference Adyen Google Pay Provisioning](https://adyen.github.io/adyen-google-pay-provisioning-android/0.2.0/AdyenGoogleWalletProvisioning//)
* [Data security at Adyen](https://docs.adyen.com/development-resources/adyen-data-security)

## License
Expand Down
10 changes: 8 additions & 2 deletions RELEASE_NOTES
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
## Added
- hasWallet API function which provides a way to check if a Google Wallet exists on the device.
- createWallet API function which allows a Google Wallet to be created on the device.

## Changes
- The `canProvision` API function now returns a `CanBeProvisioned` result for partially provisioned cards (instead of returning `AlreadyExistsInWallet`).
- The `provision` API function can now complete provisioning of partially provisioned cards.
- The canProvision API function now returns a CannotBeProvisioned.NoActiveWallet result if there is no Google Wallet on the device.
- The canProvision API function now returns a CannotBeProvisioned.ApiError result if a Google Tap and Pay specific exception occurs.
- The getSdkOutput API function now returns more fine grained error result types including a Failure.NoActiveWallet result if there is no Google Wallet on the device.
- The provision API function now returns a Failure.NoActiveWallet result if there is no Google Wallet on the device.
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
</a>
</div>
<div class="library-version">
0.1.1 </div>
0.2.0 </div>
</div>
<div class="filter-section" id="filter-section">
<button class="platform-tag platform-selector jvm-like" data-active="" data-filter=":provisioning:dokkaHtml/release">Provisioning SDK</button>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
</a>
</div>
<div class="library-version">
0.1.1 </div>
0.2.0 </div>
</div>
<div class="filter-section" id="filter-section">
<button class="platform-tag platform-selector jvm-like" data-active="" data-filter=":provisioning:dokkaHtml/release">Provisioning SDK</button>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
</a>
</div>
<div class="library-version">
0.1.1 </div>
0.2.0 </div>
</div>
<div class="filter-section" id="filter-section">
<button class="platform-tag platform-selector jvm-like" data-active="" data-filter=":provisioning:dokkaHtml/release">Provisioning SDK</button>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
</a>
</div>
<div class="library-version">
0.1.1 </div>
0.2.0 </div>
</div>
<div class="filter-section" id="filter-section">
<button class="platform-tag platform-selector jvm-like" data-active="" data-filter=":provisioning:dokkaHtml/release">Provisioning SDK</button>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
</a>
</div>
<div class="library-version">
0.1.1 </div>
0.2.0 </div>
</div>
<div class="filter-section" id="filter-section">
<button class="platform-tag platform-selector jvm-like" data-active="" data-filter=":provisioning:dokkaHtml/release">Provisioning SDK</button>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
</a>
</div>
<div class="library-version">
0.1.1 </div>
0.2.0 </div>
</div>
<div class="filter-section" id="filter-section">
<button class="platform-tag platform-selector jvm-like" data-active="" data-filter=":provisioning:dokkaHtml/release">Provisioning SDK</button>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
</a>
</div>
<div class="library-version">
0.1.1 </div>
0.2.0 </div>
</div>
<div class="filter-section" id="filter-section">
<button class="platform-tag platform-selector jvm-like" data-active="" data-filter=":provisioning:dokkaHtml/release">Provisioning SDK</button>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
</a>
</div>
<div class="library-version">
0.1.1 </div>
0.2.0 </div>
</div>
<div class="filter-section" id="filter-section">
<button class="platform-tag platform-selector jvm-like" data-active="" data-filter=":provisioning:dokkaHtml/release">Provisioning SDK</button>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
</a>
</div>
<div class="library-version">
0.1.1 </div>
0.2.0 </div>
</div>
<div class="filter-section" id="filter-section">
<button class="platform-tag platform-selector jvm-like" data-active="" data-filter=":provisioning:dokkaHtml/release">Provisioning SDK</button>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
</a>
</div>
<div class="library-version">
0.1.1 </div>
0.2.0 </div>
</div>
<div class="filter-section" id="filter-section">
<button class="platform-tag platform-selector jvm-like" data-active="" data-filter=":provisioning:dokkaHtml/release">Provisioning SDK</button>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
</a>
</div>
<div class="library-version">
0.1.1 </div>
0.2.0 </div>
</div>
<div class="filter-section" id="filter-section">
<button class="platform-tag platform-selector jvm-like" data-active="" data-filter=":provisioning:dokkaHtml/release">Provisioning SDK</button>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
</a>
</div>
<div class="library-version">
0.1.1 </div>
0.2.0 </div>
</div>
<div class="filter-section" id="filter-section">
<button class="platform-tag platform-selector jvm-like" data-active="" data-filter=":provisioning:dokkaHtml/release">Provisioning SDK</button>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
</a>
</div>
<div class="library-version">
0.1.1 </div>
0.2.0 </div>
</div>
<div class="filter-section" id="filter-section">
<button class="platform-tag platform-selector jvm-like" data-active="" data-filter=":provisioning:dokkaHtml/release">Provisioning SDK</button>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
</a>
</div>
<div class="library-version">
0.1.1 </div>
0.2.0 </div>
</div>
<div class="filter-section" id="filter-section">
<button class="platform-tag platform-selector jvm-like" data-active="" data-filter=":provisioning:dokkaHtml/release">Provisioning SDK</button>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
<!DOCTYPE html>
<html class="no-js">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1" charset="UTF-8">
<title>ApiError</title>
<link href="../../../../../images/logo-icon.svg" rel="icon" type="image/svg">
<script>var pathToRoot = "../../../../../";</script>
<script>document.documentElement.classList.replace("no-js","js");</script>
<script>const storage = localStorage.getItem("dokka-dark-mode")
if (storage == null) {
const osDarkSchemePreferred = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches
if (osDarkSchemePreferred === true) {
document.getElementsByTagName("html")[0].classList.add("theme-dark")
}
} else {
const savedDarkMode = JSON.parse(storage)
if(savedDarkMode === true) {
document.getElementsByTagName("html")[0].classList.add("theme-dark")
}
}
</script>
<script type="text/javascript" src="https://unpkg.com/kotlin-playground@1/dist/playground.min.js" async="async"></script>
<script type="text/javascript" src="../../../../../scripts/sourceset_dependencies.js" async="async"></script>
<link href="../../../../../styles/style.css" rel="Stylesheet">
<link href="../../../../../styles/main.css" rel="Stylesheet">
<link href="../../../../../styles/prism.css" rel="Stylesheet">
<link href="../../../../../styles/logo-styles.css" rel="Stylesheet">
<link href="../../../../../styles/font-jb-sans-auto.css" rel="Stylesheet">
<script type="text/javascript" src="../../../../../scripts/clipboard.js" async="async"></script>
<script type="text/javascript" src="../../../../../scripts/navigation-loader.js" async="async"></script>
<script type="text/javascript" src="../../../../../scripts/platform-content-handler.js" async="async"></script>
<script type="text/javascript" src="../../../../../scripts/main.js" defer="defer"></script>
<script type="text/javascript" src="../../../../../scripts/prism.js" async="async"></script>
<script type="text/javascript" src="../../../../../scripts/symbol-parameters-wrapper_deferred.js" defer="defer"></script>
</head>
<body>
<div class="root">
<nav class="navigation" id="navigation-wrapper">
<div class="navigation--inner">
<div class="navigation-title">
<button class="menu-toggle" id="menu-toggle" type="button">toggle menu</button>
<div class="library-name">
<a class="library-name--link" href="../../../../../index.html">
Adyen Google Wallet Provisioning SDK
</a>
</div>
<div class="library-version">
0.2.0 </div>
</div>
<div class="filter-section" id="filter-section">
<button class="platform-tag platform-selector jvm-like" data-active="" data-filter=":provisioning:dokkaHtml/release">Provisioning SDK</button>
</div>
</div>
<div class="navigation-controls">
<button class="navigation-controls--btn navigation-controls--theme" id="theme-toggle-button" type="button">switch theme</button>
<div class="navigation-controls--btn navigation-controls--search" id="searchBar" role="button">search in API</div>
</div>
</nav>
<div id="container">
<div class="sidebar" id="leftColumn">
<div class="sidebar--inner" id="sideMenu"></div>
</div>
<div id="main">
<div class="main-content" data-page-type="member" id="content" pageIds="Adyen Google Wallet Provisioning SDK::com.adyen.issuing.mobile.provisioning.client.results/CanProvisionResult.CannotBeProvisioned.ApiError/ApiError/#kotlin.Int/PointingToDeclaration//-1836988822">
<div class="breadcrumbs"><a href="../../../../../index.html">Adyen Google Wallet Provisioning SDK</a><span class="delimiter">/</span><a href="../../../index.html">com.adyen.issuing.mobile.provisioning.client.results</a><span class="delimiter">/</span><a href="../../index.html">CanProvisionResult</a><span class="delimiter">/</span><a href="../index.html">CannotBeProvisioned</a><span class="delimiter">/</span><a href="index.html">ApiError</a><span class="delimiter">/</span><span class="current">ApiError</span></div>
<div class="cover ">
<h1 class="cover"><span>Api</span><wbr></wbr><span><span>Error</span></span></h1>
</div>
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":provisioning:dokkaHtml/release"><div class="symbol monospace"><span class="token keyword">constructor</span><span class="token punctuation">(</span><span class="parameters "><span class="parameter ">statusCode<span class="token operator">: </span><a href="https://kotlinlang.org/api/latest/jvm/stdlib/package-list/kotlin/-int/index.html">Int</a></span></span><span class="token punctuation">)</span></div><h4 class="">Parameters</h4><div class="table"><div class="table-row" data-filterable-current=":provisioning:dokkaHtml/release" data-filterable-set=":provisioning:dokkaHtml/release"><div class="main-subrow keyValue "><div class=""><span class="inline-flex"><div><u><span>status</span><wbr></wbr><span><span>Code</span></span></u></div></span></div><div><div class="title"><p class="paragraph">The status code of the Tap and Pay API error.</p></div></div></div></div></div></div></div>
</div>
<div class="footer">
<span class="go-to-top-icon"><a href="#content" id="go-to-top-link"></a></span><span>© 2024 Copyright</span><span
class="pull-right"><span>Generated by </span><a
href="https://github.com/Kotlin/dokka"><span>dokka</span><span class="padded-icon"></span></a></span>
</div>
</div>
</div>
</div>
</body>
</html>
Loading

0 comments on commit 721e973

Please sign in to comment.