以编程方式更改默认的Firebase数据库,并在默认数据库和辅助数据库上运行相同的firebase函数

时间:2019-06-19 13:29:11

标签: firebase react-native firebase-realtime-database google-cloud-functions react-native-firebase

背景- 我正在设置一项新功能,允许用户选择他们所在的城市,因为我的应用程序是公共交通应用程序。我希望城市位于单独的数据库中,为此,我在firebase项目中创建了一个辅助数据库。这是一个React Native App,我正在使用react-native-firebase。

问题1- 当用户选择其他城市时,我希望该数据库成为他的默认数据库。我不知道该怎么做,有人可以帮忙吗?

我尝试初始化并仅更改databaseURL,即使我一次连接到第二个数据库,也并非每次都这样做。好像是一个不稳定的解决方案。

我发现的另一个解决方案是将URL传递给每个“ firebase.database(url)”,但这似乎是一个糟糕的解决方案。

问题2- 由于两个城市的应用程序完全相同,因此我想运行已经在DB1和DB2上运行的相同功能。它们是完全独立的DB,但具有完全相同的节点。例如,它们两个都有一个“位置”节点,然后我有一个侦听器,用于那里的更改。如何仅使用一个功能在两个数据库上设置侦听器?还是我需要获得对DB2的引用并仅复制函数?

1 个答案:

答案 0 :(得分:0)

每个用户没有默认数据库的概念。这意味着您将需要根据React Native Firebase文档中所示的JavaScript代码初始化Firebase:

// pluck values from your `GoogleService-Info.plist` you created on the firebase console
const iosConfig = {
  clientId: 'x',
  appId: 'x',
  apiKey: 'x',
  databaseURL: 'x',
  storageBucket: 'x',
  messagingSenderId: 'x',
  projectId: 'x',

  // enable persistence by adding the below flag
  persistence: true,
};

// pluck values from your `google-services.json` file you created on the firebase console
const androidConfig = {
  clientId: 'x',
  appId: 'x',
  apiKey: 'x',
  databaseURL: 'x',
  storageBucket: 'x',
  messagingSenderId: 'x',
  projectId: 'x',

  // enable persistence by adding the below flag
  persistence: true,
};

const kittensApp = firebase.initializeApp(
  // use platform specific firebase config
  Platform.OS === 'ios' ? iosConfig : androidConfig,
  // name of this app
  'kittens',
);

// dynamically created apps aren't available immediately due to the
// asynchronous nature of react native bridging, therefore you must
// wait for an `onReady` state before calling any modules/methods
// otherwise you will most likely run into `app not initialized` exceptions
kittensApp.onReady().then((app) => {
   // --- ready ---
   // use `app` arg, kittensApp var or `app('kittens')` to access modules
   // and their methods. e.g:
   firebase.app('kittens').auth().signInAnonymously().then((user) => {
       console.log('kittensApp user ->', user.toJSON());
   });
});