Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions RNQuickFirebase.podspec
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
require 'json'

package = JSON.parse(File.read('package.json'))

Pod::Spec.new do |s|
s.name = 'RNQuickFirebase'
s.version = package['version']
s.summary = package['description']
s.description = package['description']
s.license = package['license']
s.author = package['author']
s.homepage = package['homepage']
s.source = { :git => package['repository']['url'], :tag => s.version }

s.requires_arc = true
s.platform = :ios, '13.0'

s.preserve_paths = 'LICENSE', 'README.md', 'package.json', 'index.js'
s.source_files = 'ios/*.{h,mm}'

s.dependency 'Firebase/Core'
s.dependency 'FirebaseAnalytics'
s.dependency 'Firebase/Auth'

install_modules_dependencies(s)
end
29 changes: 13 additions & 16 deletions android/build.gradle
Original file line number Diff line number Diff line change
@@ -1,34 +1,34 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
repositories {
google()
mavenCentral()
}

dependencies {
classpath 'com.android.tools.build:gradle:3.5.4'
classpath 'com.android.tools.build:gradle:8.1.0'
}
}

apply plugin: 'com.android.library'
apply plugin: 'com.facebook.react'

def DEFAULT_TARGET_SDK_VERSION = 33
def DEFAULT_COMPILE_SDK_VERSION = 34
def DEFAULT_MIN_SDK_VERSION = 23
def DEFAULT_TARGET_SDK_VERSION = 34
def DEFAULT_FIREBASE_BOM_VERSION = "32.7.2"
def DEFAULT_SUPPORT_LIB_VERSION = "34.0.0"



android {
compileSdkVersion rootProject.hasProperty('compileSdkVersion') ? rootProject.compileSdkVersion : DEFAULT_COMPILE_SDK_VERSION

defaultConfig {
minSdkVersion 23
minSdkVersion rootProject.hasProperty('minSdkVersion') ? rootProject.minSdkVersion : DEFAULT_MIN_SDK_VERSION
targetSdkVersion rootProject.hasProperty('targetSdkVersion') ? rootProject.targetSdkVersion : DEFAULT_TARGET_SDK_VERSION
versionCode 1
versionName "1.0"
}

lintOptions {
abortOnError false
}

def agpVersion = com.android.Version.ANDROID_GRADLE_PLUGIN_VERSION
if (agpVersion.tokenize('.')[0].toInteger() >= 7) {
namespace "com.gds.quickfirebase"
Expand All @@ -38,18 +38,15 @@ android {
repositories {
mavenLocal()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url "$projectDir/../../../node_modules/react-native/android"
}
google()
mavenCentral()
}

dependencies {
//noinspection GradleCompatible
def firebaseBOMVersion = rootProject.hasProperty('firebaseBOMVersion') ? rootProject.firebaseBOMVersion : DEFAULT_FIREBASE_BOM_VERSION
def supportLibVersion = rootProject.hasProperty('supportLibVersion') ? rootProject.supportLibVersion : DEFAULT_SUPPORT_LIB_VERSION
implementation "com.android.support:appcompat-v7:$supportLibVersion"
implementation "com.facebook.react:react-native:+"
def firebaseBOMVersion = rootProject.hasProperty('firebaseBOMVersion') ? rootProject.firebaseBOMVersion : DEFAULT_FIREBASE_BOM_VERSION
implementation "com.facebook.react:react-android"
implementation platform("com.google.firebase:firebase-bom:$firebaseBOMVersion")
implementation "com.google.firebase:firebase-auth"
implementation('com.google.firebase:firebase-analytics') {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,25 +1,43 @@
package com.gds.quickfirebase;

import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.JavaScriptModule;
import androidx.annotation.NonNull;

import com.facebook.react.TurboReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.uimanager.ViewManager;
import com.facebook.react.module.model.ReactModuleInfo;
import com.facebook.react.module.model.ReactModuleInfoProvider;

import java.util.HashMap;
import java.util.Map;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class QuickFirebasePackage extends TurboReactPackage {

public class QuickFirebasePackage implements ReactPackage {
@Override
public List<NativeModule> createNativeModules(ReactApplicationContext reactContext) {
List<NativeModule> modules = new ArrayList<>();
modules.add(new RNQuickFirebase(reactContext));
return modules;
public NativeModule getModule(@NonNull String name, @NonNull ReactApplicationContext reactContext) {
if (name.equals(RNQuickFirebase.NAME)) {
return new RNQuickFirebase(reactContext);
}
return null;
}

@Override
public List<ViewManager> createViewManagers(ReactApplicationContext reactContext) {
return Collections.emptyList();
public ReactModuleInfoProvider getReactModuleInfoProvider() {
return () -> {
final Map<String, ReactModuleInfo> moduleInfos = new HashMap<>();
moduleInfos.put(
RNQuickFirebase.NAME,
new ReactModuleInfo(
RNQuickFirebase.NAME,
RNQuickFirebase.class.getName(),
false, // canOverrideExistingModule
false, // needsEagerInit
false, // hasConstants
false, // isCxxModule
true // isTurboModule
)
);
return moduleInfos;
};
}
}
73 changes: 42 additions & 31 deletions android/src/main/java/com/gds/quickfirebase/RNQuickFirebase.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@
import androidx.annotation.NonNull;
import android.os.Bundle;
import android.text.TextUtils;

import com.facebook.react.bridge.Arguments;
import com.facebook.react.bridge.Promise;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableMap;
import com.facebook.react.module.annotations.ReactModule;
Expand All @@ -24,40 +24,43 @@

import java.util.concurrent.TimeUnit;

// RNQuickFirebaseSpec is generated by Codegen from src/NativeRNQuickFirebase.ts
// It will be available after the first build of a consuming app with New Architecture enabled.
@SuppressLint("MissingPermission")
@ReactModule(name = "RNQuickFirebase")
public class RNQuickFirebase extends ReactContextBaseJavaModule {
@ReactModule(name = RNQuickFirebase.NAME)
public class RNQuickFirebase extends NativeRNQuickFirebaseSpec {

public static final String NAME = "RNQuickFirebase";

private ReactApplicationContext reactContext;
private final ReactApplicationContext reactContext;
private FirebaseAuth mAuth;
private FirebaseAnalytics firebaseAnalytics;
private String mVerificationId;

private PhoneAuthProvider.ForceResendingToken mResendToken;


public RNQuickFirebase(ReactApplicationContext reactContext) {
super(reactContext);
this.reactContext = reactContext;
mAuth = FirebaseAuth.getInstance();
firebaseAnalytics = FirebaseAnalytics.getInstance(reactContext);

}

@Override
@NonNull
public String getName() {
return "RNQuickFirebase";
return NAME;
}

@Override
@ReactMethod
public void sendOTP(String phone, final Promise promise) {
PhoneAuthOptions phoneAuthOptions = new PhoneAuthOptions.Builder(mAuth).setPhoneNumber(phone)
.setTimeout(60L, TimeUnit.SECONDS).setActivity(reactContext.getCurrentActivity())
public void sendOTP(String phone, Promise promise) {
PhoneAuthOptions phoneAuthOptions = new PhoneAuthOptions.Builder(mAuth)
.setPhoneNumber(phone)
.setTimeout(60L, TimeUnit.SECONDS)
.setActivity(reactContext.getCurrentActivity())
.setCallbacks(new PhoneAuthProvider.OnVerificationStateChangedCallbacks() {
@Override
public void onVerificationCompleted(@NonNull PhoneAuthCredential phoneAuthCredential) {

}

@Override
Expand All @@ -75,52 +78,60 @@ public void onCodeSent(@NonNull String verificationId, @NonNull PhoneAuthProvide
PhoneAuthProvider.verifyPhoneNumber(phoneAuthOptions);
}

@Override
@ReactMethod
public void validateOTP(String code,final Promise promise) {
public void validateOTP(String code, Promise promise) {
if (!TextUtils.isEmpty(mVerificationId)) {
PhoneAuthCredential credential = PhoneAuthProvider.getCredential(mVerificationId, code);
mAuth.signInWithCredential(credential).addOnCompleteListener(reactContext.getCurrentActivity(), new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
FirebaseUser user = task.getResult().getUser();
promise.resolve(user.getIdToken(false).getResult().getToken());
} else {
promise.reject(task.getException());
}
}
});
mAuth.signInWithCredential(credential).addOnCompleteListener(
reactContext.getCurrentActivity(),
new OnCompleteListener<AuthResult>() {
@Override
public void onComplete(@NonNull Task<AuthResult> task) {
if (task.isSuccessful()) {
FirebaseUser user = task.getResult().getUser();
promise.resolve(user.getIdToken(false).getResult().getToken());
} else {
promise.reject(task.getException());
}
}
});
} else {
promise.reject("Please enter valid OTP");
promise.reject("INVALID_OTP", "Please enter valid OTP");
}
}

@Override
@ReactMethod
public void signOut(final Promise promise) {
public void signOut(Promise promise) {
try {
mAuth.signOut();
promise.resolve(true);
}catch(Exception e){
promise.reject("false");
} catch (Exception e) {
promise.reject("SIGN_OUT_ERROR", e.getMessage());
}
}

@Override
@ReactMethod
public void setUserId(String id){
public void setUserId(String id) {
firebaseAnalytics.setUserId(id);
}

@Override
@ReactMethod
public void setUserProperty(String name, String property) {
firebaseAnalytics.setUserProperty(name, property);
}

@Override
@ReactMethod
public void logEvent(String name, ReadableMap parameters) {
Bundle parmas = parameters!=null? Arguments.toBundle(parameters):null;
firebaseAnalytics.logEvent(name,parmas);
Bundle params = parameters != null ? Arguments.toBundle(parameters) : null;
firebaseAnalytics.logEvent(name, params);
}

@Override
@ReactMethod
public void setAnalyticsEnabled(boolean enabled) {
firebaseAnalytics.setAnalyticsCollectionEnabled(enabled);
Expand Down
49 changes: 9 additions & 40 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,47 +1,16 @@
//
// Copyright © 2017-Present, Gaurav D. Sharma
// All rights reserved.
//
'use strict';

import { NativeModules } from 'react-native';
const bridge = NativeModules.RNQuickFirebase;
import { TurboModuleRegistry } from 'react-native';

const sendOTP = (phone: string): Promise => {
return new Promise((resolve, reject) =>
bridge
.sendOTP(phone)
.then(resolve)
.catch(reject)
);
};

const validateOTP = (otp: string): Promise => {
return new Promise((resolve, reject) =>
bridge
.validateOTP(otp)
.then(resolve)
.catch(reject)
);
};
const bridge = TurboModuleRegistry.getEnforcing('RNQuickFirebase');

const sendOTP = (phone) => bridge.sendOTP(phone);
const validateOTP = (otp) => bridge.validateOTP(otp);
const signOut = () => bridge.signOut();

// Firebase Analytics Methods
const setAnalyticsEnabled = (enabled: boolean) => {
return bridge.setAnalyticsEnabled(enabled)
};
const setUserId = (id) => {
return bridge.setUserId(id)
};

const setUserProperty = (name, property) => {
return bridge.setUserProperty(name, property)
};

const logEvent = (name, params) =>{
return bridge.logEvent(name, params)
};
const setAnalyticsEnabled = (enabled) => bridge.setAnalyticsEnabled(enabled);
const setUserId = (id) => bridge.setUserId(id);
const setUserProperty = (name, property) => bridge.setUserProperty(name, property);
const logEvent = (name, params) => bridge.logEvent(name, params);

module.exports = {
sendOTP,
Expand All @@ -50,5 +19,5 @@ module.exports = {
setAnalyticsEnabled,
setUserId,
setUserProperty,
logEvent
logEvent,
};
14 changes: 4 additions & 10 deletions ios/RNQuickFirebase.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,8 @@
// All rights reserved.
//

#import <Foundation/Foundation.h>
#if __has_include(<FirebaseAuth/FIRAuth.h>)
#import <FirebaseAuth/FirebaseAuth.h>
#import <React/RCTBridgeModule.h>

@interface RNQuickFirebase : NSObject <RCTBridgeModule> @end
#else
@interface RNQuickFirebase : NSObject @end
#endif

#import <React/RCTBridgeModule.h>
#import <ReactCommon/RCTTurboModule.h>

@interface RNQuickFirebase : NSObject <RCTBridgeModule, RCTTurboModule>
@end
Loading