{"componentChunkName":"component---src-templates-documentation-tsx","path":"/releases/v6.0.0","result":{"data":{"mdx":{"body":"var _excluded = [\"components\"];\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n/* @jsxRuntime classic */\n/* @jsx mdx */\n\nvar _frontmatter = {\n  \"title\": \"v6.0.0 Release\",\n  \"description\": \"Introducing React Native Firebase version 6.0.0, now featuring the full suite of Firebase products and packed full of features.\"\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n    props = _objectWithoutProperties(_ref, _excluded);\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"Please tag any GitHub issues regarding v6.0.0 with \", mdx(\"inlineCode\", {\n    parentName: \"p\"\n  }, \"[v6]\"), \" in the title.\")), mdx(\"p\", null, \"This version is effectively a re-write with the goal of splitting every module into it's own package (simplifies maintenance\\nfor contributors and also installation for users) and additionally brings each Firebase module up to ~95+% testing coverage and 100%\\nFirebase API Coverage.\"), mdx(\"p\", null, \"Many of the manual native installation steps for Android & iOS have been removed and internally automated\\nwith most modules now just 'install and go'.\"), mdx(\"p\", null, \"The new modules:\"), mdx(\"table\", null, mdx(\"thead\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"thead\"\n  }, mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, \"Name\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, \"Downloads\"), mdx(\"th\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, \"Coverage\"))), mdx(\"tbody\", {\n    parentName: \"table\"\n  }, mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"/analytics\"\n  }, \"Analytics\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https://www.npmjs.com/package/@react-native-firebase/analytics\"\n  }, mdx(\"img\", {\n    parentName: \"a\",\n    \"src\": \"https://img.shields.io/npm/dm/@react-native-firebase/analytics.svg?style=for-the-badge&logo=npm\",\n    \"alt\": \"badge\"\n  }))), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https://api.rnfirebase.io/coverage/analytics/detail\"\n  }, mdx(\"img\", {\n    parentName: \"a\",\n    \"src\": \"https://api.rnfirebase.io/coverage/analytics/badge\",\n    \"alt\": \"badge\"\n  })))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"/app\"\n  }, \"App\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https://www.npmjs.com/package/@react-native-firebase/app\"\n  }, mdx(\"img\", {\n    parentName: \"a\",\n    \"src\": \"https://img.shields.io/npm/dm/@react-native-firebase/app.svg?style=for-the-badge&logo=npm\",\n    \"alt\": \"badge\"\n  }))), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https://api.rnfirebase.io/coverage/app/detail\"\n  }, mdx(\"img\", {\n    parentName: \"a\",\n    \"src\": \"https://api.rnfirebase.io/coverage/app/badge\",\n    \"alt\": \"badge\"\n  })))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"/functions\"\n  }, \"Cloud Functions\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https://www.npmjs.com/package/@react-native-firebase/functions\"\n  }, mdx(\"img\", {\n    parentName: \"a\",\n    \"src\": \"https://img.shields.io/npm/dm/@react-native-firebase/functions.svg?style=for-the-badge&logo=npm\",\n    \"alt\": \"badge\"\n  }))), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https://api.rnfirebase.io/coverage/functions/detail\"\n  }, mdx(\"img\", {\n    parentName: \"a\",\n    \"src\": \"https://api.rnfirebase.io/coverage/functions/badge\",\n    \"alt\": \"badge\"\n  })))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"/firestore\"\n  }, \"Cloud Firestore\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https://www.npmjs.com/package/@react-native-firebase/firestore\"\n  }, mdx(\"img\", {\n    parentName: \"a\",\n    \"src\": \"https://img.shields.io/npm/dm/@react-native-firebase/firestore.svg?style=for-the-badge&logo=npm\",\n    \"alt\": \"badge\"\n  }))), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https://api.rnfirebase.io/coverage/firestore/detail\"\n  }, mdx(\"img\", {\n    parentName: \"a\",\n    \"src\": \"https://api.rnfirebase.io/coverage/firestore/badge\",\n    \"alt\": \"badge\"\n  })))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"/storage\"\n  }, \"Cloud Storage\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https://www.npmjs.com/package/@react-native-firebase/storage\"\n  }, mdx(\"img\", {\n    parentName: \"a\",\n    \"src\": \"https://img.shields.io/npm/dm/@react-native-firebase/storage.svg?style=for-the-badge&logo=npm\",\n    \"alt\": \"badge\"\n  }))), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https://api.rnfirebase.io/coverage/storage/detail\"\n  }, mdx(\"img\", {\n    parentName: \"a\",\n    \"src\": \"https://api.rnfirebase.io/coverage/storage/badge\",\n    \"alt\": \"badge\"\n  })))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"/messaging\"\n  }, \"Cloud Messaging\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https://www.npmjs.com/package/@react-native-firebase/messaging\"\n  }, mdx(\"img\", {\n    parentName: \"a\",\n    \"src\": \"https://img.shields.io/npm/dm/@react-native-firebase/messaging.svg?style=for-the-badge&logo=npm\",\n    \"alt\": \"badge\"\n  }))), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https://api.rnfirebase.io/coverage/messaging/detail\"\n  }, mdx(\"img\", {\n    parentName: \"a\",\n    \"src\": \"https://api.rnfirebase.io/coverage/messaging/badge\",\n    \"alt\": \"badge\"\n  })))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"/crashlytics\"\n  }, \"Crashlytics\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https://www.npmjs.com/package/@react-native-firebase/crashlytics\"\n  }, mdx(\"img\", {\n    parentName: \"a\",\n    \"src\": \"https://img.shields.io/npm/dm/@react-native-firebase/crashlytics.svg?style=for-the-badge&logo=npm\",\n    \"alt\": \"badge\"\n  }))), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https://api.rnfirebase.io/coverage/crashlytics/detail\"\n  }, mdx(\"img\", {\n    parentName: \"a\",\n    \"src\": \"https://api.rnfirebase.io/coverage/crashlytics/badge\",\n    \"alt\": \"badge\"\n  })))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"/dynamic-links\"\n  }, \"Dynamic Links\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https://www.npmjs.com/package/@react-native-firebase/dynamic-links\"\n  }, mdx(\"img\", {\n    parentName: \"a\",\n    \"src\": \"https://img.shields.io/npm/dm/@react-native-firebase/dynamic-links.svg?style=for-the-badge&logo=npm\",\n    \"alt\": \"badge\"\n  }))), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https://api.rnfirebase.io/coverage/dynamic-links/detail\"\n  }, mdx(\"img\", {\n    parentName: \"a\",\n    \"src\": \"https://api.rnfirebase.io/coverage/dynamic-links/badge\",\n    \"alt\": \"badge\"\n  })))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"/in-app-messaging\"\n  }, \"In-app Messaging\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https://www.npmjs.com/package/@react-native-firebase/in-app-messaging\"\n  }, mdx(\"img\", {\n    parentName: \"a\",\n    \"src\": \"https://img.shields.io/npm/dm/@react-native-firebase/in-app-messaging.svg?style=for-the-badge&logo=npm\",\n    \"alt\": \"badge\"\n  }))), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https://api.rnfirebase.io/coverage/in-app-messaging/detail\"\n  }, mdx(\"img\", {\n    parentName: \"a\",\n    \"src\": \"https://api.rnfirebase.io/coverage/in-app-messaging/badge\",\n    \"alt\": \"badge\"\n  })))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"/iid\"\n  }, \"Instance ID\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https://www.npmjs.com/package/@react-native-firebase/iid\"\n  }, mdx(\"img\", {\n    parentName: \"a\",\n    \"src\": \"https://img.shields.io/npm/dm/@react-native-firebase/iid.svg?style=for-the-badge&logo=npm\",\n    \"alt\": \"badge\"\n  }))), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https://api.rnfirebase.io/coverage/iid/detail\"\n  }, mdx(\"img\", {\n    parentName: \"a\",\n    \"src\": \"https://api.rnfirebase.io/coverage/iid/badge\",\n    \"alt\": \"badge\"\n  })))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"/ml\"\n  }, \"ML\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https://www.npmjs.com/package/@react-native-firebase/ml\"\n  }, mdx(\"img\", {\n    parentName: \"a\",\n    \"src\": \"https://img.shields.io/npm/dm/@react-native-firebase/ml.svg?style=for-the-badge&logo=npm\",\n    \"alt\": \"badge\"\n  }))), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https://api.rnfirebase.io/coverage/ml/detail\"\n  }, mdx(\"img\", {\n    parentName: \"a\",\n    \"src\": \"https://api.rnfirebase.io/coverage/ml/badge\",\n    \"alt\": \"badge\"\n  })))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"/perf\"\n  }, \"Performance Monitoring\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https://www.npmjs.com/package/@react-native-firebase/perf\"\n  }, mdx(\"img\", {\n    parentName: \"a\",\n    \"src\": \"https://img.shields.io/npm/dm/@react-native-firebase/perf.svg?style=for-the-badge&logo=npm\",\n    \"alt\": \"badge\"\n  }))), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https://api.rnfirebase.io/coverage/perf/detail\"\n  }, mdx(\"img\", {\n    parentName: \"a\",\n    \"src\": \"https://api.rnfirebase.io/coverage/perf/badge\",\n    \"alt\": \"badge\"\n  })))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"/database\"\n  }, \"Realtime Database\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https://www.npmjs.com/package/@react-native-firebase/database\"\n  }, mdx(\"img\", {\n    parentName: \"a\",\n    \"src\": \"https://img.shields.io/npm/dm/@react-native-firebase/database.svg?style=for-the-badge&logo=npm\",\n    \"alt\": \"badge\"\n  }))), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https://api.rnfirebase.io/coverage/database/detail\"\n  }, mdx(\"img\", {\n    parentName: \"a\",\n    \"src\": \"https://api.rnfirebase.io/coverage/database/badge\",\n    \"alt\": \"badge\"\n  })))), mdx(\"tr\", {\n    parentName: \"tbody\"\n  }, mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": null\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"/remote-config\"\n  }, \"Remote Config\")), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https://www.npmjs.com/package/@react-native-firebase/remote-config\"\n  }, mdx(\"img\", {\n    parentName: \"a\",\n    \"src\": \"https://img.shields.io/npm/dm/@react-native-firebase/remote-config.svg?style=for-the-badge&logo=npm\",\n    \"alt\": \"badge\"\n  }))), mdx(\"td\", {\n    parentName: \"tr\",\n    \"align\": \"center\"\n  }, mdx(\"a\", {\n    parentName: \"td\",\n    \"href\": \"https://api.rnfirebase.io/coverage/remote-config/detail\"\n  }, mdx(\"img\", {\n    parentName: \"a\",\n    \"src\": \"https://api.rnfirebase.io/coverage/remote-config/badge\",\n    \"alt\": \"badge\"\n  })))))), mdx(\"hr\", null), mdx(\"p\", null, \"The following modules are currently \", mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"migration only\"), \" for now (migrated from v5 to v6 with minimal changes), what this means:\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"only some new work was done on them (e.g. migrating to v6 internals)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"only some new tests added for them (but all existing tests pass)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"flow types missing (but have TS types)\")), mdx(\"h3\", {\n    \"id\": \"where-is-the-notifications-library\"\n  }, \"Where is the Notifications library?\"), mdx(\"p\", null, \"Please see \", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://github.com/invertase/react-native-firebase/issues/2566\"\n  }, \"this issue\"), \" for the latest on notifications.\"), mdx(\"h2\", {\n    \"id\": \"changelog\"\n  }, \"Changelog\"), mdx(\"h3\", {\n    \"id\": \"general-library-changes\"\n  }, \"General Library Changes\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[INTERNAL]\", \" Improved error codes & handling for all Firebase services;\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Standardized native error to JS conversion\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[DEVEX]\", \" Native promise rejection errors now contain additional properties to aid debugging\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"All React Native Firebase native methods should now always return an Error to JS - even if the Error occurred due to native code.\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BUGFIX]\", \" All native events are now queued natively until a JS listener is registered. This fixes several race conditions for events like \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"onMessage\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"onNotification\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"onLink\"), \" etc where the event would trigger before JS was ready.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW][\\uD83D\\uDD25]\", \" In an effort to further reduce manual native code changes when integrating and configuring React Native Firebase; we have added support for configuring various Firebase services & features via a \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.json\"), \" file in your project root.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW][ios]\", \" CocoaPods static framework support for all modules (you can use \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"use_frameworks!\"), \" without issues relating to this lib)\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"Note\"), \": Currently this has been disabled as \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"use_frameworks!\"), \" support in React Native was broken again in RN60. We'll re-enable in a future release for RN61.\")))), mdx(\"hr\", null), mdx(\"h3\", {\n    \"id\": \"app-app\"\n  }, \"App (app)\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"appConfig\"), \" & method support for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"setAutomaticDataCollectionEnabled\"), \" & \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"automaticResourceManagement\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added app \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"options\"), \" support for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"gaTrackingId\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" The \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"[DEFAULT]\"), \" Firebase app can now be safely initialized in JS, however this has some caveats;\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Firebase services such as Performance Monitoring & Remote Config require the default app to be initialized through the plist/JSON file.\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" Waiting for apps to initialize via \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \".onReady()\"), \" has been removed. \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"initializeApp()\"), \" now returns a promise to the same effect\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" Trying to initialize the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"[DEFAULT]\"), \" Firebase app in JS when it was already initialized natively will now throw an error (formerly warned)\")), mdx(\"hr\", null), mdx(\"h3\", {\n    \"id\": \"admob\"\n  }, \"AdMob\"), mdx(\"p\", null, \"AdMob has undergone a full rewrite to keep up-to-date with the latest changes and APIs. The JavaScript API interface has been modified from v5 to provider a simpler, cleaner way to manage ads.\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" A new \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"AdsConsent\"), \" helper has been added to handle user ads consent, required under GDPR regulations. See the \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://invertase.io/oss/react-native-firebase/v6/admob/european-user-consent\"\n  }, \"documentation\"), \" for more information.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Global settings can be applied to AdMob via \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"setRequestConfiguration\"), \".\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"maxAdContentRating\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"tagForChildDirectedTreatment\"), \" & \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"tagForUnderAgeOfConsent\"), \" are now set a global configuration settings.\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"RewardedAd\"), \" interface used the new Google Mobile Ads SDK beta API. Rewarded ads can now be controlled from the user dashboard, supporting both video and interactive ads.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added support for requesting only non-personalized ads via the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"requestNonPersonalizedAdsOnly\"), \" request options.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added support for custom network extras on ad requests via \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"networkExtras\"), \".\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The user reward is now pre-fetched when the ad is loaded.\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" The API interface for interacting with AdMob has undergone a full re-write.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BUGFIX]\", \" Ads can now work during React Native debugging.\")), mdx(\"hr\", null), mdx(\"h3\", {\n    \"id\": \"app-invites-invites\"\n  }, \"App Invites (invites)\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" this module has been deprecated by Firebase and now been removed, you should migrate to Dynamic Links.\")), mdx(\"hr\", null), mdx(\"h3\", {\n    \"id\": \"analytics-analytics\"\n  }, \"Analytics (analytics)\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added support for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"resetAnalyticsData()\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added event specific methods for many built-in analytics events, e.g. \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"logLevelStart\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"logSearch\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"logSignUp\"), \" and many more, see the module reference documentation for the full list of methods added.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[INTERNAL]\", \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"setUserProperties\"), \" now iterates properties natively (formerly 1 native call per property)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" all analytics methods now return a Promise, rather than formerly being 'fire and forget'\")), mdx(\"hr\", null), mdx(\"h3\", {\n    \"id\": \"crashlytics-crashlytics\"\n  }, \"Crashlytics (crashlytics)\"), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Blog post announcement\"), \": [\", mdx(\"a\", {\n    parentName: \"p\",\n    \"href\": \"https://invertase.io/blog/firebase-crashlytics-for-react-native?utm_source=github&utm_medium=changelog\"\n  }, \"Firebase Crashlytics for React Native\"), \"]\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" JavaScript stack traces now automatically captured and parsed\\n\", mdx(\"img\", {\n    parentName: \"li\",\n    \"src\": \"https://pbs.twimg.com/media/D07RPDMW0AA7TTv.jpg:large\",\n    \"alt\": \"JavaScript stack trace preview\"\n  })), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Optionally enable automatic reporting of JavaScript unhandled Promise rejections\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added support for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"setUserName(userName: string)\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added support for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"setUserEmail(userEmail: string)\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added support for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"isCrashlyticsCollectionEnabled: boolean\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW][android]\", \" Added support for \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://docs.fabric.io/android/crashlytics/ndk.html#using-gradle\"\n  }, \"Crashlytics NDK\"), \" reporting. This allows Crashlytics to capture Yoga related crashes generated from React Native.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW][\\uD83D\\uDD25]\", \" Added \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.json\"), \" support for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"crashlytics_ndk_enabled\"), \", this toggles NDK support as mentioned above, defaults to \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"true\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW][\\uD83D\\uDD25]\", \" Added \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.json\"), \" support for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"crashlytics_debug_enabled\"), \", this toggles Crashlytics native debug logging, defaults to \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"false\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW][\\uD83D\\uDD25]\", \" Added \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.json\"), \" support for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"crashlytics_auto_collection_enabled\"), \", this toggles Crashlytics error reporting, this is useful for user opt-in first flows, e.g. set to \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"false\"), \" and when your user agrees to opt-in then call \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"setCrashlyticsCollectionEnabled(true)\"), \" in your app, defaults to \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"true\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BUGFIX][android]\", \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"crash()\"), \" now correctly crashes without being caught by a React Native red box\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"setBoolValue\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"setFloatValue\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"setIntValue\"), \" & \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"setStringValue\"), \" have been removed and replaced with two new methods (the Crashlytics SDK converted all these into strings internally anyway):\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"setAttribute(key: string, value: string): Promise<null>\"), \" - set a singular key value to show alongside any subsequent crash reports\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"setAttributes(values: { [key: string]: string }): Promise<null>\"), \" - set multiple key values to show alongside any subsequent crash reports\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" all methods except \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"crash\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"log\"), \" & \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"recordError\"), \" now return a \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Promise\"), \" that resolves when complete\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"recordError(code: number, message: string)\"), \"'s function signature changed to \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"recordError(error: Error)\"), \" - now accepts a JS Error class instance\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"setUserIdentifier()\"), \" has been renamed to \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"setUserId()\"), \" to match analytics implementation\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"enableCrashlyticsCollection()\"), \"'s function signature changed to \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"setCrashlyticsCollectionEnabled(enabled: boolean)\"), mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"This can be used in all scenarios (formerly only able to use this when automatic initialization of Crashlytics was disabled)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Changes do not take effect until the next app startup\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"This persists between app restarts and only needs to be called once, can be used in conjunction with \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"isCrashlyticsCollectionEnabled\"), \" to reduce bridge startup traffic - though calling multiple times is still allowed\")))), mdx(\"hr\", null), mdx(\"h3\", {\n    \"id\": \"cloud-firestore-firestore\"\n  }, \"Cloud Firestore (firestore)\"), mdx(\"p\", null, \"Cloud Firestore has undergone a complete overhaul of both JavaScript & native code, including a re-write of bridge serialization, support for new features & heavy test coverage.\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added support for collection group queries (\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firestore().collectionGroup()\"), \").\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added support for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"isEqual()\"), \" across most classes.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added support for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"SetOptions.mergeFields\"), \" (\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"DocumentReference.set()\"), \" / \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Transaction.set()\"), \").\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added support for handling snapshot metadata via the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"includeMetadataChanges\"), \" flag which can be passed to \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"CollectionReference.onSnapshot()\"), \" and \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"QuerySnapshot.docChanges()\"), \" to return additional results from query snapshot listeners.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Cache size can now be set to unlimited using the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"CACHE_SIZE_UNLIMITED\"), \" static when passed to \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firestore().settings()\"), \" (also added in v5.4).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BUGFIX]\", \" Remove Metro circular reference warnings.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BUGFIX]\", \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"DocumentReference\"), \" and \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"CollectionReference\"), \" snapshot observers now correctly handle the same arguments as the Web SDK.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BUGFIX]\", \" Validate transaction gets must also have a write command (matches Web SDK).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BUGFIX]\", \" Setting a negative infinity value (\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"-Infinity\"), \") now correctly works as expected.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BUGFIX]\", \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"QuerySnapshot.forEach()\"), \" can now correctly takes an optional context argument.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BUGFIX]\", \" Snapshot metadata now correctly returns a \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"SnapshotMetadata\"), \" class (as per Web SDK).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BUGFIX]\", \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"CollectionReference\"), \" now correctly extends a \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Query\"), \" class. In v5 it is possible to chain calls from \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Query\"), \" \\u2192 \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"CollectionReference\"), \" which isn't possible on the Web SDK.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BUGFIX]\", \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"onSnapshot()\"), \" calls now take the correct arguments, allowing for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"SnapshotListenOptions\"), \", inline function callbacks or an object containing next/error callbacks (as per the Web SDK).\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BUGFIX]\", \" Setting a \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Date\"), \" on Firestore was setting an incorrect value. Date objects are now converted to a \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Timestamp\"), \" as per the Web SDK.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BUGFIX]\", \" Cursor queries in v5 (\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"startAt\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"startAfter\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"endAt\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"endBefore\"), \") were incorrectly handling a \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"DocumentSnapshot\"), \" argument. It is now possible to perform a cursor query directly on a snapshot, or on snapshot fields, as per the Web SDK, for example ending at a specific snapshot with no order.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" Blob can no longer be constructed manually, as per the Web SDK.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" The v6 release includes \", mdx(\"strong\", {\n    parentName: \"li\"\n  }, \"a lot\"), \" of additional JavaScript validation. This is more consistent with the Web SDK and helps catch native errors/crashes which may occur due to false-positive data being sent over the bridge.\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Specifically, the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Query\"), \" class has undergone a rewrite, and includes a lot of additional checks which are not present in v5. Please check your Firestore queries once upgraded.\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" Removed the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Query.where\"), \" single equals operator (\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"=\"), \") as per the Web SDK. Use \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"==\"), \" instead.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" previously deprecated \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"setTimestampsInSnapshotsEnabled\"), \" on settings has now been removed.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[PERFORMANCE][\\uD83D\\uDD25]\", \" \", \"[ANDROID]\", \" Data serialization logic is now correctly performed off the main UI thread. This will help increase performance and reduce activity on the UI thread when sending large volumes of data to Firestore and back to the device.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[PERFORMANCE][\\uD83D\\uDD25]\", \" The data serialization logic has undergone a large rewrite for performance.\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"JavaScript data being sent over the native bridge has to be converted to it's native counterpart, and visa versa. When dealing with a large number of documents and/or large amounts document data, this process can be both time consuming and resource intensive. The rewrite keeps data being sent over the bridge at a minimum; mapping data types to smaller serialization format that can be parsed by JS and Native code.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Sample comparisons against v5 have shown:\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Data size sent over the bridge has been reduced by ~58%.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"On large queries (4 documents with 1500 nested array items (containing all data types)) are over ~50% faster on v6. Smaller queries (1 document with 1500 nested array items) are over ~15% quicker.\")))))), mdx(\"hr\", null), mdx(\"h3\", {\n    \"id\": \"dynamic-links-dynamiclinks\"\n  }, \"Dynamic Links (dynamicLinks)\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" the namespace for this module has changed, replace all usages of \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.links()\"), \" with \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.dynamicLinks()\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"onLink\"), \" & \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"getInitialLink\"), \" now return a \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"DynamicLink\"), \" object with multiple properties, formally just provided just the URL as a string\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW][ios]\", \"[\\uD83D\\uDD25]\", \" Manually adding \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"AppDelegate\"), \" methods to support receiving Dynamic Link open events is no longer required, we swizzle this at runtime and automatically intercept the required events.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BUGFIX]\", \" Links should now always be accessible via \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"onLink\"), \" & \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"getInitialLink\"), mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"This fix is a 'side-effect' of the bug fix mentioned above in the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"all modules\"), \" section ('\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"All native events are now queued natively\"), \"')\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" Creating a Dynamic Link builder via \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"new firebase.links.DynamicLink(link, domainURIPrefix)\"), \" has been deprecated, use a plain object instead as an argument for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"buildLink()\"), \" & \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"buildShortLink()\"), \".\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" Some previously allowed parameter configurations will now throw an argument error, e.g. trying to set any \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"DynamicLinkIOSParameters\"), \" parameter without providing an iOS bundle id will now error.\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"these configurations were incorrect to begin with but were never flagged to user code so may have gone unnoticed\")))), mdx(\"hr\", null), mdx(\"h3\", {\n    \"id\": \"functions-functions\"\n  }, \"Functions (functions)\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BUGFIX]\", \" Fixed an issue where \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"useFunctionsEmulator\"), \" does not persist natively (Firebase iOS SDK requires chaining this method before other calls and does not modify the instance, Android however persists this)\")), mdx(\"hr\", null), mdx(\"h3\", {\n    \"id\": \"in-app-messaging-inappmessaging---new\"\n  }, \"In-App Messaging (inAppMessaging) - \", mdx(\"strong\", {\n    parentName: \"h3\"\n  }, \"[NEW]\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added support for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.inAppMessaging().isMessagesDisplaySuppressed: boolean;\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added support for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.inAppMessaging().setMessagesDisplaySuppressed(enabled: boolean): Promise<null>;\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added support for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.inAppMessaging().isAutomaticDataCollectionEnabled: boolean;\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added support for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.inAppMessaging().setAutomaticDataCollectionEnabled(enabled: boolean): Promise<null>;\"))), mdx(\"hr\", null), mdx(\"h3\", {\n    \"id\": \"instance-id-iid\"\n  }, \"Instance Id (iid)\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Instance Id now supports multiple Firebase apps, e.g. \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.app('fooApp').iid().get()\"))), mdx(\"hr\", null), mdx(\"h3\", {\n    \"id\": \"cloud-messaging-messaging\"\n  }, \"Cloud Messaging (messaging)\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" added support for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"onSendError\"), \" events, an event that indicates a message (with id) failed to send\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" added support for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"onMessageSent\"), \" events, an event that indicates a message (with id) was successfully sent\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" added support for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"onDeletedMessages\"), \" events, an event that indicates the FCM server deleted pending messages\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"when your app instance receives this event, it should perform a full sync with your app server if it relies on message data\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"getToken\"), \" & \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"deleteToken\"), \" now optionally support \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"authorizedEntity\"), \" & \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"scope\"), \" arguments\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"authorizedEntity\"), \" - defaults to \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.app().options.messagingSenderId\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"scope\"), \" - defaults to \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"FCM\")))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW][ios]\", \" added support for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"isRegisteredForRemoteNotifications: boolean;\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW][ios]\", \" added support for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"unregisterForRemoteNotifications(): Promise<void>;\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW][ios]\", \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"requestPermission\"), \" on iOS 12+ devices now uses the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"UNAuthorizationOptionProvisional\"), \" option to request permission\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"this allows you to immediately start sending 'quiet' notifications to your users without their explicit permission, i.e., on a trial basis. \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"requestPermission\"), \" with this option will no longer show a permission request dialog to your user. \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"http://iosbrain.com/blog/2018/07/05/new-in-ios-12-implementing-provisional-authorization-for-quiet-notifications-in-swift/\"\n  }, \"Learn More\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://developer.apple.com/videos/play/wwdc2018/710/\"\n  }, \"[\", mdx(\"inlineCode\", {\n    parentName: \"a\"\n  }, \"WWDC 2018 Video\"), \"]\"), \" (30:00 onwards)\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" added support for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"isAutoInitEnabled: boolean;\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" added support for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"setAutoInitEnabled(enabled: boolean): Promise<void>;\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" added support for disabling messaging auto initialization via the new \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.json\"), \" configuration file\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"messaging_auto_init_enabled\"), \": \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"true/false\")))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW][android]\", \" added support for configuring the background Headless task timeout via the new \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.json\"), \" configuration file\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"messaging_android_headless_task_timeout\"), \": \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"number\"), \" - milliseconds\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW][android]\", \" added support for registering the background message headless task via \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.messaging().setBackgroundMessageHandler(handler: Function)\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING][android]\", \" manually registering the background message headless task handler via \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"AppRegistry.registerHeadlessTask\"), \" is no longer supported. Call \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.messaging().setBackgroundMessageHandler(handler: Function)\"), \" instead.\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"This is a preemptive change that will allow us to support background tasks for iOS in a future release (as it won't be via RN Headless Tasks as it's not supported on iOS)\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING][android]\", \" the manually added \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"RNFirebaseMessagingService\"), \" service in your \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"AndroidManifest.xml\"), \" file is no longer required - you can safely remove it.\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Many manual code changes that existed in v5 are now automatically handled for you in v6\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING][ios]\", \" any the manually added \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"AppDelegate.m\"), \" changes for messaging on v5 are longer required - you can safely remove them (search for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"RNFirebaseMessaging\"), \" in your \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"AppDelegate\"), \")\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Many manual code changes that existed in v5 are now automatically handled for you in v6\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" constructing a \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"RemoteMessage\"), \" instance via \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"new firebase.messaging.RemoteMessage()\"), \" is no longer supported, use \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.messaging().newRemoteMessage()\"), \" to retrieve a new remote message builder instance.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING][ios]\", \" the minimum supported iOS version is now 10\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"iOS 9 or lower only accounts for 0.% of all iPhone devices\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"to see a detailed device versions breakdown see \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://david-smith.org/iosversionstats/\"\n  }, \"this link\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"community contributions that add iOS 9 support are welcome\")))), mdx(\"hr\", null), mdx(\"h3\", {\n    \"id\": \"performance-monitoring-perf\"\n  }, \"Performance Monitoring (perf)\"), mdx(\"p\", null, \"The Performance Monitoring API has had a significant API change as originally highlighted would happen in the v5.x.x docs:\"), mdx(\"p\", null, mdx(\"img\", {\n    parentName: \"p\",\n    \"src\": \"https://user-images.githubusercontent.com/5347038/58876674-b633b780-86c6-11e9-8a74-6b6194c8ab05.png\",\n    \"alt\": \"image\"\n  })), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" All \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Trace\"), \" & \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"HttpMetric\"), \" methods (except for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"start\"), \" & \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"stop\"), \") are now synchronous and no longer return a Promise, extra attributes/metrics now only get sent to native when you call \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"stop\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.perf.Trace.incrementMetric\"), \" will now create a metric if it could not be found\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.perf.Trace.getMetric\"), \" will now return 0 if a metric could not be found\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added support for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.perf().isPerformanceCollectionEnabled: boolean\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.perf().startTrace(identifier: string): Promise<Trace>;\"), \" as a convenience method to create and immediately start a Trace\")), mdx(\"hr\", null), mdx(\"h3\", {\n    \"id\": \"realtime-database-database\"\n  }, \"Realtime Database (database)\"), mdx(\"p\", null, \"The Realtime Database module has had a large re-write, fixing various inconsistencies against the web SDK, along with improving data serialization on the native side by moving intensive serialization work off the UI thread.\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING][bugfix]\", \" The \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Reference\"), \" class now extends a \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Query\"), \" class (to match the web SDK). Currently in v5 everything is within the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Reference\"), \" class, allowing for incorrect behavior such as chaining a reference only method to a query, e.g. \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"ref().orderByKey().once()\"), \". This is now not possible and will cause a standard JavaScript error.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING][bugfix]\", \" Internal validation for all methods has now been added. With v5 in some cases, incorrect values would be passed along to native and causing native exceptions/potential crashes.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING][bugfix]\", \" All query based modifiers are now validated as per the Web SDK spec. In v5 it is possible to chain queries which are not allowed together causing native errors (e.g. \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \".orderByKey().orderByPriority()\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \".startAt('foo', 'bar').orderByKey()\"), \" etc). Doing so in v6 will now throw an error to keep it in-line with the Web SDK.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING][bugfix]\", \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Reference.push\"), \" now correctly mimics the Web SDK, returning a thenable reference.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"DatabaseSnapshot.forEach\"), \" now returns the current index key.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Many methods were missing an \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"onComplete\"), \" handler, which is now implemented as per the Web SDK.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BUGFIX]\", \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"DatabaseSnapshot.forEach\"), \" correct iterates over \\\"array\\\" fields in the database.\")), mdx(\"hr\", null), mdx(\"h3\", {\n    \"id\": \"remote-config-remoteconfig\"\n  }, \"Remote Config (remoteConfig)\"), mdx(\"p\", null, \"The Remote Config API has had a significant API change as originally highlighted would happen in the v5.x.x docs:\"), mdx(\"p\", null, mdx(\"img\", {\n    parentName: \"p\",\n    \"src\": \"https://user-images.githubusercontent.com/5347038/58876587-7c62b100-86c6-11e9-81f9-95c26e1485a1.png\",\n    \"alt\": \"image\"\n  })), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" Module namespace has been renamed to \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \".remoteConfig()\"), \", replace all usages of \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.config\"), \" with the new name.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" All Remote Config values can now be accessed synchronously in JS, see \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"getValue(key: string): ConfigValue\"), \" & \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"getAll(): ConfigValues\"), \" below\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" These replace all the original async methods: \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"getValue\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"getValues\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"getKeysByPrefix\")))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"setDefaultsFromResource\"), \" now returns a Promise that resolves when completed, this will reject with code \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"config/resource_not_found\"), \" if the file could not be found\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"setDefaultsFromResource\"), \" now expects a resource file name for Android to match iOS, formerly this required a resource id (something you would not have in RN as this was generated at build time by Android)\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"And example for both platforms can be found in the tests.\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"enableDeveloperMode\"), \" has been removed, you can now use \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"setConfigSettings({ isDeveloperModeEnabled: boolean })\"), \" instead\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"setDefaults\"), \" now returns a Promise that resolves when completed\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added a new \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"fetchAndActivate\"), \" method - this fetches the config and activates it without the need to call \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"activate()\"), \" separately\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added the following properties to \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.remoteConfig()\"), \"; \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"lastFetchTime\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"lastFetchStatus\"), \" & \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"isDeveloperModeEnabled\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added a new \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"setConfigSettings\"), \" method - this allows setting \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"isDeveloperModeEnabled\"), \", replaces the \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"enableDeveloperMode\"), \" method\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"This is a generic settings function to preemptively account for an upcoming future change to the native SDKs - more settings to be added.\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" All previous \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"get*\"), \" methods have been removed and replaced with 2 synchronous methods:\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"getValue(key: string): ConfigValue\"), \" - returns a single configuration value \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"{ value, source }\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"getAll(): ConfigValues\"), \" - returns all configuration values e.g. \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"{ some_key: { value, source }, other_key: { value, source } }\"))))), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Note\"), \": Multi-apps is not yet supported as the Firebase iOS SDK is missing support for it.\")), mdx(\"hr\", null), mdx(\"h3\", {\n    \"id\": \"cloud-storage-storage\"\n  }, \"Cloud Storage (storage)\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added support for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"put\"), \" (\", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Blob\"), \" | \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"ArrayBuffer\"), \" | \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Uint8Array\"), \")\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"contentType\"), \" mime type is automatically inferred from \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"Blob\")))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added support for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"putString\"), \" and all string formats (raw, \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"base64\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"base64url\"), \" & \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"data_url\"), \")\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"contentType\"), \" mime type is automatically inferred from \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"data_url\"), \" strings\"))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added support multiple buckets, e.g. \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.app().storage('gs://my-other-bucket')\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added support \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"pause()\"), \", \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"resume()\"), \" & \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"cancel()\"), \" for Upload & Download Storage tasks\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added an \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"error\"), \" property to \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"TaskSnapshot\"), \" for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"error\"), \" state events - this is an instance of \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"NativeFirebaseError\"), \" (with \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"code\"), \" & \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"message\"), \")\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added support for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"StorageReference.list()\"), \" & \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"StorageReference.listAll()\"), \".\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" Removed formerly deprecated \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"UploadTaskSnapshot.downloadUrl\"), \" property, use \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"StorageReference.getDownloadURL(): Promise<string>\"), \" instead\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"StorageReference.downloadFile()\"), \" is now deprecated and will be removed in a later release, please rename usages of this to \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"writeToFile()\"), \" - renamed to match Native SDKs\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.storage.Native\"), \" has moved to \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.utils.Native\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.utils.Native\"), \" is now deprecated and will be removed in a later release, please rename usages of this to \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.utils.FilePath\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BREAKING]\", \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.utils.Native.*\"), \" some properties have been renamed and deprecated and will be removed in a later release, follow the in-app console warnings on how to migrate\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BUGFIX][android]\", \" Update/set metadata now correctly supports removing metadata values by passing a null property value in \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"customMetadata\")), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[BUGFIX][android]\", \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"contentType\"), \" mime type is now correctly determined in all scenarios, there was an edge case where it would just use the default value\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[INTERNAL][android]\", \" \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"downloadFile\"), \" no longer uses a \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"StreamDownloadTask\"), \", replaced with the newer \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"FileDownloadTask\"))), mdx(\"hr\", null), mdx(\"h3\", {\n    \"id\": \"ml-machine-learning\"\n  }, \"ML (Machine Learning)\"), mdx(\"blockquote\", null, mdx(\"p\", {\n    parentName: \"blockquote\"\n  }, \"This is a new module in React Native Firebase.\")), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Implemented support for language identification APIs\", mdx(\"ul\", {\n    parentName: \"li\"\n  }, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Single Languages: \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"identifyLanguage()\"), \".\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"Multiple Languages: \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"identifyPossibleLanguages()\")))), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Implemented support for \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://firebase.google.com/docs/ml/recognize-text\"\n  }, \"Text Recognition\"), \" Vision APIs;\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Implemented support for \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://firebase.google.com/docs/ml/recognize-text\"\n  }, \"Document Text Recognition\"), \" Vision APIs;\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Implemented support for \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://firebase.google.com/docs/ml/label-images\"\n  }, \"Image Labeling\"), \" Vision APIs;\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Implemented support for \", mdx(\"a\", {\n    parentName: \"li\",\n    \"href\": \"https://firebase.google.com/docs/ml/recognize-landmarks\"\n  }, \"Landmark Recognition\"), \" Vision APIs;\")), mdx(\"hr\", null), mdx(\"h3\", {\n    \"id\": \"utils\"\n  }, \"Utils\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added support via \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"isRunningInTestLab\"), \" for checking if an Android application is running inside a Firebase Test Lab environment\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"[NEW]\", \" Added a new \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"FilePath\"), \" utility that provides common file paths on the device, see \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.utils.FilePath\"), \" docs for more info, this is the replacement API for \", mdx(\"inlineCode\", {\n    parentName: \"li\"\n  }, \"firebase.storage.Native\"))));\n}\n;\nMDXContent.isMDXComponent = true;","frontmatter":{"title":"v6.0.0 Release","description":"Introducing React Native Firebase version 6.0.0, now featuring the full suite of Firebase products and packed full of features.","icon":null,"noindex":null},"excerpt":"Please tag any GitHub issues regarding v6.0.0 with  [v6]  in the title. This version is effectively a re-write with the goal of splitting…","tableOfContents":{"items":[{"items":[{"url":"#where-is-the-notifications-library","title":"Where is the Notifications library?"}]},{"url":"#changelog","title":"Changelog","items":[{"url":"#general-library-changes","title":"General Library Changes"},{"url":"#app-app","title":"App (app)"},{"url":"#admob","title":"AdMob"},{"url":"#app-invites-invites","title":"App Invites (invites)"},{"url":"#analytics-analytics","title":"Analytics (analytics)"},{"url":"#crashlytics-crashlytics","title":"Crashlytics (crashlytics)"},{"url":"#cloud-firestore-firestore","title":"Cloud Firestore (firestore)"},{"url":"#dynamic-links-dynamiclinks","title":"Dynamic Links (dynamicLinks)"},{"url":"#functions-functions","title":"Functions (functions)"},{"url":"#in-app-messaging-inappmessaging---new","title":"In-App Messaging (inAppMessaging) - NEW"},{"url":"#instance-id-iid","title":"Instance Id (iid)"},{"url":"#cloud-messaging-messaging","title":"Cloud Messaging (messaging)"},{"url":"#performance-monitoring-perf","title":"Performance Monitoring (perf)"},{"url":"#realtime-database-database","title":"Realtime Database (database)"},{"url":"#remote-config-remoteconfig","title":"Remote Config (remoteConfig)"},{"url":"#cloud-storage-storage","title":"Cloud Storage (storage)"},{"url":"#ml-machine-learning","title":"ML (Machine Learning)"},{"url":"#utils","title":"Utils"}]}]},"headings":[{"depth":3,"value":"Where is the Notifications library?"},{"depth":2,"value":"Changelog"},{"depth":3,"value":"General Library Changes"},{"depth":3,"value":"App (app)"},{"depth":3,"value":"AdMob"},{"depth":3,"value":"App Invites (invites)"},{"depth":3,"value":"Analytics (analytics)"},{"depth":3,"value":"Crashlytics (crashlytics)"},{"depth":3,"value":"Cloud Firestore (firestore)"},{"depth":3,"value":"Dynamic Links (dynamicLinks)"},{"depth":3,"value":"Functions (functions)"},{"depth":3,"value":"In-App Messaging (inAppMessaging) - NEW"},{"depth":3,"value":"Instance Id (iid)"},{"depth":3,"value":"Cloud Messaging (messaging)"},{"depth":3,"value":"Performance Monitoring (perf)"},{"depth":3,"value":"Realtime Database (database)"},{"depth":3,"value":"Remote Config (remoteConfig)"},{"depth":3,"value":"Cloud Storage (storage)"},{"depth":3,"value":"ML (Machine Learning)"},{"depth":3,"value":"Utils"}],"parent":{"__typename":"File","relativePath":"releases/v6.0.0.md"}},"next":null,"previous":null,"sidebar":{"raw":"[[\"Getting Started\",\"/\"],[\"Migration Guide to v22\",\"/migrating-to-v22\"],[\"Migration Guide to v23\",\"/migrating-to-v23\"],[\"TypeScript\",\"/typescript\"],[\"Platforms\",\"/platforms\"],[\"Release Notes\",\"/releases\"],[\"FAQs and Tips\",\"/faqs-and-tips\"],[\"Feature Requests\",\"https://invertase.canny.io/react-native-firebase\"],[\"Contributing\",\"https://github.com/invertase/react-native-firebase/blob/main/CONTRIBUTING.md\"],[\"AI Logic\",[[\"Usage\",\"/ai/usage\"]],\"//firebase.google.com/static/images/icons/firebase-ai-logic.svg\"],[\"Analytics\",[[\"Usage\",\"/analytics/usage\"],[\"Screen Tracking\",\"/analytics/screen-tracking\"],[\"Building an Analytics Funnel\",\"https://blog.theodo.com/2018/01/building-google-analytics-funnel-firebase-react-native\"]],\"//firebase.google.com/static/images/products/icons/run_analytics.svg\"],[\"App Check\",[[\"Usage\",\"/app-check/usage\"]],\"//firebase.google.com/static/images/products/icons/build_app_check.svg\"],[\"App Distribution\",[[\"Usage\",\"/app-distribution/usage\"]],\"//firebase.google.com/static/images/products/icons/run_app_distribution.svg\"],[\"Authentication\",[[\"Usage\",\"/auth/usage\"],[\"Social Auth\",\"/auth/social-auth\"],[\"Phone Auth\",\"/auth/phone-auth\"],[\"OpenID Connect Auth\",\"/auth/oidc-auth\"],[\"Multi-factor Auth\",\"/auth/multi-factor-auth\"]],\"//firebase.google.com/static/images/products/icons/build_auth.svg\"],[\"Cloud Firestore\",[[\"Usage\",\"/firestore/usage\"],[\"Usage with Emulator\",\"/firestore/emulator\"],[\"Usage with FlatLists\",\"/firestore/usage-with-flatlists\"],[\"Implementing Pagination\",\"/firestore/pagination\"],[\"Building a \\\"TODO\\\" app\",\"https://invertase.io/blog/getting-started-with-cloud-firestore-on-react-native\"]],\"//firebase.google.com/static/images/products/icons/build_firestore.svg\"],[\"Cloud Functions\",[[\"Usage\",\"/functions/usage\"],[\"Writing & Deploying Functions\",\"/functions/writing-deploying-functions\"]],\"//firebase.google.com/static/images/products/icons/build_functions.svg\"],[\"Cloud Messaging\",[[\"Usage\",\"/messaging/usage\"],[\"iOS Project Setup\",\"/messaging/usage/ios-setup\"],[\"iOS Permissions\",\"/messaging/ios-permissions\"],[\"Notifications\",\"/messaging/notifications\"],[\"iOS Notification Images\",\"/messaging/ios-notification-images\"],[\"Server Integration\",\"/messaging/server-integration\"]],\"//firebase.google.com/static/images/products/icons/run_cloud_messaging.svg\"],[\"Cloud Storage\",[[\"Usage\",\"/storage/usage\"]],\"//firebase.google.com/static/images/products/icons/build_storage.svg\"],[\"Core / App\",[[\"Usage\",\"/app/usage\"],[\"JSON Config\",\"/app/json-config\"],[\"Utils\",\"/app/utils\"]],\"//static.invertase.io/assets/social/firebase-logo.png\"],[\"Crashlytics\",[[\"Usage\",\"/crashlytics/usage\"],[\"Viewing crash reports\",\"/crashlytics/crash-reports\"]],\"//firebase.google.com/static/images/products/icons/run_crashlytics.svg\"],[\"Realtime Database\",[[\"Usage\",\"/database/usage\"],[\"Offline Support\",\"/database/offline-support\"],[\"Presence Detection\",\"/database/presence-detection\"]],\"//firebase.google.com/static/images/products/icons/build_realtime_database.svg\"],[\"In-App Messaging\",[[\"Usage\",\"/in-app-messaging/usage\"]],\"//firebase.google.com/static/images/products/icons/run_in_app_messaging.svg\"],[\"Installations\",[[\"Usage\",\"/installations/usage\"]],\"//static.invertase.io/assets/social/firebase-logo.png\"],[\"ML\",[[\"Usage\",\"/ml/usage\"]],\"//firebase.google.com/static/images/products/icons/build_ml.svg\"],[\"Remote Config\",[[\"Usage\",\"/remote-config/usage\"]],\"//firebase.google.com/static/images/products/icons/run_remote_config.svg\"],[\"Performance Monitoring\",[[\"Usage\",\"/perf/usage\"],[\"Axios Integration\",\"/perf/axios-integration\"],[\"KY Integration\",\"/perf/ky-integration\"]],\"//firebase.google.com/static/images/products/icons/run_performance.svg\"],[\"VertexAi\",[[\"Usage\",\"/vertexai/usage\"]],\"//static.invertase.io/assets/social/firebase-logo.png\"],[\"Legacy docs\",[[\"Migrating to v6\",\"/migrating-to-v6\"],[\"Legacy Docs (<= v5)\",\"https://v5.rnfirebase.io/docs/v5.x.x/getting-started\"]],\"//static.invertase.io/assets/social/firebase-logo.png\"]]"}},"pageContext":{"id":"96838fe9-122e-54ed-893b-5672cf9707df","next":"-------","previous":"-------"}},"staticQueryHashes":["3688227230"]}