Skip to content

Commit

Permalink
feat: support dynamic Firebase config (#572)
Browse files Browse the repository at this point in the history
* feat: support dynamic Firebase config

* style: format

* fix

* fix
  • Loading branch information
robingenz committed Feb 28, 2024
1 parent eb15c5e commit 4d21118
Show file tree
Hide file tree
Showing 10 changed files with 177 additions and 149 deletions.
13 changes: 13 additions & 0 deletions .changeset/healthy-shirts-occur.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
'@capacitor-firebase/app': minor
'@capacitor-firebase/app-check': minor
'@capacitor-firebase/authentication': minor
'@capacitor-firebase/crashlytics': minor
'@capacitor-firebase/firestore': minor
'@capacitor-firebase/messaging': minor
'@capacitor-firebase/remote-config': minor
'@capacitor-firebase/storage': minor
'@capacitor-firebase/analytics': minor
---

feat(android): support dynamic Firebase config
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,18 @@

public class FirebaseAnalytics {

private final com.google.firebase.analytics.FirebaseAnalytics analyticsInstance;
private final Context context;
private final Bridge bridge;

public FirebaseAnalytics(Context context, Bridge bridge) {
this.analyticsInstance = com.google.firebase.analytics.FirebaseAnalytics.getInstance(context);
this.context = context;
this.bridge = bridge;
}

@Nullable
public void getAppInstanceId(@NonNull final GetAppInstanceIdCallback resultCallback) {
this.analyticsInstance.getAppInstanceId()
getFirebaseAnalyticsInstance()
.getAppInstanceId()
.addOnCompleteListener(
task -> {
if (!task.isSuccessful()) {
Expand All @@ -37,11 +38,11 @@ public void getAppInstanceId(@NonNull final GetAppInstanceIdCallback resultCallb
}

public void setUserId(@Nullable String userId) {
analyticsInstance.setUserId(userId);
getFirebaseAnalyticsInstance().setUserId(userId);
}

public void setUserProperty(@NonNull String key, @Nullable String value) {
analyticsInstance.setUserProperty(key, value);
getFirebaseAnalyticsInstance().setUserProperty(key, value);
}

public void setCurrentScreen(String screenName, String screenClass) {
Expand All @@ -55,26 +56,30 @@ public void setCurrentScreen(String screenName, String screenClass) {
new Runnable() {
@Override
public void run() {
analyticsInstance.logEvent(com.google.firebase.analytics.FirebaseAnalytics.Event.SCREEN_VIEW, bundle);
getFirebaseAnalyticsInstance().logEvent(com.google.firebase.analytics.FirebaseAnalytics.Event.SCREEN_VIEW, bundle);
}
}
);
}

public void logEvent(@NonNull String key, @Nullable JSONObject json) {
Bundle bundle = FirebaseAnalyticsHelper.createBundleFromJson(json);
analyticsInstance.logEvent(key, bundle);
getFirebaseAnalyticsInstance().logEvent(key, bundle);
}

public void setSessionTimeoutDuration(long duration) {
analyticsInstance.setSessionTimeoutDuration(duration);
getFirebaseAnalyticsInstance().setSessionTimeoutDuration(duration);
}

public void setEnabled(boolean enabled) {
analyticsInstance.setAnalyticsCollectionEnabled(enabled);
getFirebaseAnalyticsInstance().setAnalyticsCollectionEnabled(enabled);
}

public void resetAnalyticsData() {
analyticsInstance.resetAnalyticsData();
getFirebaseAnalyticsInstance().resetAnalyticsData();
}

private com.google.firebase.analytics.FirebaseAnalytics getFirebaseAnalyticsInstance() {
return com.google.firebase.analytics.FirebaseAnalytics.getInstance(context);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,9 @@

public class FirebaseAppCheck {

private final com.google.firebase.appcheck.FirebaseAppCheck appCheckInstance;

public FirebaseAppCheck() {
this.appCheckInstance = com.google.firebase.appcheck.FirebaseAppCheck.getInstance();
}

public void getToken(boolean forceRefresh, final GetTokenResultCallback resultCallback) {
this.appCheckInstance.getAppCheckToken(forceRefresh)
getFirebaseAppCheckInstance()
.getAppCheckToken(forceRefresh)
.addOnSuccessListener(
appCheckToken -> {
resultCallback.success(appCheckToken.getToken(), appCheckToken.getExpireTimeMillis());
Expand All @@ -29,16 +24,19 @@ public void getToken(boolean forceRefresh, final GetTokenResultCallback resultCa

public void initialize(boolean debug, boolean isTokenAutoRefreshEnabled) {
if (debug) {
this.appCheckInstance.installAppCheckProviderFactory(DebugAppCheckProviderFactory.getInstance(), isTokenAutoRefreshEnabled);
getFirebaseAppCheckInstance()
.installAppCheckProviderFactory(DebugAppCheckProviderFactory.getInstance(), isTokenAutoRefreshEnabled);
} else {
this.appCheckInstance.installAppCheckProviderFactory(
PlayIntegrityAppCheckProviderFactory.getInstance(),
isTokenAutoRefreshEnabled
);
getFirebaseAppCheckInstance()
.installAppCheckProviderFactory(PlayIntegrityAppCheckProviderFactory.getInstance(), isTokenAutoRefreshEnabled);
}
}

public void setTokenAutoRefreshEnabled(boolean enabled) {
this.appCheckInstance.setTokenAutoRefreshEnabled(enabled);
getFirebaseAppCheckInstance().setTokenAutoRefreshEnabled(enabled);
}

private com.google.firebase.appcheck.FirebaseAppCheck getFirebaseAppCheckInstance() {
return com.google.firebase.appcheck.FirebaseAppCheck.getInstance();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,15 @@
public class FirebaseAppPlugin extends Plugin {

public static final String TAG = "FirebaseApp";
private FirebaseApp firebaseAppInstance;

public void load() {
firebaseAppInstance = FirebaseApp.getInstance();
}

@PluginMethod
public void getName(PluginCall call) {
try {
JSObject ret = new JSObject();
ret.put("name", firebaseAppInstance.getName());
call.resolve(ret);
String name = getFirebaseAppInstance().getName();

JSObject result = new JSObject();
result.put("name", name);
call.resolve(result);
} catch (Exception exception) {
Logger.error(TAG, exception.getMessage(), exception);
call.reject(exception.getMessage());
Expand All @@ -34,18 +31,23 @@ public void getName(PluginCall call) {
@PluginMethod
public void getOptions(PluginCall call) {
try {
FirebaseOptions options = firebaseAppInstance.getOptions();
JSObject ret = new JSObject();
ret.put("apiKey", options.getApiKey());
ret.put("applicationId", options.getApplicationId());
ret.put("databaseUrl", options.getDatabaseUrl());
ret.put("gcmSenderId", options.getGcmSenderId());
ret.put("projectId", options.getProjectId());
ret.put("storageBucket", options.getStorageBucket());
call.resolve(ret);
FirebaseOptions options = getFirebaseAppInstance().getOptions();

JSObject result = new JSObject();
result.put("apiKey", options.getApiKey());
result.put("applicationId", options.getApplicationId());
result.put("databaseUrl", options.getDatabaseUrl());
result.put("gcmSenderId", options.getGcmSenderId());
result.put("projectId", options.getProjectId());
result.put("storageBucket", options.getStorageBucket());
call.resolve(result);
} catch (Exception exception) {
Logger.error(TAG, exception.getMessage(), exception);
call.reject(exception.getMessage());
}
}

private FirebaseApp getFirebaseAppInstance() {
return FirebaseApp.getInstance();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ public class FirebaseAuthentication {

private FirebaseAuthenticationPlugin plugin;
private FirebaseAuthenticationConfig config;
private FirebaseAuth firebaseAuthInstance;
private FirebaseAuth.AuthStateListener firebaseAuthStateListener;
private AppleAuthProviderHandler appleAuthProviderHandler;
private FacebookAuthProviderHandler facebookAuthProviderHandler;
Expand All @@ -57,17 +56,16 @@ public class FirebaseAuthentication {
public FirebaseAuthentication(FirebaseAuthenticationPlugin plugin, FirebaseAuthenticationConfig config) {
this.plugin = plugin;
this.config = config;
firebaseAuthInstance = FirebaseAuth.getInstance();
this.initAuthProviderHandlers(config);
this.firebaseAuthStateListener =
firebaseAuth -> {
this.plugin.handleAuthStateChange();
};
firebaseAuthInstance.addAuthStateListener(this.firebaseAuthStateListener);
getFirebaseAuthInstance().addAuthStateListener(this.firebaseAuthStateListener);
}

public void applyActionCode(@NonNull String oobCode, @NonNull Runnable callback) {
firebaseAuthInstance
getFirebaseAuthInstance()
.applyActionCode(oobCode)
.addOnCompleteListener(
task -> {
Expand All @@ -94,7 +92,7 @@ public void createUserWithEmailAndPassword(PluginCall call) {
return;
}

firebaseAuthInstance
getFirebaseAuthInstance()
.createUserWithEmailAndPassword(email, password)
.addOnCompleteListener(
plugin.getActivity(),
Expand All @@ -114,7 +112,7 @@ public void createUserWithEmailAndPassword(PluginCall call) {
}

public void confirmPasswordReset(@NonNull String oobCode, @NonNull String newPassword, @NonNull Runnable callback) {
firebaseAuthInstance
getFirebaseAuthInstance()
.confirmPasswordReset(oobCode, newPassword)
.addOnCompleteListener(
task -> {
Expand All @@ -139,7 +137,7 @@ public void deleteUser(FirebaseUser user, @NonNull Runnable callback) {

@Nullable
public FirebaseUser getCurrentUser() {
return firebaseAuthInstance.getCurrentUser();
return getFirebaseAuthInstance().getCurrentUser();
}

public void getIdToken(Boolean forceRefresh, @NonNull final ResultCallback resultCallback) {
Expand All @@ -165,11 +163,11 @@ public void getIdToken(Boolean forceRefresh, @NonNull final ResultCallback resul

@Nullable
public String getTenantId() {
return firebaseAuthInstance.getTenantId();
return getFirebaseAuthInstance().getTenantId();
}

public boolean isSignInWithEmailLink(@NonNull String emailLink) {
return firebaseAuthInstance.isSignInWithEmailLink(emailLink);
return getFirebaseAuthInstance().isSignInWithEmailLink(emailLink);
}

public void linkWithApple(final PluginCall call) {
Expand Down Expand Up @@ -299,7 +297,7 @@ public void sendEmailVerification(FirebaseUser user, @NonNull Runnable callback)
}

public void sendPasswordResetEmail(@NonNull String email, @NonNull Runnable callback) {
firebaseAuthInstance
getFirebaseAuthInstance()
.sendPasswordResetEmail(email)
.addOnCompleteListener(
task -> {
Expand All @@ -309,7 +307,7 @@ public void sendPasswordResetEmail(@NonNull String email, @NonNull Runnable call
}

public void sendSignInLinkToEmail(@NonNull String email, @NonNull ActionCodeSettings actionCodeSettings, @NonNull Runnable callback) {
firebaseAuthInstance
getFirebaseAuthInstance()
.sendSignInLinkToEmail(email, actionCodeSettings)
.addOnCompleteListener(
task -> {
Expand All @@ -319,11 +317,11 @@ public void sendSignInLinkToEmail(@NonNull String email, @NonNull ActionCodeSett
}

public void setLanguageCode(String languageCode) {
firebaseAuthInstance.setLanguageCode(languageCode);
getFirebaseAuthInstance().setLanguageCode(languageCode);
}

public void setTenantId(String tenantId) {
firebaseAuthInstance.setTenantId(tenantId);
getFirebaseAuthInstance().setTenantId(tenantId);
}

public void signInAnonymously(final PluginCall call) {
Expand All @@ -332,7 +330,7 @@ public void signInAnonymously(final PluginCall call) {
call.reject(FirebaseAuthenticationPlugin.ERROR_SIGN_IN_ANONYMOUSLY_SKIP_NATIVE_AUTH);
return;
}
firebaseAuthInstance
getFirebaseAuthInstance()
.signInAnonymously()
.addOnCompleteListener(
plugin.getActivity(),
Expand Down Expand Up @@ -372,7 +370,7 @@ public void signInWithEmailAndPassword(final PluginCall call) {
String email = call.getString("email", "");
String password = call.getString("password", "");

firebaseAuthInstance
getFirebaseAuthInstance()
.signInWithEmailAndPassword(email, password)
.addOnCompleteListener(
plugin.getActivity(),
Expand Down Expand Up @@ -401,7 +399,7 @@ public void signInWithEmailLink(final PluginCall call) {
String email = call.getString("email", "");
String emailLink = call.getString("emailLink", "");

firebaseAuthInstance
getFirebaseAuthInstance()
.signInWithEmailLink(email, emailLink)
.addOnCompleteListener(
plugin.getActivity(),
Expand Down Expand Up @@ -468,7 +466,7 @@ public void signInWithCustomToken(final PluginCall call) {

String token = call.getString("token", "");

firebaseAuthInstance
getFirebaseAuthInstance()
.signInWithCustomToken(token)
.addOnCompleteListener(
plugin.getActivity(),
Expand Down Expand Up @@ -562,11 +560,11 @@ public void updateProfile(FirebaseUser user, String displayName, String photoUrl
}

public void useAppLanguage() {
firebaseAuthInstance.useAppLanguage();
getFirebaseAuthInstance().useAppLanguage();
}

public void useEmulator(@NonNull String host, int port) {
firebaseAuthInstance.useEmulator(host, port);
getFirebaseAuthInstance().useEmulator(host, port);
}

public void startActivityForResult(final PluginCall call, Intent intent, String callbackName) {
Expand Down Expand Up @@ -602,7 +600,7 @@ public void signInWithCredential(@NonNull SignInOptions options, @NonNull AuthCr
callback.success(result);
return;
}
firebaseAuthInstance
getFirebaseAuthInstance()
.signInWithCredential(credential)
.addOnCompleteListener(
plugin.getActivity(),
Expand All @@ -621,7 +619,7 @@ public void signInWithCredential(@NonNull SignInOptions options, @NonNull AuthCr
}

public void linkWithCredential(@NonNull AuthCredential credential, @NonNull ResultCallback callback) {
FirebaseUser user = firebaseAuthInstance.getCurrentUser();
FirebaseUser user = getFirebaseAuthInstance().getCurrentUser();
if (user == null) {
callback.error(new Exception(FirebaseAuthenticationPlugin.ERROR_NO_USER_SIGNED_IN));
return;
Expand Down Expand Up @@ -667,7 +665,7 @@ public void handleSuccessfulSignIn(
call.resolve(signInResult);
return;
}
firebaseAuthInstance
getFirebaseAuthInstance()
.signInWithCredential(credential)
.addOnCompleteListener(
plugin.getActivity(),
Expand Down Expand Up @@ -740,7 +738,7 @@ public void handleSuccessfulLink(
@Nullable String accessToken,
@Nullable String serverAuthCode
) {
FirebaseUser user = firebaseAuthInstance.getCurrentUser();
FirebaseUser user = getFirebaseAuthInstance().getCurrentUser();
if (user == null) {
call.reject(FirebaseAuthenticationPlugin.ERROR_NO_USER_SIGNED_IN);
return;
Expand Down Expand Up @@ -805,7 +803,7 @@ public void handlePhoneCodeSent(String verificationId) {
}

public FirebaseAuth getFirebaseAuthInstance() {
return firebaseAuthInstance;
return FirebaseAuth.getInstance();
}

public FirebaseAuthenticationPlugin getPlugin() {
Expand Down
Loading

0 comments on commit 4d21118

Please sign in to comment.