react-native-usebutton
React native module for the Button's publisher SDK
Installation
$ yarn add @mylo.ai/react-native-usebutton
or
$ npm install --save @mylo.ai/react-native-usebutton
iOS setup
$ cd ios && pod install
Usage
import ButtonSdk from 'react-native-usebutton';
const applicationId = Platform.select({
ios: 'app-xxxxxxxxxxxxxxxx',
android: 'app-xxxxxxxxxxxxxxxx',
});
ButtonSdk.identifyButtonApp(applicationId, error => {
console.log(error);
});
const userId = 'user-123';
ButtonSdk.setIdentifier(userId);
ButtonSdk.clearAllData();
ButtonSDK.startPurchasePath(
{
url: 'https://the.button.url',
token: 'my-tracking-token',
headerTitle: 'My Button Browser Title',
headerSubtitle: 'My Button Browser Subtitle',
headerTitleColor: '#FFFFF',
headerSubtitleColor: '#FFFFF',
headerBackgroundColor: '#FFFFF',
headerTintColor: '#FFFFF',
footerBackgroundColor: '#FFFFF',
footerTintColor: '#FFFFF',
},
(error) => {
console.log(error);
}
);
ButtonSdk.setImpressionView({
url: 'https://the.button.url',
visibleRateType: ButtonSdk.RATE_TYPE.PERCENT,
creativeType: ButtonSdk.CREATIVE_TYPE.HERO,
visibleRate: 7,
});
ButtonSdk.addEventListener(
ButtonSdk.EVENT.ON_BROWSER_CLOSED
onHandlePurchaseClosed
);
ButtonSdk.removeEventListener(
ButtonSdk.EVENT.ON_BROWSER_CLOSED
onHandlePurchaseClosed
);
Properties for startPurchasePath
Property | Description | Required | Default |
---|
url | The merchant's url to fetch | true | None |
token | A unique token that can be usefull for tracking a campaign for example | false | None |
headerTitle | The title displayed in the header | true | None |
headerSubtitle | The subitle displayed in the header | true | None |
headerTitleColor | The title's color | false | rgb(255, 255, 255) |
headerSubtitleColor | The subtitle's color | false | rgb(255, 255, 255) |
headerBackgroundColor | The header's background color | false | rgb(0,0,0) |
headerTintColor | The header's tint color | false | rgb(255, 255, 255) |
footerBackgroundColor | The footer's background color | false | rgb(0,0,0) |
footerTintColor | The footer's tint color | false | rgb(255, 255, 255) |
Properties for setImpressionView
Property | Description | Required | Default |
---|
url | The merchant's url to track | true | None |
visibleRateType | The rate type : could be percent or fixed | true | None |
creativeType | The creative type | false | CREATIVE_TYPE.HERO |
visibleRate | The rate the user will be granted | true | None |
Visible rate type
Property | Description |
---|
RATE_TYPE.PERCENT | The rate type is percentage |
RATE_TYPE.FIXED | The rate type is a fixed amount |
Creative type
Property | Description |
---|
CREATIVE_TYPE.HERO | The hero creative type |
CREATIVE_TYPE.CAROUSEL | The carousel creative type |
CREATIVE_TYPE.LIST | The list creative type |
CREATIVE_TYPE.GRID | The grid creative type |
CREATIVE_TYPE.HERO | The hero creative type |
CREATIVE_TYPE.OTHER | The other creative type |
Events
Property | Description |
---|
EVENT.ON_BROWSER_CLOSED | The user has closed the webview |
Typescript
Here a list of the differrent types available:
interface ButtonEvent {
ON_BROWSER_CLOSED: 'ON_BROWSER_CLOSED';
}
interface RateType {
FIXED: 'FIXED';
PERCENT: 'PERCENT';
}
interface CreativeType {
HERO: 'HERO';
CAROUSEL: 'CAROUSEL';
LIST: 'LIST';
GRID: 'GRID';
DETAIL: 'DETAIL';
OTHER: 'OTHER';
}
interface PurchasePathOptions {
url: string;
token?: string;
headerTitle: string;
headerSubtitle: string;
headerTitleColor?: string;
headerSubtitleColor?: string;
headerBackgroundColor?: string;
headerTintColor?: string;
footerBackgroundColor?: string;
footerTintColor?: string;
}
interface ImpressionViewOptions {
url: string;
visibleRateType: IRateType;
visibleRate: number;
offerId?: string;
creativeType?: ICreativeType;
}
type ErrorCallback = (error: string) => void;
Troubleshooting
Android
The Button's SDK can cause your Android app not to be able to connect to the metro server, once installed.
To resolve this, you have to add in the directory android/app/src/main/res/xml of your application, a file named network_security_config.xml and copy/paste this content in it:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">localhost</domain>
</domain-config>
</network-security-config>
Then in your AndroidManifest, add this android:networkSecurityConfig="@xml/network_security_config"
inside the application tag.
It has been implemented in the Example app, if you want to see more.
Example app
To run the example app :
$ yarn bootstrap
$ cd example && yarn start
$ cd .. && yarn example ios/android
Contribution and development instructions can be found in CONTRIBUTING
License
MIT