react-native-klarna
Getting started
$ yarn add react-native-klarna
or
$ npm install react-native-klarna --save
Mostly automatic installation (pre RN 0.60)
$ react-native link react-native-klarna
For RN > 0.60 pleas follow After either route
step for iOS and for Android within repositories block of the dependencies block add:
gradle maven { url 'https://x.klarnacdn.net/mobile-sdk/'}
Manual installation
iOS
CocoaPods route
- In Podfile add
pod 'RNKlarna', :path => '../node_modules/react-native-klarna'
- Run
pod install
.
Manual route
- In XCode, in the project navigator, right click
Libraries
➜ Add Files to [your project's name]
- Go to
node_modules
➜ react-native-klarna
and add RNKlarna.xcodeproj
- In XCode, in the project navigator, select your project. Add
libRNKlarna.a
to your project's Build Phases
➜ Link Binary With Libraries
- Drag and drop
KlarnaCheckoutSDK.framework
from node_modules/react-native-klarna/ios/Frameworks
, (deselct copy resources) make sure that it appears in project's Build Phases
➜ Link Binary With Libraries
- Check that Framework and Header search paths in Build Settings contain
$(SRCROOT)/../node_modules/react-native-klarna/ios/Frameworks
After either route
Add the following key with your bundle name to your Info.plist:
<key>ReturnURLKlarna</key>
<string>YOUR_BUNDLE_NAME</string>
Android
- Open
android/app/src/main/java/[...]/MainActivity.java
- Add
import com.rnklarna.RNKlarnaPackage;
to the imports at the top of the file - Add
new RNKlarnaPackage()
to the list returned by the getPackages()
method
-
Append the following lines to android/settings.gradle
:
include ':react-native-klarna'
project(':react-native-klarna').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-klarna/android')
-
Insert the following lines inside the android block in android/app/build.gradle
:
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
add the following line inside the dependencies block:
implementation project(':react-native-klarna')
and within repositories block of the dependencies block add:
maven { url 'https://x.klarnacdn.net/mobile-sdk/'}
In summary, the following changes should be made:
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
...
}
dependencies {
...
implementation project(':react-native-klarna')
...
repositories {
...
maven { url 'https://x.klarnacdn.net/mobile-sdk/'}
...
}
}
-
Register an intent-filter
:
<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-custom-scheme>" />
<data android:host="<your-custom-host>" />
</intent-filter>
-
Make sure that activity is using launchMode
singleTask
or singleTop
:
<activity
android:launchMode="singleTask|singleTop">
Usage Example
Typical usage example is shown below, there is also an example app in example/basic
import RNKlarna, { NativeEvent } from 'react-native-klarna';
import React, { PureComponent } from 'react';
import { connect } from 'react-redux';
...
export class KlarnaScreen extends PureComponent {
state {
snippet: ''
loadError: false,
}
onComplete = async (event: NativeEvent) => {
const { signalType } = event;
if (signalType === 'complete') {
const { orderId } = this.props;
try {
const result = await getConfirmationSnippet(orderId);
const { newSnippet, orderStatus, loadError } = result;
if orderStatus {
this.setState({ snippet: newSnippet });
}
} catch (error) {
this.setState({ loadError: true });
}
}
};
render() {
let { snippet } = this.state;
const { loadError } = this.state;
if (loadError) {
snippet = 'error';
}
return (
<View>
<RNKlarna snippet={snippet} onComplete={this.onComplete} />
...
</View>
);
}
}