React Native bridge to the Google Analytics libraries on both iOS and Android.

Last update: May 11, 2022

Deprecation notice

On November 13th 2018 Google issued the following statement:

We want to let you know that in October 2019 we will begin to sunset our Google Analytics for mobile apps reporting and the Google Analytics Services SDK.

Data collection and processing for such properties will stop on October 31, 2019.

The message is quite clear, and therefore I am officially deprecating this library. If you want to continue using Google's solutions for analytics, I recommend you move to Google Analytics for Firebase instead.

For React Native, there is a great library called react-native-firebase which implements Analytics (and other Firebase solutions).

I will continue to support this library for minor fixes, but no major changes will occur. The repository itself will be archived sometime in 2019.

Thanks to everyone who have used or contributed to this library!

- Christian (@cbrevik)

GoogleAnalyticsBridge npm version Build Status

Google Analytics Bridge is built to provide an easy interface to the native Google Analytics libraries on both iOS and Android.

Why a native bridge? Why not use just JavaScript?

The key difference with the native bridge is that you get a lot of the metadata handled automatically by the Google Analytics native library. This will include the device UUID, device model, viewport size, OS version etc.

You will only have to send in a few parameteres when tracking, e.g:

import { GoogleAnalyticsTracker } from "react-native-google-analytics-bridge";
let tracker = new GoogleAnalyticsTracker("UA-12345-1");

tracker.trackScreenView("Home");
tracker.trackEvent("testcategory", "testaction");

Version 6 breaking changes!

If you are upgrading to version 6 from an older version, read this wiki post for important details.

The newest version of this library has a new API surface. The API changes are in most cases backwards-compatible.

Important: If you are using ecommerce or custom dimensions, you probably have to migrate to new API if you upgrade!

Content

Installation and linking libraries

  • For React Native >= 0.40 use version 5.0.0 (and up) of this module.
  • For React Native < 0.40 use version 4.0.3.

Install with npm: npm install --save react-native-google-analytics-bridge

Or, install with yarn: yarn add react-native-google-analytics-bridge

Either way, then link with: react-native link react-native-google-analytics-bridge

If it doesn't work immediately after this, consult the manual installation guide. Both Android and iOS has a couple of prerequisite SDKs linked and installed.

Important: Does this library work with Expo? We have to sort of invert the question a bit, because it should be: does Expo work with other libraries? And the answer is no:

The most limiting thing about Expo is that you can’t add in your own native modules without detaching and using ExpoKit.

This includes using create-react-native-app which also makes use of Expo.

Usage

// You have access to three classes in this module:
import {
  GoogleAnalyticsTracker,
  GoogleTagManager,
  GoogleAnalyticsSettings
} from "react-native-google-analytics-bridge";

// The tracker must be constructed, and you can have multiple:
let tracker1 = new GoogleAnalyticsTracker("UA-12345-1");
let tracker2 = new GoogleAnalyticsTracker("UA-12345-2");

tracker1.trackScreenView("Home");
tracker1.trackEvent("Customer", "New");

// The GoogleAnalyticsSettings is static, and settings are applied across all trackers:
GoogleAnalyticsSettings.setDispatchInterval(30);
// Setting `dryRun` to `true` lets you test tracking without sending data to GA
GoogleAnalyticsSettings.setDryRun(true);

// GoogleTagManager is also static, and works only with one container. All functions here are Promises:
GoogleTagManager.openContainerWithId("GT-NZT48")
  .then(() => {
    return GoogleTagManager.stringForKey("pack");
  })
  .then(pack => {
    console.log("Pack: ", pack);
  })
  .catch(err => {
    console.log(err);
  });

// You can also register Function Call tag handlers when the container is open.
GoogleTagManager.registerFunctionCallTagHandler(
  "some_function", // Must be equal to Function Name field when the tag was configured.
  (functionName, tagArguments) => {
    // functionName is passed for convenience. In this example it will be equal to "some_function".
    // tagArguments is an object and is populated based on Tag configuration in TagManager interface.
    console.log("Handling Function Call tag:", functionName);
  }
)

JavaScript API

Table of Contents

GoogleAnalyticsSettings

Settings which are applied across all trackers.

setOptOut

Sets if OptOut is active and disables Google Analytics. This is disabled by default. Note: This has to be set each time the App starts.

Parameters
Examples
GoogleAnalyticsSettings.setOptOut(true);

setDispatchInterval

Sets the trackers dispatch interval. Events, screen views, etc, are sent in batches to your tracker. This function allows you to configure how often (in seconds) the batches are sent to your tracker. Recommended to keep this around 20-120 seconds to preserve battery and network traffic. This is set to 20 seconds by default.

Parameters
Examples
GoogleAnalyticsSettings.setDispatchInterval(30);

setDryRun

When enabled the native library prevents any data from being sent to Google Analytics. This allows you to test or debug the implementation, without your test data appearing in your Google Analytics reports.

Parameters
Examples
GoogleAnalyticsSettings.setDryRun(true);

GoogleAnalyticsTracker

Examples

// Constructing a tracker is simple:
import { GoogleAnalyticsTracker } from "react-native-google-analytics-bridge";
const tracker = new GoogleAnalyticsTracker("UA-12345-1");
tracker.trackScreenView("Home");

// You can have multiple trackers if you have several tracking ids
const tracker2 = new GoogleAnalyticsTracker("UA-12345-2");
// One optional feature as well is constructing a tracker with a CustomDimensionsFieldIndexMap, to map custom dimension field names to index keys:
const fieldIndexMap = { customerType: 1 };
const tracker3 = new GoogleAnalyticsTracker("UA-12345-3", fieldIndexMap);

// This is because the Google Analytics API expects custom dimensions to be tracked by index keys, and not field names.
// Here the underlying logic will transform the custom dimension, so what ends up being sent to GA is { 1: 'Premium' }:
tracker3.trackScreenView("Home", { customDimensions: { customerType: "Premium" } });

// If you do not use a CustomDimensionsFieldIndexMap, you will have to use index as keys instead for custom dimensions:
tracker.trackScreenView("Home", { customDimensions: { 1: "Premium" } });

trackScreenView

Track the current screen/view. Calling this will also set the "current view" for other calls. So events tracked will be tagged as having occured on the current view, Home in this example. This means it is important to track navigation, especially if events can fire on different views.

Parameters
  • screenName string (Required) The name of the current screen
  • payload HitPayload (Optional) An object containing the hit payload (optional, default null)
Examples
tracker.trackScreenView('Home');
// With payload:
const payload = { impressionList: "Sale", impressionProducts: [ { id: "PW928", name: "Premium bundle" } ] };
tracker.trackScreenView("SplashModal", payload);

trackEvent

Track an event that has occured

Parameters
  • category string (Required) The event category
  • action string (Required) The event action
  • eventMetadata EventMetadata (Optional) An object containing event metadata
  • payload HitPayload (Optional) An object containing the hit payload (optional, default null)
Examples
tracker.trackEvent("DetailsButton", "Click");
// Track event with label and value
tracker.trackEvent("AppVersionButton", "Click", { label: "v1.0.3", value: 22 });
// Track with a payload (ecommerce in this case):
const product = {
  id: "P12345",
  name: "Android Warhol T-Shirt",
  category: "Apparel/T-Shirts",
  brand: "Google",
  variant: "Black",
  price: 29.2,
  quantity: 1,
  couponCode: "APPARELSALE"
};
const transaction = {
  id: "T12345",
  affiliation: "Google Store - Online",
  revenue: 37.39,
  tax: 2.85,
  shipping: 5.34,
  couponCode: "SUMMER2013"
};
const productAction = {
  transaction,
  action: 7 // Purchase action, see ProductActionEnum
}
const payload = { products: [ product ], productAction: productAction }
tracker.trackEvent("FinalizeOrderButton", "Click", null, payload);

trackTiming

Track a timing measurement

Parameters
  • category string (Required) The event category
  • interval number (Required) The timing measurement in milliseconds
  • timingMetadata TimingMetadata (Required) An object containing timing metadata
  • payload HitPayload (Optional) An object containing the hit payload (optional, default null)
Examples
tracker.trackTiming("testcategory", 2000, { name: "LoadList" }); // name metadata is required
// With optional label:
tracker.trackTiming("testcategory", 2000, { name: "LoadList", label: "v1.0.3" });

trackException

Track an exception

Parameters
  • error string (Required) The description of the error
  • fatal boolean (Optional) A value indiciating if the error was fatal, defaults to false (optional, default false)
  • payload HitPayload (Optional) An object containing the hit payload (optional, default null)
Examples
try {
  ...
} catch(error) {
  tracker.trackException(error.message, false);
}

trackSocialInteraction

Track a social interaction, Facebook, Twitter, etc.

Parameters
Examples
tracker.trackSocialInteraction("Twitter", "Post");

setUser

Sets the current userId for tracking.

Parameters
  • userId string An anonymous identifier that complies with Google Analytic's user ID policy
Examples
tracker.setUser("12345678");

setClient

Sets the current clientId for tracking.

Parameters
  • clientId string A anonymous identifier that complies with Google Analytic's client ID policy
Examples
tracker.setClient("35009a79-1a05-49d7-b876-2b884d0f825b");

getClientId

Get the client id to be used for purpose of logging etc.

Examples
tracker.getClientId().then(clientId => console.log("Client id is: ", clientId));

Returns Promise<string>

allowIDFA

Also called advertising identifier collection, and is used for advertising features.

Important: For iOS you can only use this method if you have done the optional step 6 from the installation guide. Only enable this (and link the appropriate libraries) if you plan to use advertising features in your app, or else your app may get rejected from the AppStore.

Parameters
  • enabled boolean (Optional) Defaults to true (optional, default true)
Examples
tracker.allowIDFA(true);

setAppName

Overrides the app name logged in Google Analytics. The Bundle name is used by default. Note: This has to be set each time the App starts.

Parameters
Examples
tracker.setAppName("YourAwesomeApp");

setAppVersion

Sets the trackers appVersion

Parameters
  • appVersion string (Required)
Examples
tracker.setAppVersion("1.3.2");

setAnonymizeIp

Sets if AnonymizeIp is enabled If enabled the last octet of the IP address will be removed

Parameters
Examples
tracker.setAnonymizeIp(true);

setSamplingRate

Sets tracker sampling rate.

Parameters
  • sampleRatio number (Required) Percentage 0 - 100
Examples
tracker.setSamplingRate(50);

setCurrency

Sets the currency for tracking.

Parameters
  • currencyCode string (Required) The currency ISO 4217 code
Examples
tracker.setCurrency("EUR");

setTrackUncaughtExceptions

Sets if uncaught exceptions should be tracked Important to note: On iOS this option is set on all trackers. On Android it is set per tracker. If you are using multiple trackers on iOS, this will enable & disable on all trackers.

Parameters

dispatch

This function lets you manually dispatch all hits which are queued. Use this function sparingly, as it will normally happen automatically as a batch. This function will also dispatch for all trackers.

Examples
tracker.dispatch().then(done => console.log("Dispatch is done: ", done));

Returns Promise<boolean> Returns when done

dispatchWithTimeout

The same as dispatch, but also gives you the ability to time out the Promise in case dispatch takes too long.

Parameters
  • timeout number The timeout. Default value is 15 sec. (optional, default -1)
Examples
tracker
  .dispatchWithTimeout(10000)
  .then(done => console.log("Dispatch is done: ", done));

Returns Promise<boolean> Returns when done or timed out

GoogleTagManager

Can only be used with one container. All functions returns a Promise.

Examples

import { GoogleTagManager } from "react-native-google-analytics-bridge";
GoogleTagManager.openContainerWithId("GT-NZT48")
  .then(() => GoogleTagManager.stringForKey("pack"))
  .then(str => console.log("Pack: ", str));

openContainerWithId

Call once to open the container for all subsequent static calls.

Parameters
Examples
GoogleTagManager.openContainerWithId('GT-NZT48').then((..) => ..)

Returns Promise<boolean>

refreshContainer

Refreshes the GTM container. According to Tag Manager documentations for Android can be called once every 15 minutes. No such limitations has been mentioned for iOS containers, though.

Examples
GoogleTagManager.refreshContainer().then((..) => ..)

Returns Promise<boolean>

boolForKey

Retrieves a boolean value with the given key from the opened container.

Parameters
Examples
GoogleTagManager.boolForKey("key").then(val => console.log(val));

Returns Promise<boolean>

stringForKey

Retrieves a string with the given key from the opened container.

Parameters
Examples
GoogleTagManager.stringForKey("key").then(val => console.log(val));

Returns Promise<string>

doubleForKey

Retrieves a number with the given key from the opened container.

Parameters
Examples
GoogleTagManager.doubleForKey("key").then(val => console.log(val));

Returns Promise<number>

pushDataLayerEvent

Push a datalayer event for Google Analytics through Google Tag Manager. The event must have at least one key "event" with event name.

Parameters
  • event DataLayerEvent An Map<String, Object> containing key and value pairs. It must have at least one key "event" with event name
Examples
GoogleTagManager.pushDataLayerEvent({
  event: "eventName",
  pageId: "/home"
}).then(success => console.log(success));

Returns Promise<boolean>

registerFunctionCallTagHandler

Register Function Call tag handler

Parameters

setVerboseLoggingEnabled

Sets logger to verbose, default is warning

Parameters

TimingMetadata

Used when tracking time measurements

Parameters

Examples

const timingMetadata = { name: "LoadList" } // name is a required value when tracking timing
tracker.trackTiming("testcategory", 13000, timingMetadata);

EventMetadata

Used when tracking event

Parameters

Examples

const eventMetadata = { label: "v1.0.3", value: 22 }
tracker.trackEvent("FinalizeOrderButton", "Click", eventMetadata);

HitPayload

The HitPayload object and possible values

Used by the different tracking methods for adding metadata to the hit.

Parameters

Examples

// If you want to do send a purchase payload with an event:
const product = {
  id: "P12345",
  name: "Android Warhol T-Shirt",
  category: "Apparel/T-Shirts",
  brand: "Google",
  variant: "Black",
  price: 29.2,
  quantity: 1,
  couponCode: "APPARELSALE"
};
const transaction = {
  id: "T12345",
  affiliation: "Google Store - Online",
  revenue: 37.39,
  tax: 2.85,
  shipping: 5.34,
  couponCode: "SUMMER2013"
};
const productAction = {
  transaction,
  action: 7 // Purchase action, see ProductActionEnum
}
const payload = { products: [ product ], productAction: productAction }
tracker.trackEvent("FinalizeOrderButton", "Click", null, payload);
// If you want to send custom dimensions with a screen view:
const customDimensions = {
  1: "Beta",
  3: "Premium"
};
const payload = { customDimensions };
tracker.trackScreenView("SaleScreen", payload);

CustomDimensionsByField

  • See: CustomDimensionsFieldIndexMap
  • See: CustomDimensionsByIndex

A dictionary with custom dimensions values and their (mapped) field name keys. In order to use this and send in custom dimensions by field name, you must have provided a CustomDimensionsFieldIndexMap when constructing the tracker.

Examples

const customDimensions = { customerType: "Premium", appType: "Beta", credit: 1200 }
tracker.trackScreenView("Home", { customDimensions });

CustomDimensionsByIndex

  • See: CustomDimensionsFieldIndexMap
  • See: CustomDimensionsByField

A dictionary with custom dimensions values and their index keys.

Examples

const customDimensions = { 1: "Premium", 3: "Beta", 5: 1200 }
tracker.trackScreenView("Home", { customDimensions });

CustomDimensionsFieldIndexMap

  • See: CustomDimensionsFieldIndexMap
  • See: CustomDimensionsByField

A dictionary describing mapping of field names to indices for custom dimensions. This is an optional object used by the tracker.

Examples

// Create something like:
const fieldIndexMap = { customerType: 1 };
// Construct tracker with it:
const tracker = new GoogleAnalyticsTracker("UA-12345-3", fieldIndexMap);
// This allows you to send in customDimensions in the`HitPayload by field name instead of index:
tracker.trackScreenView("Home", { customDimensions: { customerType: "Premium" } });
// If you do not provide a map, you instead have to send in by index:
tracker.trackScreenView("Home", { customDimensions: { 1: "Premium" } });

CustomMetrics

A dictionary with custom metric values and their index keys.

Examples

const customMetrics = { 1: 2389, 4: 15000 }
tracker.trackScreenView("Home", { customMetrics });

DataLayerEvent

The Google Tag Manager DataLayerEvent dictionary.

Populate this event-object with values to push to the DataLayer. The only required property is event.

Parameters

Examples

const dataLayerEvent = {
  event: "eventName",
  pageId: "/home"
};
GoogleTagManager.pushDataLayerEvent(dataLayerEvent);

ProductActionEnum

Enhanced Ecommerce ProductActionEnum

Used by ProductAction when describing the type of product action. The possible values (numbers) are:

  • Detail = 1,
  • Click = 2,
  • Add = 3,
  • Remove = 4,
  • Checkout = 5,
  • CheckoutOption = 6,
  • Purchase = 7,
  • Refund = 8

Product

Enhanced Ecommerce Product

Used by HitPayload when populating product actions or impressions

Parameters

Examples

const product = {
  id: "P12345",
  name: "Android Warhol T-Shirt",
  category: "Apparel/T-Shirts",
  brand: "Google",
  variant: "Black",
  price: 29.2,
  quantity: 1,
  couponCode: "APPARELSALE"
};

ProductAction

Enhanced Ecommerce Product Action

Used by HitPayload when describing a product action

Parameters

Examples

const productAction = {
  transaction,
  action: 7 // Purchase action, see ProductActionEnum
}
const productAction = {
  action: 3 // Add action, see ProductActionEnum
}

Transaction

Enhanced Ecommerce Transaction

Used by ProductAction when populating describing a purchase/transaction

Parameters

Examples

const transaction = {
  id: "T12345",
  affiliation: "Google Store - Online",
  revenue: 37.39,
  tax: 2.85,
  shipping: 5.34,
  couponCode: "SUMMER2013"
};

GitHub

https://github.com/idehub/react-native-google-analytics-bridge
Comments
  • 1. Updated podspec to include adSupport target as well

    This allows people to import AdSupport with podspec by targeting adSupport spec and regular users by not specificing any target (aka not breaking existing users)

    Makes it easier to integrate instead of manual integration of AdSupport

    Reviewed by ptomasroos at 2017-01-18 09:42
  • 2. Add dispatchWithCompletionHandler

    Add dispatchWithCompletionHandler to ensure sending data when app becomes background. (Fix #211)

    Usage:

    import { Linking, NativeModules } from 'react-native';
    const { GoogleAnalyticsBridge } = NativeModules;
    
    // ... open lind
    tracker.trackEvent('category', 'event name');
    
    GoogleAnalyticsBridge.dispatchWithCompletionHandler()
    .then(() => {
      Linking.openURL('https://example.com')
    })
    
    Reviewed by cpunion at 2018-01-18 04:09
  • 3. Ecommerce, + couple of other features

    • Added a java implementation of all the other features.
    • Removed the "legacy" purchase tracking, and left the enhanced one in place.
      • Renamed to trackPurchaseEvent
    • Fixed a few errors in the iOS code.
    • Added a bit more docs on top of everything. @gnestor
    Reviewed by cbrevik at 2016-01-25 19:18
  • 4. Fixed gradle warning of deprecated 'compile' configuration

    Description

    While trying to remove all deprecated warnings I stumbled upon this library not being updated yet. A quick and simple fix for this is to use implementation instead of compile.

    The original Gradle warning shown;

    > Configure project :react-native-google-analytics-bridge
    WARNING: Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.
    It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html
    
    Reviewed by ShaPOC at 2018-11-01 07:23
  • 5. Add `setAppName`.

    In a project we're working on we need to be able to set the appName, so here's a pull request for it. Let me know if it looks legit.

    Thanks for the cool project!

    Reviewed by alpacaaa at 2016-05-19 10:57
  • 6. Validate type definition as part of CI

    Embarrassingly, my last PR (#216) introduced a syntax error in the type definition. This PR fixes that error and also adds dtslint as part of the Travis CI process, so that this won't happen again.

    • Fixes the syntax error
    • Modifies the npm test script to run dtslint on the type definition
    • Adds tslint rules so that the existing index.d.ts passes linting
    • Updates .travis.yml to use a newer version of Node, as required by dtslint

    Here's an example build showing the original error:

    https://travis-ci.org/MichaelMarner/react-native-google-analytics-bridge/builds/334576677

    Sorry again for introducing the error in the first place.

    Reviewed by MichaelMarner at 2018-01-29 06:38
  • 7. Add support for Function Call tag

    Chages in this PR:

    • Loads default GTM container in Android if present. This behavior is currently disabled by always passing -1 to loadContainerPreferFresh method.
    • Adds support to register GTM Function Call tag handlers in React Native environment. (closes #256)
    Reviewed by fshafiee at 2018-06-17 18:54
  • 8. Support react-native +0.48 warning

    Will be deprecated in futures releases per stated by the warning:

    In a future release React Native will default to initializing all native modules on a background thread unless explicitly opted-out of.

    Fixes #186

    Reviewed by sospedra at 2017-11-23 15:11
  • 9. add experiment support

    add tag manager bridge for Experiments Followed android tutorial but can't find a way to refer defaultcontainer_binary as it lives in application level. Used -1 and it seems to be working

    Reviewed by evollu at 2016-04-12 20:50
  • 10. Removed deprecated method (createJSModules) of React Native 0.47.0

    Hi, I know you merged https://github.com/idehub/react-native-google-analytics-bridge/pull/145 before, but seems reverted it for some reason. And React Native release 0.47.0 today. So I think we can do this commit here. :)

    Thank you.

    Reviewed by patw0929 at 2017-08-02 07:27
  • 11. Track campaign from url

    This add a new function to initialize campaign tracking from a given url, this can be a deep link or any url.

    Extracted from analytics docs: https://developers.google.com/analytics/devguides/collection/android/v4/campaigns https://developers.google.com/analytics/devguides/collection/ios/v3/campaigns

    Reviewed by maxtechera at 2017-03-24 13:45
React Native `Settings` module for both Android & iOS.
React Native `Settings` module for both Android & iOS.

react-native-cross-settings React Native Settings module for both Android & iOS. If this library has helped you, don't forget to give it a star ?? Imp

Mar 28, 2022
Generates mobile app icons in all resolutions for both iOS and Android

makeicon Generates mobile app icons in all resolutions for both iOS and Android. Table of contents Requirements Installation Usage Contributors Licens

Mar 2, 2022
Snoopy is a profiling tool for React Native, that lets you snoop on the React Native Bridge.
Snoopy is a profiling tool for React Native, that lets you snoop on the React Native Bridge.

React Native Snoopy UPDATE: I wrote an article with the story behind this library. Snoopy is a profiling tool for React Native, that lets you snoop on

Apr 25, 2022
React Native wrapper for SegmentIO's Analytics SDK

RNSegmentIOAnalytics Written by Tal Kain [email protected] Based on SegmentIO (https://segment.com) Analytics project. The iOS SDK can be found here: https

May 27, 2019
The hassle-free way to integrate analytics into any web application.
The hassle-free way to integrate analytics into any web application.

⚠️ Be sure to check out the next generation of analytics.js! https://github.com/segmentio/analytics-next ?? If you have an existing JavaScript source

Apr 27, 2022
An HTTP network request monitor for React Native with in-app interface for iOS and Android with no native code
An HTTP network request monitor for React Native with in-app interface for iOS and Android with no native code

react-native-network-logger An HTTP traffic monitor for React Native including in app interface. An alternative to Wormholy but for both iOS and Andro

May 8, 2022
Synchronize native modules state by computing a digest of the ios/ and android/ directories in a React Native project.

native-modules-lock Synchronize native modules state by computing a digest of the ios/ and android/ directories in a React Native project. Usage Usage

Dec 5, 2021
React Native module for getting IDFA (iOS) or AAID (Android)

The Advertising Identifier (IDFA on iOS, AAID on Android) is a device-specific, unique, resettable ID for advertising that allows developers and marketers to track activity for advertising purposes.

Feb 17, 2022
React Native boilerplate supporting multiple platforms: Android, iOS, macOS, Windows, web, browser extensions, Electron.
React Native boilerplate supporting multiple platforms: Android, iOS, macOS, Windows, web, browser extensions, Electron.

React Native boilerplate supporting multiple platforms: Android, iOS, macOS, Windows, web, browser extensions, Electron.

May 13, 2022
🤖 React Native Android widgets bridged to JS, a proof of concept
 🤖 React Native Android widgets bridged to JS, a proof of concept

React Native Android Widget Proof Of Concept ?? Using React Native and having Android widgets is possible. Create buttons in Java / Android XML to tri

Apr 12, 2022
React native convert mov file to mp4 (iOS)

react-native-mov-to-mp4 Convert mov file to mp4 for cross-platform playback compatibility. Installation react-native >= 0.40: npm install react-native

Jan 25, 2022
iOS Today Widget in React Native
iOS Today Widget in React Native

React Native Today Widget Experimental library investigating limits of implementation iOS App Extensions using React Native. Sample result from Comple

May 3, 2022
ADB service auto restarting shell. really helpful if you are as lazy as i am and don't want to restart your adb service manually when it stops detecting your android phone.

adb-auto-restarter ADB service auto restarting shell. really helpful if you are as lazy as i am and don't want to restart your adb service manually wh

Feb 14, 2022
rn-native-hash - Simplified native dependency tracking for React Native

rn-native-hash - Simplified native dependency tracking for React Native rn-native-hash strives to make it easier to keep track of when the native depe

Jan 27, 2022
Create responsive styles that use media query on react native web and Dimensions API on react native.

Create responsive styles that use media query on react native web and Dimensions API on react native.

May 10, 2022
Shared event emitter between native and JS for React Native.
Shared event emitter between native and JS for React Native.

react-native-global-event-emitter Shared event emitter between native and JS for React Native. Uses iOS NotificationCenter and RN DeviceEventEmitter t

Mar 9, 2022
react-native-webp adds support for WebP images for react-native components.

react-native-webp adds support for WebP images for react-native components. Installation npm install react-native-webp --save rnpm link (or manually a

Jun 3, 2021
The standalone app based on official debugger of React Native, and includes React Inspector / Redux DevTools
The standalone app based on official debugger of React Native, and includes React Inspector / Redux DevTools

React Native Debugger Run the redux example of react-navigation with Redux DevTools setup This is a standalone app for debugging React Native apps: Ba

May 10, 2022
:pencil2: A collection of React Native snippets for Sublime Text and Atom

[Looking for Maintainer] react-native-snippets A collection of React Native snippets for Sublime Text and Atom. These snippets use ES6/7 syntax. Insta

Apr 15, 2022