npm.io
1.7.0 • Published 1 week ago

react-native-tenjin

Licence
MIT
Version
1.7.0
Deps
0
Size
78 kB
Vulns
0
Weekly
0

React Native Tenjin Plugin

Summary

The Tenjin React Native Plugin allows users to track events and installs in their iOS/Android apps. To learn more about Tenjin and our product offering, please visit https://www.tenjin.com.

Notes:

On iOS: For AppTrackingTransparency, be sure to update your project .plist file and add NSUserTrackingUsageDescription along with the text message you want to display to users. This library is only available in iOS 14.0+. For further information on this, you can check our iOS documentation

Table of contents

Integrate with an AI assistant (LLM)

You can integrate the Tenjin React Native SDK with the help of an AI assistant (Claude, Cursor, GitHub Copilot, etc.). Paste the following prompt into your assistant of choice:

Add Tenjin SDK to my project using: https://raw.githubusercontent.com/tenjin/sdk-llm-guides/main/guides/react-native/llm-guide.md

The guide walks the assistant through the complete integration. For more details, see the Tenjin SDK Guides for LLMs.

Plugin Integration

Getting started

$ npm install react-native-tenjin --save

Mostly automatic installation

$ react-native link react-native-tenjin

Import
import Tenjin from 'react-native-tenjin';

Available methods

Initialize

You need to initialize the plugin before doing calling any of the other methods available, for this, you would need the api key provided on Tenjin's dashboard:

Tenjin.initialize(apiKey)

Parameters:

  • apiKey: String
Connect
Tenjin.connect()
Set AppStore type (only available for Android)
Tenjin.setAppStore(type)

Parameters:

  • type: String, possible values (googleplay, amazon, other)
OptIn
Tenjin.optIn()
OptOut
Tenjin.optOut()
OptIn with parameters
Tenjin.optIn(parameters)

Parameters:

  • parameters: Array
OptOut with parameters
Tenjin.optOut(parameters)

Parameters:

  • parameters: Array
OptIn and OptOut using CMP
Tenjin.optInOutUsingCMP()
Opt out of Google DMA parameters
Tenjin.optOutGoogleDMA()
Opt in of Google DMA parameters
Tenjin.optInGoogleDMA()
Register transaction (iOS)
transactionWithReceipt(productName, currencyCode, quantity, unitPrice, transactionId, receipt)

Parameters:

  • productName: String
  • currencyCode: String
  • quantity: Number
  • unitPrice: Number
  • transactionId: String
  • receipt: String (Base 64)
Register transaction (Android)
transactionWithDataSignature(productName, currencyCode, quantity, unitPrice, purchaseData, dataSignature)

Parameters:

  • productName: String
  • currencyCode: String
  • quantity: Number
  • unitPrice: Number
  • purchaseData: String
  • dataSignature: String
Subscription Tracking

Track subscription purchases for server-side verification and attribution. See SUBSCRIPTIONS_TRACKING.md for the full guide, including integration examples with react-native-iap.

// Option 1: Pass all parameters manually (e.g., from react-native-iap)
Tenjin.subscription({
  productId: 'com.example.monthly',
  currencyCode: 'USD',
  unitPrice: 9.99,
  // iOS-only
  iosTransactionId: '...',
  iosOriginalTransactionId: '...',
  iosReceipt: '...',
  iosSKTransaction: '...',
  // Android-only
  androidPurchaseToken: '...',
  androidPurchaseData: '...',
  androidDataSignature: '...',
});

// Option 2: Let the SDK fetch SK2 data natively (iOS only)
// Recommended for RevenueCat and other IAP libraries that don't expose SK2 data
Tenjin.subscriptionWithStoreKit(
  'com.example.monthly', // productId
  'USD',                  // currencyCode
  9.99,                   // unitPrice
  () => {},               // success
  (error) => {}           // error
);
Send event with name
Tenjin.eventWithName(name)

Parameters:

  • name: String
Send event with name and value
Tenjin.eventWithNameAndValue(name, value)

Parameters:

  • name: String
  • value: Number (integer)

Note: Passing a string value is deprecated and will show a warning. Please use a number instead.

LiveOps Campaigns

Tenjin supports retrieving of attributes, which are required for developers to get analytics installation id (previously known as tenjin reference id). This parameter can be used when there is no advertising id.

Append app subversion
Tenjin.appendAppSubversion(subversion)

Parameters:

  • subversion: Number

Report the deeplink your app was opened with, so re-engagement clicks can be attributed to the ad network.

Tenjin.handleOpenUrl(url)

Parameters:

  • url: string

Forward both the launch link and links received while the app is running:

Linking.getInitialURL().then((url) => url && Tenjin.handleOpenUrl(url));
Linking.addEventListener('url', ({ url }) => Tenjin.handleOpenUrl(url));

On iOS this is safe to call before initialize. On Android, opens that start or recreate your activity are captured automatically, so this is only needed for links delivered to an already-running activity.

Customer User ID
Tenjin.setCustomerUserId(userId)

Parameters:

  • userId: string
Tenjin.getCustomerUserId()

Returns: callback -> string

Get Analytics Installation ID
Tenjin.getAnalyticsInstallationId()

Returns: callback -> string

Retry/cache events and IAP

You can enable/disable retrying and caching events and IAP when requests fail or users don't have internet connection. These events will be sent after a new event has been added to the queue and user has recovered connection.

Tenjin.setCacheEventSetting(true)

Parameters:

  • setting: boolean

This setting is stored on the device and persists across app sessions on both iOS and Android. Once a build has enabled it, removing the setCacheEventSetting call in a later release will not disable caching for existing users, because the previously stored value stays in effect. To turn it off, explicitly call Tenjin.setCacheEventSetting(false).

User Profile - LiveOps Metrics

The Tenjin SDK automatically tracks user engagement metrics to help you understand player behavior and lifetime value. These metrics are collected automatically and can be accessed programmatically.

Automatic Tracking

The SDK automatically tracks:

  • Session metrics: Session count, duration, first/last session dates
  • In-App Purchases (IAP): Transaction count, revenue by currency, purchased product IDs
  • Ad Revenue (ILRD): Impression-level revenue from supported ad networks
Get User Profile Dictionary

Retrieve the user profile as a dictionary with all metrics:

Tenjin.getUserProfileDictionary((profile) => {
  console.log('Session Count:', profile.session_count);
  console.log('Total Session Time (ms):', profile.total_session_time);
  console.log('Average Session Length (ms):', profile.average_session_length);
  console.log('IAP Transaction Count:', profile.iap_transaction_count);
  console.log('Total ILRD Revenue USD:', profile.total_ilrd_revenue_usd);
});

Dictionary Keys (Always Present):

Key Type Description
session_count number Total sessions
total_session_time number Total time (milliseconds)
average_session_length number Average session (milliseconds)
last_session_length number Last session (milliseconds)
iap_transaction_count number Total IAP count
total_ilrd_revenue_usd number Total ad revenue USD

Dictionary Keys (Conditional - only if available):

Key Type Description
first_session_date string ISO8601 formatted date
last_session_date string ISO8601 formatted date
current_session_length number Active session duration (milliseconds)
iap_revenue_by_currency object Map of currency → revenue
purchased_product_ids array Sorted array of product IDs
ilrd_revenue_by_network object Map of network → revenue
Reset User Profile

Clear all user profile data (useful for testing or user logout):

Tenjin.resetUserProfile();
Impression Level Revenue Data Integration (ILRD)

Tenjin supports the ability to integrate with the Impression Level Ad Revenue (ILRD) feature from,

  • AppLovin
  • Unity LevelPlay
  • AdMob
  • TopOn
  • Clever Ads Solutions (CAS)
  • TradPlus
  • CloudX

ILRD is a paid feature, so please contact your Tenjin account manager to discuss the price at first before sending ILRD events.

CloudX ILRD Integration
// Send CloudX ad impression
const cloudXData = {
  adUnitId: 'ad_unit_id_from_cloudx',
  networkName: 'CloudX',
  adFormat: 'banner', // or 'interstitial', 'rewarded', etc.
  revenue: 0.15,
  currency: 'USD',
  placement: 'main_banner',
  networkPlacement: 'cloudx_placement_id'
};

Tenjin.eventAdImpressionCloudX(cloudXData);

Parameters:

  • adUnitId: String - The ad unit ID from CloudX
  • networkName: String - Ad network name (CloudX)
  • adFormat: String - Ad format (e.g., 'banner', 'interstitial', 'rewarded')
  • revenue: Number - Revenue value (can be 0 if not available)
  • currency: String - Currency code (default: 'USD')
  • placement: String - Optional placement identifier
  • networkPlacement: String - Optional network-specific placement identifier
Send Google DMA Parameters
Tenjin.setGoogleDMAParametersWithAdPersonalization(adPersonalization, adUserData)

Parameters:

  • adPersonalization: Boolean
  • adUserData: Boolean
SKAdNetwork and Conversion value (iOS)

As part of SKAdNetwork, we created a wrapper method for updatePostbackConversionValue(conversionValue: Integer). Our method will register the equivalent SKAdNetwork methods and also send the conversion values to our servers.

updatePostbackConversionValue(conversionValue: Integer) 6 bit value should correspond to the in-app event and shouldn’t be entered as binary representation but 0-63 integer.

As of iOS 16.1, which supports SKAdNetwork 4.0, you can now send coarseValue (String, with possible variants being "low", "medium" or "high") and lockWindow (Boolean) as parameters on the update postback method:

updatePostbackConversionValue(conversionValue: Integer, coarseValue: String)

updatePostbackConversionValue(conversionValue: Integer, coarseValue: String, lockWindow: Bool)

  • For iOS version 16.1+ which supports SKAdNetwork 4.0, you can call this method as many times as you want and can make the conversion value lower or higher than the previous value.

  • For iOS versions lower than 16.1 supporting SKAdnetWork versions lower than 4.0, you can call this method and our SDK will automatically detect the iOS version and update conversionValue only.

Support

If you have any issues with the plugin integration or usage, please contact us to support@tenjin.com

Keywords