react-native-kiwi v0.11.3
react-native-kiwi
A React Native wrapper for Kiwi subscription SDK
Getting started
$ npm install react-native-kiwi --save
Mostly automatic installation
$ react-native link react-native-kiwi
You will be prompted for the configUrl.
Additional configuration
Android
Add the following in your android/app/build.gradle file, so the react-native-kiwi dependencies are properly included.
repositories {
flatDir {
dirs project(':react-native-kiwi').file('libs')
}
}Add to your AndroidManifest.xml the following line into the <application> tag.
<application ...>
...
<meta-data android:name="com.movile.kiwi.sdk.applicationKey" android:value="@string/kiwi_app_key"/>
...
</application>And in your strings.xml file add your kiwi_app_key
<string name="kiwi_app_key">YOUR_APP_KEY</string>iOS
Enable Swift in your project If you're not using Swift yet you'll need to create a new empty
.swiftfile (can beempty.swift) doing right click in your project + New File. It should offer you to create aBridging-Headerfile: accept it. As a result, you will have 2 new files (a.swiftand a.h) and your project should build correctly now.Include required frameworks in your project
Create a New Group named
Frameworksif it's not already created. Then do a right click on that folder, select Add files to ..., navigate to<PROJECT_ROOT>/node_modules/react-native-kiwi/ios/Frameworksand finally select both,Falcon.frameworkandopenssl.framework. Finally go to Build Settings / Framework Search Paths and add this path$(SRCROOT)/../node_modules/react-native-kiwi/ios/Frameworks, so the project will include these when building.Add required configuration by Falcon
In
Build Phasesadd aCopy Filesphase, selectFrameworksas destination and addFalcon.frameworkAdd a
Run Scriptphase with the following scriptAPP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}" # This script loops through the frameworks embedded in the application and # removes unused architectures. find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK do FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable) FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME" echo "Executable is $FRAMEWORK_EXECUTABLE_PATH" EXTRACTED_ARCHS=() for ARCH in $ARCHS do echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME" lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH" EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH") done echo "Merging extracted architectures: ${ARCHS}" lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}" rm "${EXTRACTED_ARCHS[@]}" echo "Replacing original executable with thinned version" rm "$FRAMEWORK_EXECUTABLE_PATH" mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH" done
Init Falcon in your app boot
Add the following in your
AppDelegate.mfileNOTE: this guide was written assuming you've multiple environments. Could be simpler if you can hardcode the
kiwiAppKeyandconfigJsonUrlvalues.#import <Falcon/Falcon.h> // <- add this line // ... - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // ... NSString* kiwiAppKey = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"KiwiAppKey"]; NSString* configJsonUrl = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"KiwiConfigUrl"]; [Falcon startWithKiwiAppKey:kiwiAppKey jsonUrl:configJsonUrl completion:^(NSError* error) { if (error != nil) { NSLog(@"Error starting Falcon", error); } }]; // ... }Setup credentials and configuration values
In the
Info.plistfile<key>KiwiAppKey</key> <string>$(KIWI_APP_KEY)</string> <key>KiwiConfigUrl</key> <string>$(KIWI_CONFIG_URL)</string>Finally, for each environment add in the
.xcconfigKIWI_APP_KEY=<THE_KIWI_APP_KEY> KIWI_CONFIG_URL=<THE_CONFIG_URL>IMPORTANT! The double slash (
//) in the config url needs to be escaped using$()so your file will end up like the followingKIWI_APP_KEY=abcd1234efgh5678 KIWI_CONFIG_URL=https:/$()/s3.amazonaws.com/project-name/config.json
Troubleshooting iOS setup
- iOS target needs to be 9.3
In order to support Swift you will need to change the target to 9.3 or newer
Falcon.hnot foundCheck you've added
$(SRCROOT)/../node_modules/react-native-kiwi/ios/Frameworksin Build Settings / Framework Search Paths.- dyld: Library not loaded: @rpath/Falcon.framework/Falcon (Reason: image not found)
You need to enable the Always Embed Swift Standard Libraries in Build Settings (see this)
- ld: warning: Auto-Linking library not found for -lswiftCoreImage
Chances are your project is not using Swift yet. Please check you've followed the Enable Swift in your project step
Usage
import Kiwi from 'react-native-kiwi'
Kiwi.getCountries().then(countries => console.log(countries))
// Retrieves the list of countries with the following format
// iOS:
// [{
// id: 'AR',
// code: 'AR',
// name: 'Argentina',
// ddi: 54
// }]
//
// Android:
// [{
// current: false,
// code: 'BR',
// name: 'Brasil'
// }]
Kiwi.getCarriers().then(carriers => console.log(carriers))
// Retrieves the list of carriers with the following format
// iOS:
// [{
// id: 1
// countryCode: 'BR',
// name: 'Vivo',
// active: true,
// shortCode: ...
// }]
//
// Android:
// [{
// id: 1
// sku: 'com.movile.marvel.br.vivo.1',
// countryCode: 'BR',
// countryName: 'Brasil',
// pricing: 'R$3,99 por semana',
// termsUrl: 'http://...someURL',
// allowUnsubscription: true,
// }]
Kiwi.sendPincode(carrierId, phoneNumber)
// Send pincode with restoration purpose to that carrierId and phoneNumber
//
// @param carrierId (number) the carrier id
// @param phoneNumber (string) the phone number used when the user subscribed
Kiwi.loginWithPincode(carrierId, phoneNumber, pincode)
// Send pincode with restoration purpose to that carrierId and phoneNumber
//
// @param carrierId (number) the carrier id
// @param phoneNumber (string) the phone number used when the user subscribed
// @param pincode (string) the pin code received by SMS
Kiwi.subscribe(carrierId, phoneNumber).then(response => console.log(response))
// [Android only]
// Starts the _subscription flow_
//
// @param carrierId (number)
// @param phoneNumber (string) with just numbers
//
// Resolves with an object with the following format
// {
// subscribed: true|false // indicates if the user is subscribed or not
// }
Kiwi.restoreSubscription(carrierId, phoneNumber).then(response => console.log(response))
// [Android only]
// Starts the _restore subscription flow_
//
// @param carrierId (number)
// @param phoneNumber (string) with just numbers
//
// Resolves with an object with the following format
// {
// subscribed: true|false // indicates if the user is subscribed or not
// }
Kiwi.redeemCode().then(response => console.log(response))
// [Android only]
// Starts the _code redeem flow_, the result should be stored because
// there is no way to check the subscription.
//
// Resolves with an object with the following format
// {
// subscribed: true|false // indicates if the user is subscribed or not
// }
Kiwi.unsubscribe(carrierId, phoneNumber).then(response => console.log(response))
// [Android only]
// Starts the _unsubscription flow_
//
// @param carrierId (number)
// @param phoneNumber (string) with just numbers
//
// Resolves with an object with the following format
// {
// subscribed: true|false // indicates if the user is subscribed or not
// }
Kiwi.isSubscribed(carrierId).then(subscribed => console.log(subscribed))
// Resolves with `true` if the user is subscribed for that carrierId, `false` if not
// @param carrierId (number)
Kiwi.submitFeedback(email, like, recommend, comment)
// [Android only]
// Submit feedback and resolves with `null`
//
// @param email (string) an email address
// @param like (number) from 1 to 5
// @param recommend (number) from 1 to 5
// @param comment (string) a free comment
Kiwi.detectMsisdn(countryCode)
// [Android only]
// Detects the country, carrier and phone number if possible
//
// @param countryCode (string) the two-letter country code
//
// Resolves with an object with the following format
// {
// countryCode: 'AR',
// carrierId: 12,
// phoneNumber: '1140654321',
// }7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago