# react-native-backtracks

# Getting started

To set up the example code, clone the Backtracks React Native git repository and run the following commands:

cd example
rm -rf node_modules && yarn install #to rebuild later, you need to delete node_modules directory
cd ios
pod install

To run the app for android run the following commands:

cd ..
yarn react-native run-android

To run the app for iOS open the current directory by typing the following command in the command line:

open .

Double tap on all the certificates and provisioning profiles in the directory: development.cer, distribution.cer, ExampleDevelopmentProfile.mobileprovision and ExampleDistributionProfile.mobileprovision

From the current directory double clik on the example.xcworkspace file to open the project.

Connect your device to the computer and choose your device as the destination device in the upper toolbar.

Tap on the Example project in project navigator on the left, choose the example target and in the tab Signing & Capabilities make sure that Automatically manage signing checkbox is unchecked.

Under Debug tab choose the ExampleDevelopmentProfile for the Provisioning Profile and under Release tab choose the ExampleDistributionProfile and run the project.

TIP

Partners may request access to reference applications and advanced code samples. If you wish to become a partner, contact us.

# Building your own react native library including backtracks

The sample code is provided as a resource to help you build your own application that wraps the native audio players, and binds with the backtracks podcast analytics library.

Please read the instructions at the link https://facebook.github.io/react-native/docs/native-modules-ios for an understanding of the process of how to create your own native module in react native. More specific instructions are provided below.

# Create project scaffolding

create-react-native-module --generate-example --example-react-native-version react-native@0.61 MyLibrary

# Add iOS dependencies for backtracks

Edit the file 'react-native-my-library.podspec' in the root directory of the created project and add the backtracks dependency:

  s.dependency 'PodcastAnalytics', '~> 1.0'

Also backtracks needs at least iOS 11.2, so in the podspec change this line:

  s.platforms    = { :ios => "11.2" }

And in example/ios/Podfile:

platform :ios, '11.2'

# Add Kotlin support to android project

Edit the file android/build.gradle and add to the following sections:

buildscript {
    ext.kotlin_version = '1.3.61'
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'

Edit the file example/android/build.gradle and add to the following sections:

buildscript {
    ext {
        kotlin_version = '1.3.61'
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
    }
}

# Bump android minSDK to support MediaPlayer2

To support media player 2, make the following changes to your android/build.gradle:

def DEFAULT_COMPILE_SDK_VERSION = 29
def DEFAULT_BUILD_TOOLS_VERSION = '29.0.2'
def DEFAULT_MIN_SDK_VERSION = 19
def DEFAULT_TARGET_SDK_VERSION = 29

and your example/android/build.gradle:

buildscript {
    ext {
        kotlin_version = '1.3.61'
        buildToolsVersion = "29.0.2"
        minSdkVersion = 19
        compileSdkVersion = 29
        targetSdkVersion = 29
    }
}

# Add Android dependencies for backtracks

Edit the file android/build.gradle and add the following dependencies

dependencies {
    implementation 'com.google.android.exoplayer:exoplayer-core:2.10.0'
    implementation "androidx.media2:media2-player:1.0.1"

    implementation group: 'fm.backtracks', name: 'analytics.android', version: '1.0.+', ext: 'aar', transitive: true, changing: true
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}

# Enable multidex support in android

As the number of methods will exceed the max allowed for single dex applications, enable multidex support in your android example/android/app/build.gradle

android {
    defaultConfig {
        multiDexEnabled true
    }
}

dependencies {
    implementation 'androidx.multidex:multidex:2.0.1'
}

# Write native iOS code

Open the xcworkspace file (using xcode) in the ios directory and copy in the .m and .h code from the sample project. (Leave the file names and class name unchanged from your generated project). Note that the code won't compile, you can see the code properly compiled later in the example/ios workspace

# Write native Android code

Open the android studio project in the android directory and copy in the .kt file code from the sample project (Rename them to match the .java file names and delete the .java files. Change package names and class names to match your Library name). IMPORTANT: change the getName() method to match your library name e.g. "MyLibrary". Note that the code won't compile, you can see the code properly compiled later in the example/android workspace

# Write the JavaScript code

Copy the App.js file from the sample project into your project. Search and replace (case-sensitive) String 'Backtracks' with 'MyLibrary' (or the name you gave when creating the project). Change the import to

import MyLibrary from 'react-native-my-library';

# Build and run the application

Now build and run your application using the instructions from the Getting Started section at the beginning of this README.