Quickstart

Follow these steps to have a basic integration of the app's miles® SDK in your React Native application.

Estimated time: 20 minutes

This guide will go over:

  • Conditions and minimum requirements

react-native-appsmiles-apm on npm : https://www.npmjs.com/package/react-native-appsmiles-apm

Conditions and minimum requirements

Minimum Android version: 4.1 (API 16) Minimum iOS version : 10.0 Minimum XCode version : 10

I. Installation

Download the npm module:

npm install react-native-appsmiles-apm --save

II. Configuration

  1. Add Podfile in folder ios

  2. Add theses code in Podfile

     platform :ios, '10.0'
     use_frameworks!
     require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
    
     source 'https://gitlab.appsmiles.eu/appsmiles/APMSpecs.git'
     source 'https://github.com/CocoaPods/Specs.git'
    
     target 'example' do
       # Pods for example
    
       # Others pods...
    
       pod 'RCTAPM', :path => '../node_modules/react-native-appsmiles-apm/ios'
    
       use_native_modules!
     end
  3. Launch the command line pod install

III. Initialization

Initialize the SDK in App.js with the keys we provided to you (partnerID, partnerSecret, baseUrl), your app's package name (appId).

import { APMModule } from 'react-native-appsmiles-apm';

//...
function initSDKAPM() {
  APMModule.initAppWithAppID('<PARTNER_ID>', '<PARTNER_SECRET>', '<APP_ID>');
  APMModule.setDebugMode(true);
  APMModule.setBaseUrl('<BASE_URL>');
}

//...
initSDKAPM();

We host projects on multiple servers, double check with us or your team to verify the base URL

IV. Attaching

Using inheritance

Create a global class AbstractScreen (or edit an existing abstract class) that override the methods :

  • componentDidMount()

  • componentDidUpdate()

  • componentWillUnmount()

// @flow

import React, { Component } from 'react';
import { APMModule } from 'react-native-appsmiles-apm';

export default class AbstractScreen extends Component<*> {
  componentDidMount() {
    APMModule.componentDidMountWithScreen(getDisplayName(WrappedComponent));
  }

  componentDidUpdate() {
    APMModule.componentDidUpdateWithScreen(getDisplayName(WrappedComponent));
  }
  
  componentWillUnmount() {
    APMModule.componentWillUnmountWithScreen(getDisplayName(WrappedComponent));
  }
  
  function getDisplayName(WrappedComponent) {
    return WrappedComponent.displayName || WrappedComponent.name || 'Component';
  }
}

Have all the screens in your application extend AbstractScreen:

class HomeScreen extends AbstractScreen {
  //... 
}

class ChatScreen extends AbstractScreen {
  //... 
}

//etc.

Using Higher Order Components

Also, you can use a HOC (https://reactjs.org/docs/higher-order-components.html)

//@flow

import * as React from "react";
import { APMModule } from "react-native-appsmiles-apm";

// see https://reactjs.org/docs/higher-order-components.html
export default function withAPM(WrappedComponent: React.ComponentType<any>) {

    // ...and returns another component...
    return class extends React.Component<{}, {}> {
        componentDidMount() {
          APMModule.componentDidMountWithScreen(getDisplayName(WrappedComponent));
        }

        componentDidUpdate() {
          APMModule.componentDidUpdateWithScreen(getDisplayName(WrappedComponent));
        }
    
        componentWillUnmount() {
          APMModule.componentWillUnmountWithScreen(getDisplayName(WrappedComponent));
        }
        
        render() {
            // ... and renders the wrapped component with the fresh data!
            // Notice that we pass through any additional props
            return <WrappedComponent {...this.props} />;
        }
    };
    
    function getDisplayName(WrappedComponent) {
      return WrappedComponent.displayName || WrappedComponent.name || 'Component';
    }
}

You're done with the installation !

You should be able to see our SDK on your application.

Head to the next section to start integrating our SDK into your app's features.

Last updated