我在React Native iOS应用中使用Firebase,主要用于存储用户数据和用户身份验证,当设备实际具有可用的网络连接时效果很好。
说到Firebase的离线功能,它看起来像这样:
以下是重现此行为的步骤:
onAuthStateChanged (user)
由user.getToken()
获取的generatedToken
),可用于使用signInWithCustomToken (generatedToken)
登录Firebase身份验证,因此会保存在本地存储generatedToken
generatedToken
用于firebase.auth().signInWithCustomToken (..)
onAuthStateChanged (user)
未使用null
作为user
进行调用,就像generatedToken
之后的情况一样{3}})因此仍然可以阅读&写入Firebase数据库generatedToken
firebase.auth().signInWithCustomToken (..)
用于firebase.auth().signInWithCustomToken (..)
onAuthStateChanged (user)
失败,因为没有网络连接null
作为user
persistenceEnabled
在初始化true
后立即在Objective-C / AppDelegate.m中将FIRApp
设置为(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// ...
[FIRApp configure];
[FIRDatabase database].persistenceEnabled = YES;
// ...
}
:
/_template?pretty
这不会产生预期的结果,并且(至少在我的情况下)在Firebase的行为方面没有任何改变。
---您的建议---
感谢您的投入!
答案 0 :(得分:13)
虽然Firebase JS SDK很棒并且通常在React Native中运行,但它主要是为Web平台构建的,因此不是在React Native环境中使用的最全面的解决方案,例如有很多Firebase服务,您将无法使用Web SDK。请参阅比较表here。
但是,您可以使用原生的Android / iOS Firebase SDK运行,并在它们和JavaScript代码之间建立桥梁(即反应原生模块)。
值得庆幸的是,您不必自己实现,因为已经有模块可以为您执行此操作:
例如,react-native-firebase镜像了JavaScript端的Web SDK API,但使用原生的Android& amp;在本机端执行。 iOS Firebase SDK。它与您可能已经实施的任何现有Firebase Web SDK逻辑兼容,并且可以作为Web SDK的替代品。
此库支持具有auth持久性和脱机功能的用例:
import firebase from 'react-native-firebase';
const instance = firebase.initializeApp({
persistence: true
});
// can also use `keepSynced` / `setPersistence` methods:
// instance.database().ref('/someref').keepSynced();
// instance.database().setPersistence(true);
export default instance;
(免责声明:我是react-native-firebase的作者)