@foodello/capacitor-klarna-kco
v6.0.0
Published
Klarna Checkout integration to Capacitor.js
Downloads
385
Readme
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-kco
Then run
npx cap sync
Setup
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
{ [P in K]: 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
|