react-native-swrve
v0.6.1
Published
## Getting started
Readme
react-native-swrve
Getting started
$ npm install react-native-swrve --save
Mostly automatic installation
$ react-native link react-native-swrve
After, you must Open up android/app/src/main/java/[...]/MainActivity.java file and follow the steps under the additional configuration section.
Manual installation
iOS
- In XCode, in the project navigator, right click
Libraries➜Add Files to [your project's name] - Go to
node_modules➜react-native-swrveand addRNSwrve.xcodeproj - In XCode, in the project navigator, select your project. Add
libRNSwrve.ato your project'sBuild Phases➜Link Binary With Libraries - Run your project (
Cmd+R)<
Android
- Open up
android/app/src/main/java/[...]/MainApplication.java
- Add
import io.underscope.RNSwrvePackage;to the imports at the top of the file. - Add
new RNSwrvePackage()to the list returned by thegetPackages()method. - Follow the steps under the additional configuration section.
Append the following lines to
android/settings.gradle:include ':react-native-swrve' project(':react-native-swrve').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-swrve/android')Insert the following lines inside the dependencies block in
android/app/build.gradle:compile project(':react-native-swrve')
Additional configuration
Android
1. Include required libraries
Add the following in your android/app/build.gradle file, so the react-native-swrve dependencies are properly included.
repositories {
...
flatDir {
dirs project(':react-native-swrve').file('libs')
}
jcenter {
url 'http://dl.bintray.com/swrve-inc/android'
}
...
}2. Add required configuration
Add to your AndroidManifest.xml the following line into the <application> tag.
<application ...>
...
<meta-data android:name="com.swrve.sdk.appId" android:value="@integer/swrve_app_id"/>
<meta-data android:name="com.swrve.sdk.apiKey" android:value="@string/swrve_api_key"/>
...
</application>And in your strings.xml file add your swrve configuration:
<integer name="swrve_app_id">YOUR_APP_ID</integer>
<string name="swrve_app_key">YOUR_API_KEY</string>3. Initialize library
Swrve must be initialized from the onCreate method in the MainApplication.java class.
...
// <-- Add this line
import com.dcpi.swrvemanager.SwrveManager;
// -->
...
@Override
public void onCreate() {
super.onCreate();
// <--- Add this block
try {
SwrveManager swrveManager = SwrveManager.createInstance(this);
swrveManager.initWithAnalyticsKeySecret(getResources().getInteger(R.integer.swrve_app_id), getResources().getString(R.string.swrve_api_key));
} catch (Exception e) {
Log.e("MyApp", "failed to initialized SwrveManager", e);
}
// -->
SoLoader.init(this, /* native exopackage */ false);
}iOS
1. Include required libraries (check if it is necessary or react-native link actually does this step)
- Select your target
- Go to Build Settings
- Look for Header Search Paths and add
$(SRCROOT)/../node_modules/react-native-swrve/iosasrecursive
2. Add required configuration
- If you have multiple environments and a
.xcconfigfile for each one then you should add the following variables per environmentSWRVE_APP_ID=12345 SWRVE_API_KEY=abc123xyz1Axxxx - Then in the
Info.plistfile add those values as keys so can be used on Swrve module init<key>SwrveApiKey</key> <string>$(SWRVE_API_KEY)</string> <key>SwrveAppId</key> <string>$(SWRVE_APP_ID)</string>
3. Add pub.pem file to Resources
- Go to Resources (if doesn't exist then create a Group with that name)
- Do a right click and select Add new file
- Navigate to
node_modules/react-native-swrve/ios/Resourcesfolder and selectpub.pemfile
You can verify the file was included correctly selecting your target and going to Build Phases > Copy Bundle Resources. The
pub.pemfile should be there.
4. Initialize library
Swrve must be initialized from the didFinishLaunchingWithOptions method in the AppDelegate.m file.
IMPORTANT: the appId is a number, not a string.
// <-- Add this line
#import "DcpiSwrveManager.h"
// -->
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// <-- Add this lines
// Chances are you've the SwrveAppId and SwrveApiKey in the Info.plist file.
// In that case you should get those values like following
NSNumber* swrveAppId = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"SwrveAppId"];
NSString* swrveApiKey = [[[NSBundle mainBundle] infoDictionary] valueForKey:@"SwrveApiKey"];
SwrveConfig* config = [[SwrveConfig alloc] init];
config.pushEnabled = YES;
[[DcpiSwrveManager alloc] init:swrveAppId key:swrveApiKey config:config launchOptions:launchOptions];
// -->
return YES;
}
@endUsage
import RNSwrve from 'react-native-swrve'Tracking Session Events
In order to keep track the user's session you must add to your main component the following:
class App extends Component {
...
componentWillMount() {
AppState.addEventListener('change', this.handleAppStateChange)
}
componentWillUnmount() {
AppState.removeEventListener('change', this.handleAppStateChange)
}
handleAppStateChange = nextAppState => {
if (nextAppState === 'active') {
Swrve.sessionStart()
} else {
Swrve.sessionEnd()
}
}
...
}Methods
sessionStart()
Track the users' session started.
sessionEnd()
Track the users' session ended.
userUpdate(Object attributes)
Update user attributes.
attributesmay include:level(Number)consumable.<consumable_name>_balance(Number)monetization.<currency>_balance(Number)
logIAPAction(String productId, Number productPrice, Number quantity, String currency, String store, String durability, Integer level, Object options)
Tracks purchases done with real money.
optionsmay include:context(String)type(String)subtype(String)
[DEPRECATED] iap(Integer quantity, String productId, Number productPrice, String currency)
Tracks purchases done with real money without store verification.
[DEPRECATED] iapPlay(String productId, Double productPrice, String currency, String receipt, String receiptSignature)
Tracks purchases done with real money with store verification.
logFailedReceiptAction(String productId, String error)
Tracks a failure in the store verification.
logPurchaseAction(String item, String currency, Number cost, Number quantity)
Tracks purchases done with any type of currency.
logCurrencyGivenAction(String givenCurrency, Number givenAmount, Object options)
Tracks when a user is given currency.
optionsmay include:level(Number)context(String)type(String)subtype(String)subtype2(String)custom(Object)
logTimingAction(Number elapsedTime, String context, Object options)
Tracks timing events.
optionsmay include:stepNumber(Number)stepName(String)custom(Object)
navigation(String buttonPressed, Object options)
Tracks navigation between screens.
optionsmay include:fromLocation(String)toLocation(String)module(String)order(Number)custom(Object)
logAction(String tier1, Object options)
Tracks any type of event or user action.
optionsmay include:subevent(String)level(Number)tier2(String)tier3(String)tier4(String)context(String)message(String)custom(Object)
logFunnelAction(String type, Number stepNumber, String stepName, Object options)
Tracks funnel events.
optionsmay include:message(string)custom(object)
logErrorAction(String reason, Object options)
Tracks error events.
optionsmay include:type(string)context(string)custom(object)
Troubleshooting
Android
1. com.android.dex.DexException
If you run into the following error (or similar) when running the app:
> com.android.build.api.transform.TransformException: com.android.dex.DexException: Multiple dex files define Lcom/google/android/gms/internal/zzbs;This means that two dependencies in your project are using the com.google.android.gms library (one of them being react-native-swrve).
To solve it, exclude this dependency from on your android/app/build.gradle for react-native-swrve under the dependencies section:
dependencies {
...
compile(project(':react-native-swrve')) {
exclude group: 'com.google.android.gms'
}
...
}