{"id":4442,"url":"https://github.com/flurry/react-native-flurry-sdk","last_synced_at":"2025-08-04T01:32:27.102Z","repository":{"id":57337083,"uuid":"146358440","full_name":"flurry/react-native-flurry-sdk","owner":"flurry","description":"React Native Flurry SDK","archived":true,"fork":false,"pushed_at":"2023-11-13T19:18:00.000Z","size":589,"stargazers_count":45,"open_issues_count":6,"forks_count":13,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-07-06T20:05:05.817Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/flurry.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"Code-of-Conduct.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2018-08-27T21:53:12.000Z","updated_at":"2024-03-15T15:21:38.000Z","dependencies_parsed_at":"2024-01-08T01:03:07.622Z","dependency_job_id":"f11582d5-5cff-4274-9a17-55f9af359577","html_url":"https://github.com/flurry/react-native-flurry-sdk","commit_stats":{"total_commits":43,"total_committers":3,"mean_commits":"14.333333333333334","dds":"0.046511627906976716","last_synced_commit":"8bfe398f352e8f49d3f730f36e7d9a674a360f90"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/flurry/react-native-flurry-sdk","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flurry%2Freact-native-flurry-sdk","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flurry%2Freact-native-flurry-sdk/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flurry%2Freact-native-flurry-sdk/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flurry%2Freact-native-flurry-sdk/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/flurry","download_url":"https://codeload.github.com/flurry/react-native-flurry-sdk/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/flurry%2Freact-native-flurry-sdk/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268636376,"owners_count":24282081,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-03T02:00:12.545Z","response_time":2577,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-01-05T20:17:12.121Z","updated_at":"2025-08-04T01:32:26.837Z","avatar_url":"https://github.com/flurry.png","language":"Java","funding_links":[],"categories":["Components"],"sub_categories":["Analytics"],"readme":"# React Native Flurry SDK (react-native-flurry-sdk)\n\n[![npm](https://img.shields.io/npm/v/react-native-flurry-sdk.svg?colorB=blue\u0026)](https://www.npmjs.com/package/react-native-flurry-sdk)\n![platform](https://img.shields.io/badge/platform-android%20%7C%20ios%20%7C%20tvos-lightgrey)\n[![licence](https://img.shields.io/npm/l/react-native-flurry-sdk.svg?colorB=orange)](https://www.npmjs.com/package/react-native-flurry-sdk)\n\nA React Native plugin for Flurry SDK\n\n- **Tutorial and sample project** are now available at [https://github.com/flurry/React-Native-Tutorial](https://github.com/flurry/React-Native-Tutorial).\n- **Flurry Push** for messaging and **Flurry Config** for remote configuration are now supported by our plugin!\n- If you are using Apple Xcode \u003c 12, please use release [v6.3.0](https://www.npmjs.com/package/react-native-flurry-sdk/v/6.3.0).\n- If you are using React Native \u003c 0.60, please use release [v6.0.9](https://www.npmjs.com/package/react-native-flurry-sdk/v/6.0.9).\n\n## Table of contents\n\n- [Installation](#installation)\n  - [Android](#android)\n  - [iOS](#ios)\n  - [tvOS](#tvos)\n- [Example](#example)\n- [API Reference](#api-reference)\n- [Support](#support)\n- [License](#license)\n\n## Installation\n\n1. Install Flurry SDK module by `npm`\n\n   ```bash\n   npm install react-native-flurry-sdk --save\n   ```\n\n2. If you are using React Native \u003e= 0.60, install CocoaPods dependency\n\n   ```bash\n   cd ios \u0026\u0026 pod install \u0026\u0026 cd ..\n   ```\n\n   If you are using React Native \u003c 0.60, link React Native dependency\n\n   ```bash\n   react-native link react-native-flurry-sdk\n   ```\n\n3. Add Flurry JS code\n\n   ```javascript\n   import Flurry from 'react-native-flurry-sdk';\n   ```\n\n### Android\n\n- By default, Flurry adds `INTERNET` and `ACCESS_NETWORK_STATE` permissions to optimize analytics data. Please see [Manual Flurry Android SDK Integration](https://developer.yahoo.com/flurry/docs/integrateflurry/android-manual/) for the other recommended options.\n- To improve analytics identities, please see [Manual Flurry Android SDK Integration](https://developer.yahoo.com/flurry/docs/integrateflurry/android-manual/) for adding Google Play Services library in your app by including the following in your `build.gradle` file:\n\n  ```groovy\n  dependencies {\n      // Recommended to add Google Play Services\n      implementation 'com.google.android.gms:play-services-ads-identifier:17.1.0'\n  }\n  ```\n\n- **Flurry Push**\u003c/br\u003e\n  In order to use [Flurry Push](https://developer.yahoo.com/flurry/docs/push/) for [Android](https://developer.yahoo.com/flurry/docs/push/integration/android/), please follow the additional steps below:\n  1. Follow [Set up a Firebase Cloud Messaging client app on Android](https://firebase.google.com/docs/cloud-messaging/android/client). Complete \"Set up Firebase and the FCM SDK\" step for adding Firebase to your Android project. There should be a file `google-services.json` in your project's `android/app` folder now. You do not need to provide any setup codes here. Your `build.gradle` will look like:\n\n     ```groovy\n        // android/build.gradle (project-level)\n        buildscript {\n            dependencies {\n                classpath 'com.google.gms:google-services:4.3.10'\n            }\n        }\n     ```\n\n     ```groovy\n        // android/app/build.gradle (app-level)\n        apply plugin: 'com.google.gms.google-services'\n\n        dependencies {\n            implementation 'com.google.firebase:firebase-messaging:21.1.0'\n        }\n     ```\n\n  2. If you want to customize Flurry Push notification, please do the Flurry setup in `MainApplication.onCreate()`. With the same APIs as the JavaScript version.\n\n     ```java\n     import com.flurry.android.reactnative.FlurryModule;\n\n     public class MainApplication extends Application implements ReactApplication {\n\n       @Override\n       public void onCreate() {\n         super.onCreate();\n     \n         new FlurryModule.Builder()\n           .withCrashReporting(true)\n           .withLogEnabled(true)\n           .withLogLevel(Log.VERBOSE)\n           .withReportLocation(true)\n           .withMessaging(true, options_or_listener) // optional user's native `FlurryMarketingOptions` or `FlurryMessagingListener`.\n           .build(this, FLURRY_ANDROID_API_KEY);\n     ```\n\n  3. Add notification permission in the Android manifest file. (required on the Android 13 and above devices.)\n\n       ```xml\n        \u003cuses-permission android:name=\"android.permission.POST_NOTIFICATIONS\" /\u003e\n     ```\n     \n  4. Set up \"Android Authorization\" in Flurry [Push Authorization](https://developer.yahoo.com/flurry/docs/push/authorization/).\n\n### iOS\n\n- Please note that starting from [React Native 0.60](https://facebook.github.io/react-native/blog/2019/07/03/version-60), [CocoaPods](https://cocoapods.org) is now the default integration approach for React Native iOS projects. If you are not using CocoaPods, please stick to `react-native-flurry-sdk@6.0.9`.\n\n- **Flurry Push**\u003c/br\u003e\n  To set up Flurry Push, please take the following steps.\n  1. Open your Podfile, which is located under the `ios` folder of your project.\n\n  2. Add the following line in your target section before `use_native_modules!`\n\n     ```ruby\n     pod 'react-native-flurry-sdk', :path =\u003e '../node_modules/react-native-flurry-sdk/ios', :subspecs =\u003e ['FlurrySDK-Push']\n     ```\n\n     Your target section of Podfile should now look like this:\n\n     ```ruby\n     target 'YourTarget' do\n\n       # Pods for your target\n       pod 'React', :path =\u003e '../node_modules/react-native/'\n       pod 'React-Core', :path =\u003e '../node_modules/react-native/React'\n       # ... other React dependencies\n\n       # Add react-native-flurry-sdk\n       pod 'react-native-flurry-sdk', :path =\u003e '../node_modules/react-native-flurry-sdk/ios', :subspecs =\u003e ['FlurrySDK-Push']\n\n       # ... other targets\n       target 'YourTargetTests' do\n         # ...\n       end\n\n       use_native_modules!\n\n     end\n     ```\n\n  3. Install the dependencies again by executing\n\n     ```bash\n     cd ios \u0026\u0026 pod install \u0026\u0026 cd ..\n     ```\n\n  4. Open your `.xcworkspace` file which is under the `ios` folder. Go to \"Capabilities\" tab and enable Push Notifications.\n     ![push_ios_1](images/push_ios_1.png)\n\n  5. Enable Background Modes (Background Fetch and Remote Notifications turned on).\n     ![push_ios_2](images/push_ios_2.png)\n     Now your `Info.plist` should contain the following items. For more information, please see [Push Setup](https://developer.yahoo.com/flurry/docs/push/integration/ios/).\n     ![push_ios_3](images/push_ios_3.png)\n\n  6. Set up \"iOS Authorization\" in Flurry [Push Authorization](https://developer.yahoo.com/flurry/docs/push/authorization/).\n\n  7. In order to handle notifications from a cold start, Flurry Push requires to be initialized from AppDelegate as early as possible. Please open `AppDelegate.m`, import the header file\n\n     ```objc\n     #import \"ReactNativeFlurry.h\"\n     ```\n\n     And add this line right after `- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions`\n\n     ```objc\n     [ReactNativeFlurry enableMessaging];\n     ```\n\n### tvOS\n\n- Please note that Flurry Messaging and Flurry Config are currently not available on tvOS. For the detailed list of unavailable APIs, please see API reference below.\n\n## Example\n\n- `index.js`\n\n   ```javascript\n   import { AppRegistry } from 'react-native';\n   import { name as appName } from './app.json';\n   import App from './App';\n   import Flurry from 'react-native-flurry-sdk';\n  \n   // Init Flurry once as early as possible recommended in index.js.\n   // For each platform (Android, iOS) where the app runs you need to acquire a unique Flurry API Key.\n   // i.e., you need two API keys if you are going to release the app on both Android and iOS platforms.\n   // If you are building for TV platforms, you will need two API keys for Android TV and tvOS.\n   new Flurry.Builder()\n     .withCrashReporting(true)\n     .withLogEnabled(true)\n     .withLogLevel(Flurry.LogLevel.DEBUG)\n     .withReportLocation(true)\n     .build(FLURRY_ANDROID_API_KEY, FLURRY_IOS_API_KEY);\n  \n   AppRegistry.registerComponent(appName, () =\u003e App);\n   ```\n\n- `App.js`\n\n   ```javascript\n   import React, { Component } from 'react';\n   import {\n     Platform,\n     StyleSheet,\n     Text,\n     View\n   } from 'react-native';\n   import Flurry from 'react-native-flurry-sdk';\n  \n   type Props = {};\n   export default class App extends Component\u003cProps\u003e {\n     constructor(props) {\n       super(props);\n  \n       // Example to get Flurry versions.\n       Flurry.getVersions().then((versions) =\u003e {\n         console.log('Versions: ' + versions.agentVersion + ' : ' + versions.releaseVersion + ' : ' + versions.sessionId);\n       });\n\n       // Example to get Flurry Publisher Segmentation.\n       Flurry.getPublisherSegmentation(true).then((segmentations) =\u003e {\n         console.log('Publisher Segmentation: ' + segmentations.segments);\n       });\n     }\n  \n     render() {\n       // Set Flurry preferences.\n       Flurry.setLogEnabled(true);\n       Flurry.setLogLevel(Flurry.LogLevel.VERBOSE);\n    \n       // Set user preferences.\n       Flurry.setAge(36);\n       Flurry.setGender(Flurry.Gender.FEMALE);\n       Flurry.setReportLocation(true);\n  \n       // Set user properties.\n       Flurry.UserProperties.set(Flurry.UserProperties.PROPERTY_REGISTERED_USER, 'True');\n\n       // Log Flurry events.\n       Flurry.logEvent('React Native Event');\n       Flurry.logEvent('React Native Timed Event', {param: 'true'}, true);\n       ...\n       Flurry.endTimedEvent('React Native Timed Event');\n  \n       // Log Flurry standard events.\n       Flurry.logStandardEvent(Flurry.Event.APP_ACTIVATED);\n       var params = new Map([\n                        [Flurry.EventParam.TOTAL_AMOUNT, 34.99],\n                        [Flurry.EventParam.SUCCESS, true],\n                        [Flurry.EventParam.ITEM_NAME, 'book 1'],\n                        ['note', 'This is an awesome book to purchase !!!']\n                    ]);\n       Flurry.logStandardEvent(Flurry.Event.PURCHASED, params);\n\n       return (\n         \u003cView style={styles.container}\u003e\n           ...\n         \u003c/View\u003e\n       );\n     }\n   }\n   ...\n   ```\n\n- `index.js / Config.js`\n\n   ```javascript\n   Flurry.addConfigListener((event) =\u003e {\n     if (event.Type === Flurry.ConfigStatus.SUCCESS) {\n       // Data fetched, activate it.\n       Flurry.activateConfig();\n     } else if (event.Type === Flurry.ConfigStatus.ACTIVATED) {\n       // Received cached data, or newly activated data.\n       Flurry.getConfigString('welcome_message', 'Welcome!').then((value) =\u003e {\n         console.log((event.isCache ? 'Received cached data: ' : 'Received newly activated data: ') + value.welcome_message);\n       });\n     } else if (event.Type === Flurry.ConfigStatus.UNCHANGED) {\n       // Fetch finished, but data unchanged.\n       Flurry.getConfigString('welcome_message', 'Welcome!').then((value) =\u003e {\n         console.log('Received unchanged data: ' + value.welcome_message);\n       });\n     } else if (event.Type === Flurry.ConfigStatus.ERROR) {\n       // Fetch failed.\n       console.log('Fetch error! Retrying: ' + event.isRetrying);\n     }\n   });\n\n   Flurry.fetchConfig();\n   ```\n\n- `index.js / Messaging.js`\n\n   ```javascript\n   // To customize Flurry Push for Android, please duplicate Builder setup in your MainApplication.java.\n   new Flurry.Builder()\n     .withMessaging(true)\n     ...\n  \n   // Optionally add a listener to receive messaging events, and handle the notification.\n   // Please call required Flurry.willHandleMessage(boolean) when received event types of\n   // MessageType.RECEIVED or MessageType.CLICKED as soon as possible to avoid delay.\n   Flurry.addMessagingListener((message) =\u003e {\n     if (message.Type === Flurry.MessageType.RECEIVED) {\n       Flurry.willHandleMessage(false);\n     } else if (message.Type === Flurry.MessageType.CLICKED) {\n       Flurry.willHandleMessage(false);\n     }\n  \n     Flurry.printMessage(message);\n   });\n   ```\n\n## API Reference\n\nSee [Android](https://flurry.github.io/flurry-android-sdk/analytics/index.html)-[(FlurryAgent)](https://flurry.github.io/flurry-android-sdk/analytics/com/flurry/android/FlurryAgent.html) /\n[iOS](https://flurry.github.io/flurry-ios-sdk/Flurry%20Analytics%20API%20Documentation/index.html)-[(Flurry)](https://flurry.github.io/flurry-ios-sdk/Flurry%20Analytics%20API%20Documentation/interface_flurry.html) for the Flurry references.\n\n- **Methods to initialize Flurry**\n\n  ```javascript\n  Flurry.Builder.withAppVersion(versionName = '1.0'); // iOS only. For Android, please use Flurry.setVersionName() instead.\n  Flurry.Builder.withContinueSessionMillis(sessionMillis = 10000);\n  Flurry.Builder.withCrashReporting(crashReporting = true);\n  Flurry.Builder.withGppConsent(gppString: string, gppSectionIds: number[]);\n  Flurry.Builder.withDataSaleOptOut(isOptOut = false);\n  Flurry.Builder.withIAPReportingEnabled(enableIAP = true); // iOS only.\n  Flurry.Builder.withIncludeBackgroundSessionsInMetrics(includeBackgroundSessionsInMetrics = true);\n  Flurry.Builder.withLogEnabled(enableLog = true);\n  Flurry.Builder.withLogLevel(logLevel = Flurry.LogLevel.WARN); // LogLevel = { VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT }\n  Flurry.Builder.withReportLocation(reportLocation = true); // Android only\n  Flurry.Builder.withPerformanceMetrics(performanceMetrics = Flurry.Performance.ALL); // Performance = { NONE, COLD_START, SCREEN_TIME, ALL }\n  Flurry.Builder.withSslPinningEnabled(sslPinningEnabled = false); // Android only\n  Flurry.Builder.withMessaging(enableMessaging = true); // not available on tvOS\n  \n  Flurry.Builder.build(apiKeyAndroid: string, apiKeyIos: string);  // preferred; passing null if not available\n  Flurry.Builder.build(apiKey: string);  // use when only single platform is supported, or shared (not recommended)\n  \n  // tvOS only\n  Flurry.Builder.withTVSessionReportingInterval(interval = 5);\n  Flurry.Builder.withTVEventCountThreshold(threshold = 10);\n  ```\n\n- **Methods to set Flurry preferences**\n\n  ```javascript\n  Flurry.setContinueSessionMillis(sessionMillis = 10000);\n  Flurry.setCrashReporting(crashReporting = true);\n  Flurry.setIncludeBackgroundSessionsInMetrics(includeBackgroundSessionsInMetrics = true);\n  Flurry.setLogEnabled(enableLog = true);\n  Flurry.setLogLevel(logLevel = Flurry.LogLevel.WARN); // LogLevel = { VERBOSE, DEBUG, INFO, WARN, ERROR, ASSERT }\n  Flurry.setSslPinningEnabled(sslPinningEnabled = false); // Android only\n  ```\n\n- **Methods to set user preferences**\n\n  ```javascript\n  Flurry.setAge(age: number);\n  Flurry.setGender(gender: Flurry.Gender); // Gender = { MALE, FEMALE }\n  Flurry.setReportLocation(reportLocation: boolean);\n  Flurry.setSessionOrigin(originName: string, deepLink: string);\n  Flurry.setUserId(userId: string);\n  Flurry.setVersionName(versionName: string); // Android only. For iOS, please use Flurry.Builder.withAppVersion() instead.\n\n  Flurry.addOrigin(originName: string, originVersion: string);\n  Flurry.addOrigin(originName: string, originVersion: string, originParameters: { [key: string]: string; });\n  Flurry.addSessionProperty(name: string, value: string);\n  ```\n\n- **Methods to set privacy preferences**\n\n  ```javascript\n  Flurry.setGppConsent(gppString: string, gppSectionIds: number[]);\n  Flurry.setDataSaleOptOut(isOptOut: boolean);\n  Flurry.deleteData();\n  Flurry.openPrivacyDashboard();\n  ```\n\n- **Methods to set user properties**\n\n  ```javascript\n  // Standard User Properties: Flurry.UserProperties = {\n  //     PROPERTY_CURRENCY_PREFERENCE, PROPERTY_PURCHASER, PROPERTY_REGISTERED_USER, PROPERTY_SUBSCRIBER }\n  Flurry.UserProperties.set(propertyName: string, propertyValue:  string);\n  Flurry.UserProperties.set(propertyName: string, propertyValues: string[]);\n  Flurry.UserProperties.add(propertyName: string, propertyValue:  string);\n  Flurry.UserProperties.add(propertyName: string, propertyValues: string[]);\n  Flurry.UserProperties.remove(propertyName: string);\n  Flurry.UserProperties.remove(propertyName: string, propertyValue:  string);\n  Flurry.UserProperties.remove(propertyName: string, propertyValues: string[]);\n  Flurry.UserProperties.flag(propertyName: string);\n  ```\n\n- **Methods to get Flurry versions and publisher segmentation**\n\n  ```javascript\n  Flurry.getVersions(): Promise\u003c{ agentVersion: number; releaseVersion: string; sessionId: string; }\u003e;\n  Flurry.getVersions(errorCallback: (errorMessage: string) =\u003e void,\n                     successCallback: (agentVersion: number, releaseVersion: string, sessionId: string) =\u003e void);\n\n  Flurry.getPublisherSegmentation(refresh?: boolean): Promise\u003c{ segments: string }\u003e;\n  Flurry.fetchPublisherSegmentation();\n  ```\n\n- **Methods to log Flurry events**\n\n  ```javascript\n  Flurry.logEvent(eventId: string);\n  Flurry.logEvent(eventId: string, parameters: { [key: string]: string; });\n  Flurry.logEvent(eventId: string, timed: boolean);\n  Flurry.logEvent(eventId: string, parameters: { [key: string]: string; }, timed: boolean);\n  Flurry.logEvent(eventId: string, timedId: string);\n  Flurry.logEvent(eventId: string, parameters: { [key: string]: string; }, timedId: string);\n  \n  Flurry.endTimedEvent(eventId: string);\n  Flurry.endTimedEvent(eventId: string, parameters: { [key: string]: string; });\n  Flurry.endTimedEvent(eventId: string, timedId: string);\n  Flurry.endTimedEvent(eventId: string, parameters: { [key: string]: string; }, timedId: string);\n  \n  Flurry.logStandardEvent(eventId: Flurry.Event);\n  Flurry.logStandardEvent(eventId: Flurry.Event, parameters: { [key: Flurry.EventParam]: object; });\n  \n  Flurry.onPageView(); // Deprecated, API removed, no longer supported by Flurry.\n  \n  Flurry.onError(errorId: string, message: string, errorClass: string);\n  Flurry.onError(errorId: string, message: string, errorClass: string, errorParams: { [key: string]: string; });\n  \n  Flurry.logBreadcrumb(crashBreadcrumb: string);\n  Flurry.logPayment(productName: string, productId: string, quantity: number, price: number,\n                    currency: string, transactionId: string, parameters: { [key: string]: string; });\n  ```\n\n- **Methods to enable IAP reporting (iOS and tvOS)**\n\n  ```javascript\n  Flurry.setIAPReportingEnabled(enableIAP: boolean);\n  ```\n\n- **Methods to set the iOS conversion value sent to Apple through SKAdNetwork (iOS)**\n\n  ```javascript\n  Flurry.updateConversionValue(conversionValue: number)\n  Flurry.updateConversionValueWithEvent(flurryEvent: Flurry.SKAdNetworkEvent); // SKAdNetworkEvent = { NO_EVENT, REGISTRATION, LOGIN, SUBSCRIPTION, IN_APP_PURCHASE }\n  ```\n\n- **Methods for Flurry Performance Metrics**\n\n  ```javascript\n  Flurry.Performance.startResourceLogger();\n  Flurry.Performance.logResourceLogger(id: string);\n  Flurry.Performance.reportFullyDrawn();\n  ```\n\n- **Methods for Flurry Config**\n\n  ```javascript\n  // Event.Type:       Flurry.ConfigStatus = { SUCCESS, UNCHANGED, ERROR, ACTIVATED }\n  // Event.isRetrying: true if it is still retrying fetching, for ERROR type\n  // Event.isCache:    true if activated from the cached data, for ACTIVATED type\n  Flurry.addConfigListener   (callback: (event: { Type: string; isCache?: boolean; isRetrying?: boolean; }) =\u003e void);\n  Flurry.removeConfigListener(callback: (event: { Type: string; isCache?: boolean; isRetrying?: boolean; }) =\u003e void);\n  Flurry.fetchConfig();\n  Flurry.activateConfig():\n  Flurry.getConfigString(key: string, defaultValue: string):           Promise\u003c{ [key: string]: string; }\u003e;\n  Flurry.getConfigString(keysAndDefaults: { [key: string]: string; }): Promise\u003c{ [key: string]: string; }\u003e;\n  ```\n\n- **Methods for Messaging (Flurry Push)**\n\n  ```javascript\n  // Message.Type: Flurry.MessageType = { RECEIVED,  CLICKED,\n  //                                      CANCELLED, REFRESH } (Android only)\n  // Message.Title:       message title\n  // Message.Body:        message body\n  // Message.Data:        message data (Map)\n  // Message.ClickAction: click action (Android only)\n  // Message.Token:       refreshed token\n  Flurry.addMessagingListener(callback: (message: { Type: string;\n                    Title?: string; Body?: string; Data?: { [key: string]: string; }; ClickAction?: string;\n                    Token?: string; }) =\u003e void);\n  Flurry.removeMessagingListener(callback: (message: { Type: string;\n                    Title?: string; Body?: string; Data?: { [key: string]: string; }; ClickAction?: string;\n                    Token?: string; }) =\u003e void);\n  Flurry.willHandleMessage(handled: boolean);\n  Flurry.printMessage(message: { Type: string;\n                    Title?: string; Body?: string; Data?: { [key: string]: string; }; ClickAction?: string;\n                    Token?: string; });\n  ```\n\n## Support\n\n- [Flurry Developer Support Site](https://developer.yahoo.com/flurry/docs/)\n\n## License\n\nCopyright 2022 Yahoo Inc.\n\nThis project is licensed under the terms of the [Apache 2.0](https://www.apache.org/licenses/LICENSE-2.0) open source license. Please refer to [LICENSE](LICENSE) for the full terms.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflurry%2Freact-native-flurry-sdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fflurry%2Freact-native-flurry-sdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fflurry%2Freact-native-flurry-sdk/lists"}