• This repository has been archived on 04/Apr/2023
  • Stars
    star
    1,011
  • Rank 45,471 (Top 0.9 %)
  • Language
    TypeScript
  • License
    MIT License
  • Created almost 9 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

๐Ÿ”ฅ NativeScript plugin for Firebase

NativeScript Firebase plugin

Firebase

NPM version Downloads TotalDownloads

๐Ÿšจ๐Ÿšจ๐Ÿšจ I'M NO LONGER ABLE TO MAINTAIN THIS PROJECT - I'm archiving the project for now, but if you want to take over, please don't open an issue, but hit me up on Twitter @eddyverbruggen. Alternatively, please check out this excellent plugin: https://github.com/NativeScript/firebase

Features

Prerequisites

Head on over to https://console.firebase.google.com/ and sign up for a free account. Your first 'Firebase' will be automatically created and made available via an URL like https://n-plugin-test.firebaseio.com.

Open your Firebase project at the Google console and click 'Add app' to add an iOS and / or Android app. Follow the steps (make sure the bundle id is the same as your nativescript.id in package.json and you'll be able to download:

  • iOS: GoogleService-Info.plist which you'll add to your NativeScript project at app/App_Resources/iOS/GoogleService-Info.plist

  • Android: google-services.json which you'll add to your NativeScript project at app/App_Resources/Android/google-services.json

Note: for using separate versions of these files for development and production environments see this section

Installation

If you rather watch a (slightly outdated) video explaining the steps then check out this step-by-step guide - you'll also learn how to add iOS and Android support to the Firebase console and how to integrate anonymous authentication: YouTube demo

From the command prompt go to your app's root folder and execute this for NativeScript 7+:

tns plugin add @nativescript/firebase

or for NativeScript 6:

tns plugin add nativescript-plugin-firebase

This will launch an install script which will guide you through installing additional components. Check the doc links above to see what's what. You can always change your choices later.

Want to use this plugin with an external push notification provider and not use any Firebase feature? Just answer 'y' to the first question to skip most of them, and๏ธ hop on over to the Push Notification. Do not run the plugin's .init function in this case!

Using NativeScript SideKick? Then the aforementioned install script will not (be able to) run. In that case, running the app for Android will result in this issue. To fix that, see this comment.

Config

If you choose to save your config during the installation, the supported options may be saved in the firebase.nativescript.json at the root of your app. This is to ensure your app may roundtrip source control and installation on CI won't prompt for user input during installation.

You can reconfigure the plugin by going to the node_modules/nativescript-plugin-firebase and running npm run config.

You can also change the configuration by deleting the firebase.nativescript.json and reinstalling the plugin.

Be advised. Enabling some features (such as Admob) in the firebase.nativescript.json may require additional configuration. If you are experiencing crashes or bugs after installing this plugin please consult the documentation for each of the features you've enabled to ensure that no additioal configuration is required.

Using Vue?

Please update your NativeScript-Vue template to 2.0 because it aligns perfectly with this plugin (because that template is now much more similar to a regular NativeScript project).

If you want a demo using Vue and Firestore, then check out this project, if you want one with Realtime DB, check out this one.

iOS (Cocoapods)

The Firebase iOS SDK is installed via Cocoapods, so run pod repo update from the command prompt (in any folder) to ensure you have the latest spec.

Google Play Services Version

The plugin will default to this version of the Android play-services-base SDK. If you need to change the version (to for instance the latest version), you can add a project ext property googlePlayServicesVersion to app/App_Resources/Android/app.gradle:

project.ext {
    googlePlayServicesVersion = "+"
}

Usage

Demo app

If you want a quickstart, clone the repo, then:

  • cd src.
  • npm i (just answer 'n' to any prompts as they are ignored anyway).
  • npm run demo.ios or npm run demo.android (answer 'n' again if prompted).

Start-up wiring

We need to do some wiring when your app starts, so open app.js and add this before application.start();:

JavaScript
// NativeScript 7+
var firebase = require("@nativescript/firebase").firebase;

// NativeScript 6-
var firebase = require("nativescript-plugin-firebase");

firebase.init({
  // Optionally pass in properties for database, authentication and cloud messaging,
  // see their respective docs.
}).then(
    function () {
      console.log("firebase.init done");
    },
    function (error) {
      console.log("firebase.init error: " + error);
    }
);

TypeScript

// NativeScript 7+
import { firebase } from "@nativescript/firebase";

// NativeScript 6-
const firebase = require("nativescript-plugin-firebase");

firebase.init({
  // Optionally pass in properties for database, authentication and cloud messaging,
  // see their respective docs.
}).then(
  () => {
    console.log("firebase.init done");
  },
  error => {
    console.log(`firebase.init error: ${error}`);
  }
);

Angular

Because of the specifics of the angular bootstrap it is best to initalize firebase once the angular application is running. For example your main compoment's ngOnInit method:

// NativeScript 7+
import { firebase } from "@nativescript/firebase";

// NativeScript 6-
const firebase = require("nativescript-plugin-firebase");

@Component({
    // ...
})
export class AppComponent implements OnInit {
  ngOnInit() {
    firebase.init({
      // Optionally pass in properties for database, authentication and cloud messaging,
      // see their respective docs.
    }).then(
      () => {
        console.log("firebase.init done");
      },
      error => {
        console.log(`firebase.init error: ${error}`);
      }
    );
  }
}

Known issues on iOS

Trouble running on the simulator

Open or create App_Resources/iOS/<appname>.entitlements and add these two keys with the value true:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>com.apple.keystore.access-keychain-keys</key>
    <true/>
    <key>com.apple.keystore.device</key>
    <true/>
</dict>
</plist>

Authentication failed: invalid_token

On the simulator you may see this message if you have more than one app with the Firebase SDK ever installed:

[FirebaseDatabase] Authentication failed: invalid_token (Invalid claim 'aud' in auth token.)
or
[FirebaseDatabase] Authentication failed: invalid_token (audience was project 'firegroceries-904d0' but should have been project 'your-firebase-project')

This is a known issue in the Firebase SDK. I always use a real device to avoid this problem, but you can pass an 'iOSEmulatorFlush' option to init.

firebase.init({
  // Optionally pass in properties for database, authentication and cloud messaging,
  // see their respective docs and 'iOSEmulatorFlush' to flush token before init.
  iOSEmulatorFlush: true
}).then()

Pod dependency error

If you see an error like Unable to satisfy the following requirements: Firebase (~> 3.17.0) required by Podfile, then run pod repo update on the command line to make sure you have the latest Podspec.

This could happen when updating the plugin to a new version. You'll want to tns platform remove ios && tns platform add ios as well to clean out the old pod version.

Known issues on Android

Genymotion

You can use the awesome Genymotion emulator but you'll need to install Google Play Services on it or you'll run into errors during authentication.

DexIndexOverflowException

com.android.dex.DexIndexOverflowException: method ID not in..

Congrats, you ran into this issue which can be solved by adding multiDexEnabled true to your app/App_Resources/Android/app.gradle so it becomes something like this:

android {  
  defaultConfig {  
    applicationId = "__PACKAGE__"  
    multiDexEnabled true
    generatedDensities = []
  }  
  aaptOptions {  
    additionalParameters "--no-version-vectors"  
  }  
}

java.lang.OutOfMemoryError: GC overhead limit exceeded

Increase the Java Max Heap Size like this (the bit at the end):

android {  
  defaultConfig {  
    applicationId = "__PACKAGE__"  
    multiDexEnabled true
    generatedDensities = []
  }
  aaptOptions {  
    additionalParameters "--no-version-vectors"  
  }
  dexOptions {
    javaMaxHeapSize "4g"
  }
}

FirebaseApp with name [DEFAULT] doesn't exist

Another possible error is "FirebaseApp with name [DEFAULT] doesn't exist." which will be solved by placing google-services.json to platforms/android/google-services.json (see above), and making the changes to build.gradle which are mentioned above as well.

Errors regarding API level 26.0.0

Update your local Android SDKs:

Just run $ANDROID_HOME/tools/bin/sdkmanager --update from a command prompt or launch the SDK manager from Android Studio, expand Extras and install any pending updates.

Found play-services:A.C.D, but version B.X.Y is needed..

Update your Android bits like the issue above and reinstall the android platform in your project.

include.gradle: Failed to apply plugin .. For input string: "+"

You probably have another plugin depending on Google Play Services (Google Maps, perhaps). We need to pin to a specific play services version to play nice with others, so open app/App_Resources/Android/app.gradle and add:

android {  
  // other stuff here

  project.ext {
    googlePlayServicesVersion = "15.0.0"
  }
}

Where "15.0.0" is best set to the same value as the googlePlayServicesVersion value in this file.

Separation of Environments

It is possible to use different development and production environments by using multiple GoogleService-Info.plist and google-services.json files.

Setup

  1. Create two separate Firebase projects (e.g. myproject and myproject-dev) and configure them with the same package name

  2. Download the plist and json files for both projects and put them in the relevant directories with either .dev or .prod appended to the file names, so you have the following files in place:

    • iOS
      • app/App_Resources/iOS/GoogleService-Info.plist.dev
      • app/App_Resources/iOS/GoogleService-Info.plist.prod
    • Android
      • app/App_Resources/Android/google-services.json.dev
      • app/App_Resources/Android/google-services.json.prod

Note: if you currently have the storageBucket property in the firebase.init() then remove it (not mandatory anymore as of version 6.5.0 of this plugin), so it will be taken automatically from the relevant google services plist and json files.

Build

The build hooks of this plugin will now choose either the dev or the prod version of your google services plist and json files depending on how you run your build:

  • dev will be selected if you run with either --env.dev, --env.development or --env.staging flags.
  • prod will be selected if you run with either --env.prod or --env.production.

Note: Using the --release flag without any of the above flags will set the default environment to production. If you need to create a release with dev environment you'll need to set it explicitly.

Note: if you do not have both dev and prod files in place, the regular GoogleService-Info.plist and google-services.json files will be used.

More Repositories

1

SocialSharing-PhoneGap-Plugin

๐Ÿ‘จโ€โค๏ธโ€๐Ÿ’‹โ€๐Ÿ‘จ Cordova plugin to share text, a file (image/PDF/..), or a URL (or all three) via the native sharing widget
Objective-C
1,778
star
2

Calendar-PhoneGap-Plugin

๐Ÿ“… Cordova plugin to Create, Change, Delete and Find Events in the native Calendar
Java
773
star
3

cordova-plugin-googleplus

โž• Cordova plugin to login with Google Sign-In on iOS and Android
Java
567
star
4

Toast-PhoneGap-Plugin

๐Ÿป A Toast popup plugin for your fancy Cordova app
C++
509
star
5

nativescript-barcodescanner

๐Ÿ”Ž NativeScript QR / barcode (bulk)scanner plugin
TypeScript
292
star
6

cordova-plugin-safariviewcontroller

๐Ÿฏ ๐Ÿ˜ ๐ŸŠ Forget InAppBrowser for iOS - this is way better for displaying read-only web content in your PhoneGap app
Java
281
star
7

cordova-plugin-native-keyboard

๐ŸŽน Add a Slack / WhatsApp - style chat keyboard to your Cordova app!
Objective-C
275
star
8

Insomnia-PhoneGap-Plugin

๐Ÿ˜ช Prevent the screen of the mobile device from falling asleep
JavaScript
266
star
9

cordova-plugin-touch-id

๐Ÿ’… ๐Ÿ‘ฑโ€โ™‚๏ธ Forget passwords, use a fingerprint scanner!
Objective-C
216
star
10

cordova-plugin-actionsheet

๐Ÿ“‹ ActionSheet plugin for Cordova iOS and Android apps
JavaScript
208
star
11

cordova-plugin-3dtouch

๐Ÿ‘‡ Quick Home Icon Actions and Link Previews
Objective-C
176
star
12

nativescript-pluginshowcase

An app I'm using to showcase a bunch of NativeScript plugins (also in the appstores!)
TypeScript
175
star
13

HealthKit

Cordova plugin for the iOS HealthKit framework
Objective-C
168
star
14

remove.bg

A Node.js wrapper for the remove.bg API
TypeScript
162
star
15

nativescript-local-notifications

๐Ÿ“ซ NativeScript plugin to easily schedule local notifications
TypeScript
162
star
16

SSLCertificateChecker-PhoneGap-Plugin

๐Ÿ›‚ Prevent Man in the Middle attacks with this Cordova plugin
Objective-C
156
star
17

VideoCapturePlus-PhoneGap-Plugin

๐ŸŽฅ
Objective-C
133
star
18

nativescript-fingerprint-auth

๐Ÿ’… ๐Ÿ‘ฑโ€โ™‚๏ธ Forget passwords, use a fingerprint scanner or facial recognition!
TypeScript
133
star
19

nativescript-feedback

๐Ÿ“ข Non-blocking textual feedback for your NativeScript app
TypeScript
129
star
20

nativescript-ar

Augmented Reality NativeScript plugin
TypeScript
118
star
21

nativescript-secure-storage

๐Ÿ” NativeScript plugin for secure local storage of fi. passwords
TypeScript
108
star
22

nativescript-nodeify

Makes most npm packages compatible with NativeScript
JavaScript
91
star
23

nativescript-speech-recognition

๐Ÿ’ฌ Speech to text, using the awesome engines readily available on the device.
TypeScript
90
star
24

nativescript-directions

๐Ÿ‘† ๐Ÿ‘‰ ๐Ÿ‘‡ ๐Ÿ‘ˆ Open the Maps app to show directions to anywhere you like
TypeScript
81
star
25

nativescript-localize

Internationalization plugin for NativeScript using native capabilities of each platform
TypeScript
79
star
26

nativescript-nfc

๐Ÿ“ NativeScript plugin to discover, read, and write NFC tags
TypeScript
77
star
27

nativescript-keyboard-toolbar

โŒจ๏ธ๐Ÿ› Add a customizable toolbar on top of the soft keyboard
TypeScript
69
star
28

nativescript-admob

NativeScript plugin to earn some precious ๐Ÿ’ฐ๐Ÿ’ฐ with ads by Google AdMob
JavaScript
68
star
29

cordova-plugin-ios-longpress-fix

๐Ÿ” Suppress the magnifying glass when long pressing an iOS9 PhoneGap app
Objective-C
67
star
30

nativescript-i18n

This is a plugin for Nativescript that implements native i18n in an easy manner.
JavaScript
65
star
31

cordova-plugin-taptic-engine

๐Ÿ“ณ Use Apple's Taptic Engine to vibrate your iPhone 6s (or up) in a variety of ways
Objective-C
61
star
32

Flashlight-PhoneGap-Plugin

๐Ÿ”ฆ Cordova plugin for using the torch / flashlight of your device
Java
60
star
33

cordova-plugin-backgroundaudio

๐ŸŽถ Background Audio plugin for Cordova PhoneGap apps
Objective-C
57
star
34

nativescript-gradient

๐ŸŽจ Easily add fancy (or subtle) gradient backgrounds to your views
TypeScript
54
star
35

nativescript-app-shortcuts

๐Ÿ‘‡ Home Icon Actions for your NativeScript app, now also for Android!
TypeScript
48
star
36

nativescript-appversion

๐Ÿ”ข NativeScript plugin to retrieve your app's package ID and current version
JavaScript
48
star
37

nativescript-email

โœ‰๏ธ NativeScript plugin for opening draft e-mails
JavaScript
47
star
38

nativescript-calendar

๐Ÿ“… NativeScript plugin to Create, Delete and Find Events in the native Calendar
TypeScript
44
star
39

barcodescanner-lib-aar

Project which compiles barcodescanner sources to an aar for use in Android projects
Java
41
star
40

nativescript-clipboard

๐Ÿ“‹ NativeScript plugin to copy stuff to the device clipboard, and read from it again
TypeScript
40
star
41

nativescript-apple-sign-in

Sign In With Apple, as seen on WWDC 2019, available with iOS 13
TypeScript
39
star
42

footplr

An app using NativeScript and Vue with Firebase (Firestore)
HTML
38
star
43

nativescript-ocr

๐Ÿ“ฐ ๐Ÿ” Tesseract-powered OCR plugin for NativeScript
TypeScript
38
star
44

nativescript-printer

๐Ÿ“  Send an image or the screen contents to a physical printer
TypeScript
35
star
45

HeadsetDetection-PhoneGap-Plugin

๐ŸŽง A PhoneGap plugin for detection of a headset (wired or bluetooth)
Java
34
star
46

nativescript-numeric-keyboard

๐Ÿ”ข Replace the meh default number/phone keyboard with this stylish one
TypeScript
33
star
47

nativescript-keyframes

Facebook Keyframes plugin - if CSS animations don't cut it for ya
JavaScript
32
star
48

nativescript-star-printer

๐ŸŒŸ Print directly to Star Micronics printers from your NativeScript app! http://www.starmicronics.com/
Objective-C
32
star
49

cordova-plugin-app-icon-changer

Change the homescreen icon of your Cordova iOS app at runtime!
Objective-C
32
star
50

nativescript-bluetooth-demo

JavaScript
30
star
51

nativescript-android-tv

A little PoC demonstrating code sharing between Android Phone and TV apps
TypeScript
27
star
52

nativescript-homekit

๐Ÿก HomeKit plugin for your fancy NativeScript app
TypeScript
24
star
53

nativescript-plugin-firebase-demo

Demo app for the NativeScript Firebase plugin
JavaScript
24
star
54

nativescript-performance-monitor

โšก Proof your app maintains 60-ish FPS by collecting data or showing it on screen with this NativeScript plugin!
TypeScript
21
star
55

nativescript-pushy

Easy push notifications for your NativeScript app!
TypeScript
21
star
56

nativescript-webview-utils

๐Ÿ•ธAdd request headers to a NativeScript WebView. Perhaps more utils later.
TypeScript
20
star
57

nativescript-particle

๐Ÿ•น Control your https://particle.io devices from NativeScript
TypeScript
20
star
58

cordova-plugin-webviewcolor

Objective-C
19
star
59

nativescript-appavailability

๐Ÿ”Ž NativeScript plugin to check whether or not another app is installed on the device
JavaScript
19
star
60

nativescript-mapbox-demo

Demo app for the NativeScript Mapbox plugin
JavaScript
18
star
61

nativescript-pedometer

๐Ÿพ step count tracking plugin for your NativeScript app
TypeScript
17
star
62

nativescript-taptic-engine

๐Ÿ“ณ Use Apple's Taptic Engine to vibrate your iPhone 6s (and up) in a variety of ways
Vue
16
star
63

nativescript-app-icon-changer

Change the homescreen icon of your NativeScript iOS app at runtime!
TypeScript
16
star
64

nativescript-local-notifications-demo

Demo app for the NativeScript local notifications plugin
JavaScript
15
star
65

nativescript-dark-mode

NativeScript plugin to tap into iOS13's Dark Mode and Android's Night Mode configs
TypeScript
15
star
66

nativescript-aws

[DEPRECATED, see the readme] NativeScript plugin for Amazon's AWS โ˜๏ธ services
JavaScript
15
star
67

nativescript-headset-detection

Detect when a headphone (jack or bluetooth) is (dis)connected.
TypeScript
14
star
68

CameraRoll-PhoneGap-Plugin

Objective-C
11
star
69

nativescripthighcharts

Demoing how to add highcharts to your NativeScript app
TypeScript
10
star
70

NativePageTransitions-Ionic-Demo

Demo App for Ionic framwork apps with the Native Page Transitions plugin
JavaScript
10
star
71

X-Services-PhoneGap-Build-Plugins-Demo

A demo repo for all of our PhoneGap Build plugins
JavaScript
10
star
72

nativescript-call

NativeScript plugin to interact with the native Call UI
TypeScript
8
star
73

cordova-plugin-researchkit

Cordova / PhoneGap plugin for the Apple's ResearchKit
Objective-C
8
star
74

phonegapbuildmonitor

Repository for the iOS and Android PhoneGap Build app: Buildmeister
CSS
6
star
75

nativescript-izettle

Accept payments directly in your NativeScript app with iZettle
5
star
76

nativescript-calendar-demo

Demo app for the NativeScript Calendar plugin
JavaScript
5
star
77

ns-vue-firebase-test

Sample code to show how to use Firebase with the NS-Vue Vue CLI template
JavaScript
5
star
78

nativescript-randombytes

๐Ÿ”€ ๐Ÿ”ข A NativeScript shim for the randombytes package
JavaScript
4
star
79

nativescript-date-utils

A simple plugin with a few date-related utilities
Shell
4
star
80

nativescript-admob-demo

Demo app for the NativeScript AdMob plugin
JavaScript
4
star
81

nativescript-snapkit

Log in to your app with your Snapchat account
TypeScript
3
star
82

ios-framework-barcodescanner

An iOS BarcodeScanner .framework library, wrapping the built-in iOS barcodescanner capabilities
Objective-C
2
star
83

bridgematebroadcast

Java
2
star
84

nativescript-barcodescanner-demo

Demo app for the NativeScript BarcodeScanner plugin
JavaScript
2
star
85

nativescript-ios-out-of-memory

Reproducing NativeScript issue 4490
JavaScript
1
star
86

nativescript-wkwebview

NativeScript WKWebView plugin for iOS
JavaScript
1
star
87

iOSMinVersion-PhoneGapBuild-Plugin

A PhoneGap Build plugin for overriding the minimal iOS version to deploy your app on.
1
star
88

iPadLandscapeEnabler-PhoneGapBuild-Plugin

1
star
89

mgggplus-frontend

Mobile client
JavaScript
1
star
90

nativescript-socket-mobile

1
star
91

Karma-App

JavaScript
1
star
92

nativescript-mapbox-vision

This is just a test, please ignore this repo for now ๐Ÿ˜Š
TypeScript
1
star
93

cordova-and-nativescript-pokemon-app

Showing how to create a similar app in both Cordova and NativeScript, using plugins for SocialSharing and NetworkInformation.
TypeScript
1
star