@foodello/capacitor-klarna-kco v6.0.0
Capacitor Klarna Checkout
Klarna Checkout integration to Capacitor.js for loading Checkout widget inside Capacitor app.
Installation
yarn add @foodello/capacitor-klarna-kco
or
npm install @foodello/capacitor-klarna-kcoThen run
npx cap syncSetup
Required: Include configuration to capacitor.config.json
{
"plugins": {
"KlarnaKco": {
"returnUrlIos": "your-app-scheme://",
"returnUrlAndroid": "your-app-scheme://",
"environment": "playground", // Optional
"handleEPM": false, // Optional
"handleValidationErrors": false, // Optional
"region": "eu", // Optional
"theme": "light" // Optional
}
}
}Android modifications
- Edit your application level build.gradle file and add the following repository to your repositories section:
repositories { .... maven { url 'https://x.klarnacdn.net/mobile-sdk/' } } - If you are willing to change SDK version, add new version to your variables.gradle
Default isext { ... klarnaSdkVersion: 'x.x.x' }2.5.2 - Check that your main activity has intent filter and it supports return URL scheme defined in
capacitor.config.json.AndroidManifest.xml:<intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:scheme="<your-app-scheme>" /> <data android:host="<your-app-host>" /> </intent-filter>
Note:
The hosting Activity should be using launchMode of singleTask or singleTop to prevent a new instance from being created when returning from an external application. This should be singleTask if you have not modified this by yourself.
<activity android:launchMode="singleTask|singleTop">Usage
Import plugin to your application
import { KlarnaKco } from "@foodello/capacitor-klarna-kco";Remember to attach listeners to the events you are willing to handle. For example in order to perform navigation inside your application, listen complete -event:
KlarnaKco.addListener('complete', ({ url }) => {/* PERFORM NAVIGATION */})Check Klarna's documentation for more information
https://docs.klarna.com/in-app/
API
initialize()setSnippet(...)open()close()destroy()resume()suspend()addListener(EventsEnum.Complete, ...)addListener(EventsEnum.External, ...)addListener(EventsEnum.Load, ...)addListener(EventsEnum.UserInteracted, ...)addListener(EventsEnum.Customer, ...)addListener(EventsEnum.Change, ...)addListener(EventsEnum.BillingAddressChange, ...)addListener(EventsEnum.ShippingAddressChange, ...)addListener(EventsEnum.ShippingOptionChanged, ...)addListener(EventsEnum.OrderTotalChange, ...)addListener(EventsEnum.CheckboxChange, ...)addListener(EventsEnum.NetworkError, ...)addListener(EventsEnum.RedirectInitiated, ...)addListener(EventsEnum.LoadConfirmation, ...)addListener(EventsEnum.External, ...)- Interfaces
- Type Aliases
- Enums
initialize()
initialize() => Promise<void>Initializes Klarna SDK with the configs.
Since: 2.0.0
setSnippet(...)
setSnippet(options: SetSnippetOptions) => Promise<CallResult>Sets KCO snippet for Klarna SDK to load.
| Param | Type |
|---|---|
options | SetSnippetOptions |
Returns: Promise<CallResult>
Since: 2.0.0
open()
open() => Promise<CallResult>Open KCO view which includes the snippet.
Returns: Promise<CallResult>
Since: 2.0.0
close()
close() => Promise<CallResult>Close KCO view including the snippet.
Returns: Promise<CallResult>
Since: 2.0.0
destroy()
destroy() => Promise<void>Destroy Klarna SDK instance.
Since: 1.0.0
resume()
resume() => Promise<KlarnaCallResult>Resume interactions on Klarna Checkout widget.
Returns: Promise<KlarnaCallResult>
Since: 1.0.0
suspend()
suspend() => Promise<KlarnaCallResult>Suspend interactions on Klarna Checkout widget.
Returns: Promise<KlarnaCallResult>
Since: 1.0.0
addListener(EventsEnum.Complete, ...)
addListener(eventName: EventsEnum.Complete, listenerFunc: (data: EventData[EventsEnum.Complete]) => void) => Promise<PluginListenerHandle>Listen for when the payment created.
| Param | Type |
|---|---|
eventName | EventsEnum.Complete |
listenerFunc | (data: { url: string; path: string; }) => void |
Returns: Promise<PluginListenerHandle>
Since: 1.0.0
addListener(EventsEnum.External, ...)
addListener(eventName: EventsEnum.External, listenerFunc: (data: EventData[EventsEnum.External]) => void) => Promise<PluginListenerHandle>Listen for when KCO should redirect for external payment.
Requires handleEPM config to be true
| Param | Type |
|---|---|
eventName | EventsEnum.External |
listenerFunc | (data: { url: string; path: string; }) => void |
Returns: Promise<PluginListenerHandle>
Since: 2.0.0
addListener(EventsEnum.Load, ...)
addListener(eventName: EventsEnum.Load, listenerFunc: (data: EventData[EventsEnum.Load]) => void) => Promise<PluginListenerHandle>Listen for when the KCO iframe has been created successfully.
| Param | Type |
|---|---|
eventName | EventsEnum.Load |
listenerFunc | (data: { customer: { type: string; }; shipping_address: { country: string; postal_code: string; }; }) => void |
Returns: Promise<PluginListenerHandle>
Since: 1.0.0
addListener(EventsEnum.UserInteracted, ...)
addListener(eventName: EventsEnum.UserInteracted, listenerFunc: (data: EventData[EventsEnum.UserInteracted]) => void) => Promise<PluginListenerHandle>Listen for when the user has interacted with the KCO iframe.
| Param | Type |
|---|---|
eventName | EventsEnum.UserInteracted |
listenerFunc | (data: { type: string; }) => void |
Returns: Promise<PluginListenerHandle>
Since: 1.0.0
addListener(EventsEnum.Customer, ...)
addListener(eventName: EventsEnum.Customer, listenerFunc: (data: EventData[EventsEnum.Customer]) => void) => Promise<PluginListenerHandle>Listen for when the user has interacted with the KCO iframe.
| Param | Type |
|---|---|
eventName | EventsEnum.Customer |
listenerFunc | (data: { type: string; }) => void |
Returns: Promise<PluginListenerHandle>
Since: 1.0.0
addListener(EventsEnum.Change, ...)
addListener(eventName: EventsEnum.Change, listenerFunc: (data: EventData[EventsEnum.Change]) => void) => Promise<PluginListenerHandle>Listen for when organization type (B2B or Person) was changed.
| Param | Type |
|---|---|
eventName | EventsEnum.Change |
listenerFunc | (data: { email: string; postal_code: string; country: string; }) => void |
Returns: Promise<PluginListenerHandle>
Since: 1.0.0
addListener(EventsEnum.BillingAddressChange, ...)
addListener(eventName: EventsEnum.BillingAddressChange, listenerFunc: (data: EventData[EventsEnum.BillingAddressChange]) => void) => Promise<PluginListenerHandle>Listen for when postal code, country or email was changed.
| Param | Type |
|---|---|
eventName | EventsEnum.BillingAddressChange |
listenerFunc | (data: { postal_code: string; country: string; }) => void |
Returns: Promise<PluginListenerHandle>
Since: 1.0.0
addListener(EventsEnum.ShippingAddressChange, ...)
addListener(eventName: EventsEnum.ShippingAddressChange, listenerFunc: (data: EventData[EventsEnum.ShippingAddressChange]) => void) => Promise<PluginListenerHandle>Listen for when shipping address was submitted.
| Param | Type |
|---|---|
eventName | EventsEnum.ShippingAddressChange |
listenerFunc | (data: { postal_code: string; country: string; }) => void |
Returns: Promise<PluginListenerHandle>
Since: 1.0.0
addListener(EventsEnum.ShippingOptionChanged, ...)
addListener(eventName: EventsEnum.ShippingOptionChanged, listenerFunc: (data: EventData[EventsEnum.ShippingOptionChanged]) => void) => Promise<PluginListenerHandle>Listen for when the user has selected a new shipping option.
| Param | Type |
|---|---|
eventName | EventsEnum.ShippingOptionChanged |
listenerFunc | (data: { description: string; id: string; name: string; price: number; promo: string; tax_amount: number; tax_rate: number; }) => void |
Returns: Promise<PluginListenerHandle>
Since: 1.0.0
addListener(EventsEnum.OrderTotalChange, ...)
addListener(eventName: EventsEnum.OrderTotalChange, listenerFunc: (data: EventData[EventsEnum.OrderTotalChange]) => void) => Promise<PluginListenerHandle>Listen for when we got changes on the cart from the merchant.
| Param | Type |
|---|---|
eventName | EventsEnum.OrderTotalChange |
listenerFunc | (data: { order_total: number; }) => void |
Returns: Promise<PluginListenerHandle>
Since: 1.0.0
addListener(EventsEnum.CheckboxChange, ...)
addListener(eventName: EventsEnum.CheckboxChange, listenerFunc: (data: EventData[EventsEnum.CheckboxChange]) => void) => Promise<PluginListenerHandle>Listen for when a checkbox was checked/unchecked.
| Param | Type |
|---|---|
eventName | EventsEnum.CheckboxChange |
listenerFunc | (data: { key: string; checked: boolean; }) => void |
Returns: Promise<PluginListenerHandle>
Since: 1.0.0
addListener(EventsEnum.NetworkError, ...)
addListener(eventName: EventsEnum.NetworkError, listenerFunc: (data: EventData[EventsEnum.NetworkError]) => void) => Promise<PluginListenerHandle>Listen for network error in KCO iframe.
| Param | Type |
|---|---|
eventName | EventsEnum.NetworkError |
listenerFunc | (data: Record<string, never>) => void |
Returns: Promise<PluginListenerHandle>
Since: 1.0.0
addListener(EventsEnum.RedirectInitiated, ...)
addListener(eventName: EventsEnum.RedirectInitiated, listenerFunc: (data: EventData[EventsEnum.RedirectInitiated]) => void) => Promise<PluginListenerHandle>Listen for when the user is about to be redirected to the confirmation page.
| Param | Type |
|---|---|
eventName | EventsEnum.RedirectInitiated |
listenerFunc | (data: true) => void |
Returns: Promise<PluginListenerHandle>
Since: 1.0.0
addListener(EventsEnum.LoadConfirmation, ...)
addListener(eventName: EventsEnum.LoadConfirmation, listenerFunc: (data: EventData[EventsEnum.LoadConfirmation]) => void) => Promise<PluginListenerHandle>Listen for when the confirmation iframe has been created succesfully.
| Param | Type |
|---|---|
eventName | EventsEnum.LoadConfirmation |
listenerFunc | (data: Record<string, never>) => void |
Returns: Promise<PluginListenerHandle>
Since: 1.0.0
addListener(EventsEnum.External, ...)
addListener(eventName: EventsEnum.External, listenerFunc: (data: EventData[EventsEnum.External]) => void) => Promise<PluginListenerHandle>Listen for when the external payment method is set.
| Param | Type |
|---|---|
eventName | EventsEnum.External |
listenerFunc | (data: { url: string; path: string; }) => void |
Returns: Promise<PluginListenerHandle>
Since: 1.0.0
Interfaces
CallResult
| Prop | Type | Description | Since |
|---|---|---|---|
status | boolean | Return status of the call | 2.0.0 |
message | string | Corresponding message for status value | 2.0.0 |
SetSnippetOptions
| Prop | Type | Description | Since |
|---|---|---|---|
snippet | string | The KCO frame's snippet from Klarna | 2.0.0 |
KlarnaCallResult
| Prop | Type |
|---|---|
result | 'invoked' |
PluginListenerHandle
| Prop | Type |
|---|---|
remove | () => Promise<void> |
EventData
| Prop | Type |
|---|---|
[EventsEnum.BillingAddressChange] | { postal_code: string; country: string; } |
[EventsEnum.Change] | { email: string; postal_code: string; country: string; } |
[EventsEnum.CheckboxChange] | { key: string; checked: boolean; } |
[EventsEnum.Complete] | { url: string; path: string; } |
[EventsEnum.Customer] | { type: string; } |
[EventsEnum.External] | { url: string; path: string; } |
[EventsEnum.LoadConfirmation] | Record<string, never> |
[EventsEnum.Load] | { customer: { type: string; }; shipping_address: { country: string; postal_code: string; }; } |
[EventsEnum.NetworkError] | Record<string, never> |
[EventsEnum.OrderTotalChange] | { order_total: number; } |
[EventsEnum.RedirectInitiated] | true |
[EventsEnum.ShippingAddressChange] | { postal_code: string; country: string; } |
[EventsEnum.ShippingAddressUpdateError] | Record<string, never> |
[EventsEnum.ShippingOptionChanged] | { description: string; id: string; name: string; price: number; promo: string; tax_amount: number; tax_rate: number; } |
[EventsEnum.UserInteracted] | { type: string; } |
Type Aliases
Record
Construct a type with a set of properties K of type T
{
}
Enums
EventsEnum
| Members | Value |
|---|---|
BillingAddressChange | 'billing_address_change' |
Change | 'change' |
CheckboxChange | 'checkbox_change' |
Complete | 'complete' |
Customer | 'customer' |
External | 'external' |
Load | 'load' |
LoadConfirmation | 'load_confirmation' |
NetworkError | 'network_error' |
OrderTotalChange | 'order_total_change' |
RedirectInitiated | 'redirect_initiated' |
ShippingAddressChange | 'shipping_address_change' |
ShippingAddressUpdateError | 'shipping_address_update_error' |
ShippingOptionChanged | 'shipping_option_changed' |
UserInteracted | 'user_interacted' |
LoggingLevelsEnum
| Members | Value |
|---|---|
Verbose | verbose |
Error | error |
Off | off |
RegionsEnum
| Members | Value |
|---|---|
NA | na |
OC | oc |
EU | eu |
EnvironmentsEnum
| Members | Value |
|---|---|
Demo | demo |
Playground | playground |
Staging | staging |
Production | production |
ThemesEnum
| Members | Value |
|---|---|
Automatic | automatic |
Dark | dark |
Light | light |