# Firebase setup for Saral App Telemetry

## **Setup react native side**

Some libraries have to be installed to add firebase Google Analytics and firebase Google Crashlytics in react native

```
npm i @react-native-firebase/app
npm i @react-native-firebase/analytics
npm i @react-native-firebase/crashlytics
```

### **Add In your module (app-level) Gradle file under dependencies**

```
implementation "com.google.firebase:firebase-iid:21.1.0"
implementation "com.google.firebase:firebase-bom:31.2.2"
implementation 'com.google.firebase:firebase-analytics'
implementation ('com.google.firebase:firebase-iid:21.1.0'){
transitive = true}
```

### **On the top of (app-level) Gradle file add this line**

```
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.google.firebase.analytics'
apply plugin: 'com.google.firebase.crashlytics'
```

### **Add In your root-level (project-level) Gradle file under dependencies**

```
classpath("com.google.gms:google-services:4.3.3")
classpath "com.google.firebase:firebase-iid:19.0.0"
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.7.1'
```

### **Add In your frontend/SaralApp/android/app/src/main/AndroidManifest.xml**

```
< meta-data android:name="firebase_analytics_collection_enabled" android:value="true" />

< meta-data android:name="firebase_crashlytics_collection_enabled" android:value="true" />
```

### **To link the app to firebase, go to the firebae console and make project**

[firebase console](https://firebase.google.com/)

### **To link the app after the project is created**

Add google-service.json under android/app

## **Firebase Analytics Run time configuration**

For enable or disable at run time environment firebase\_analytics\_collection\_enabled in App.js file **frontend/SaralApp/App.js**

You need to add flag **isFBAnalyticsEnabled** in login api

> > /schools/login

Response from api

> > "school": { "storeTrainingData": true, "name": "Dummy school 4", "schoolId": "u002", "state": "up", "district": "district1", "autoSync": true, "autoSyncFrequency": 900000, "tags": true, "autoSyncBatchSize": 10, "offlineMode": true, "isAppForceUpdateEnabled": false, "isFBAnalyticsEnabled": true, "userId": "u002" }

Add in code useEffect(async()=>{ let hasFBAnalytics = await getLoginData();

```
const hasFBAnalyticsValue = hasFBAnalytics.school && hasFBAnalytics.school.enableFBAnalytics
if(hasFBAnalyticsValue != null){
if (__DEV__) {
  analytics().setAnalyticsCollectionEnabled(hasFBAnalyticsValue);
  crashlytics().setCrashlyticsCollectionEnabled(hasFBAnalyticsValue);}  else{
  analytics().setAnalyticsCollectionEnabled(hasFBAnalyticsValue);
  crashlytics().setCrashlyticsCollectionEnabled(hasFBAnalyticsValue);}}},[])
```

**DEV** variable. By default if you run your app with **npx react-native run-android**, it will run in Debug mode and **DEV** will be true. In release mode, **DEV** will be false.\
Here **hasFBAnalyticsValue** is the flag which will come from backend as boolean.\
**If mobile is not connected with internet then data will not pushed to the firebase**

After adding all dependencie rebuild the app using **npx react-native run-android**

## **Firebase Pricing plans**

Get started at no cost,then pay as you go.\
Firebase service will be free of cost for some time but after some time events triggered it will be chargeable\
Here is the link for know all plans [pricing plans](https://firebase.google.com/pricing#blaze-calculator)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://saral.sunbird.org/use/firebase-setup-for-saral-app-telemetry.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
