From a2205160d80782e042386df92e8f2971d4bddd92 Mon Sep 17 00:00:00 2001 From: Salakar Date: Mon, 13 Aug 2018 23:18:08 +0100 Subject: [PATCH] [functions][android] add support for multiple firebase apps and specifying a function region --- android/build.gradle | 4 +- .../functions/RNFirebaseFunctions.java | 57 ++++++++++++++++--- bridge/android/app/build.gradle | 4 +- 3 files changed, 52 insertions(+), 13 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 15dd4337..a225dd9f 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -103,8 +103,8 @@ dependencies { compileOnly "com.google.firebase:firebase-core:16.0.1" compileOnly "com.google.firebase:firebase-crash:16.0.1" compileOnly "com.google.firebase:firebase-database:16.0.1" - compileOnly "com.google.firebase:firebase-firestore:17.0.2" - compileOnly "com.google.firebase:firebase-functions:16.0.1" + compileOnly "com.google.firebase:firebase-firestore:17.0.4" + compileOnly "com.google.firebase:firebase-functions:16.1.0" compileOnly "com.google.firebase:firebase-invites:16.0.1" compileOnly "com.google.firebase:firebase-storage:16.0.1" compileOnly "com.google.firebase:firebase-messaging:17.1.0" diff --git a/android/src/main/java/io/invertase/firebase/functions/RNFirebaseFunctions.java b/android/src/main/java/io/invertase/firebase/functions/RNFirebaseFunctions.java index 0f726f72..d419f916 100644 --- a/android/src/main/java/io/invertase/firebase/functions/RNFirebaseFunctions.java +++ b/android/src/main/java/io/invertase/firebase/functions/RNFirebaseFunctions.java @@ -5,14 +5,14 @@ import android.util.Log; import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.Promise; -import com.facebook.react.bridge.ReactMethod; -import com.facebook.react.bridge.ReadableMap; 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.bridge.WritableMap; import com.google.android.gms.tasks.OnFailureListener; import com.google.android.gms.tasks.OnSuccessListener; +import com.google.firebase.FirebaseApp; import com.google.firebase.functions.FirebaseFunctions; import com.google.firebase.functions.FirebaseFunctionsException; import com.google.firebase.functions.HttpsCallableReference; @@ -39,17 +39,56 @@ public class RNFirebaseFunctions extends ReactContextBaseJavaModule { return TAG; } + /** + * Changes this instance to point to a Cloud Functions emulator running + * locally. + *

+ * See https://firebase.google.com/docs/functions/local-emulator + * + * @param origin the origin string of the local emulator started via firebase tools + * "http://10.0.0.8:1337". + * @param appName + * @param region + * @param origin + * @param promise + */ @ReactMethod - public void httpsCallable(final String name, ReadableMap wrapper, final Promise promise) { + public void useFunctionsEmulator( + String appName, + String region, + String origin, + Promise promise + ) { + FirebaseApp firebaseApp = FirebaseApp.getInstance(appName); + FirebaseFunctions functionsInstance = FirebaseFunctions.getInstance(firebaseApp, region); + functionsInstance.useFunctionsEmulator(origin); + promise.resolve(null); + } + + /** + * @param appName + * @param region + * @param name + * @param wrapper + * @param promise + */ + @ReactMethod + public void httpsCallable( + String appName, + String region, + final String name, + ReadableMap wrapper, + final Promise promise + ) { Object input = wrapper .toHashMap() .get(DATA_KEY); Log.d(TAG, "function:call:input:" + name + ":" + (input != null ? input.toString() : "null")); - HttpsCallableReference httpsCallableReference = FirebaseFunctions - .getInstance() - .getHttpsCallable(name); + FirebaseApp firebaseApp = FirebaseApp.getInstance(appName); + FirebaseFunctions functionsInstance = FirebaseFunctions.getInstance(firebaseApp, region); + HttpsCallableReference httpsCallableReference = functionsInstance.getHttpsCallable(name); httpsCallableReference .call(input) @@ -96,9 +135,9 @@ public class RNFirebaseFunctions extends ReactContextBaseJavaModule { code = ffe .getCode() .name(); - message = ffe.getLocalizedMessage(); + message = ffe.getMessage(); } else { - message = exception.getLocalizedMessage(); + message = exception.getMessage(); } Utils.mapPutValue(CODE_KEY, code, map); diff --git a/bridge/android/app/build.gradle b/bridge/android/app/build.gradle index 49fa2a45..2fd8d1f5 100755 --- a/bridge/android/app/build.gradle +++ b/bridge/android/app/build.gradle @@ -100,8 +100,8 @@ dependencies { implementation "com.google.firebase:firebase-auth:16.0.2" implementation "com.google.firebase:firebase-config:16.0.0" implementation "com.google.firebase:firebase-database:16.0.1" - implementation "com.google.firebase:firebase-firestore:17.0.2" - implementation "com.google.firebase:firebase-functions:16.0.1" + implementation "com.google.firebase:firebase-firestore:17.0.4" + implementation "com.google.firebase:firebase-functions:16.1.0" implementation "com.google.firebase:firebase-invites:16.0.1" implementation "com.google.firebase:firebase-storage:16.0.1" implementation "com.google.firebase:firebase-messaging:17.1.0"