Firebase+;反应本机:脱机身份验证
我在React本机iOS应用程序中使用Firebase,主要用于存储用户数据和用户身份验证,当设备实际具有工作网络连接时,这非常有效 说到Firebase的离线功能,它看起来是这样的: 问题是:没有网络连接就启动应用程序的用户不能做任何事情,因为他们从未登录过 以下是重现这种行为的步骤: 步骤1:注销用户启动具有网络连接的应用程序Firebase+;反应本机:脱机身份验证,firebase,react-native,firebase-realtime-database,firebase-authentication,offline,Firebase,React Native,Firebase Realtime Database,Firebase Authentication,Offline,我在React本机iOS应用程序中使用Firebase,主要用于存储用户数据和用户身份验证,当设备实际具有工作网络连接时,这非常有效 说到Firebase的离线功能,它看起来是这样的: 问题是:没有网络连接就启动应用程序的用户不能做任何事情,因为他们从未登录过 以下是重现这种行为的步骤: 步骤1:注销用户启动具有网络连接的应用程序 用户点击“Facebook登录”按钮 Firebase使用Facebook身份验证登录 正在以登录用户作为参数调用 user.getToken()获得的令牌被发送到我
user.getToken()
获得的令牌被发送到我的服务器,该服务器生成一个自定义令牌(generatedToken
),可用于使用登录Firebase auth,因此保存在本地存储中generatedToken
generatedToken
用于firebase.auth().signiWithCustomToken(..)
onAuthStateChanged(用户)
未以用户
的身份调用null
,就像之后的情况一样),因此仍然可以读写Firebase数据库generatedToken
generatedToken
用于firebase.auth().signiWithCustomToken(..)
firebase.auth().signInWithCustomToken(..)
失败,因为没有网络连接onAuthStateChanged(用户)
正在以user
的身份调用null
FIRApp
之后,将Objective-C/AppDelegate.m中的persistenceEnabled
设置为true
:
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// ...
[FIRApp configure];
[FIRDatabase database].persistenceEnabled = YES;
// ...
}
这不会导致期望的结果,而且(至少在我的情况下)不会改变Firebase的行为谢谢你的投入 虽然Firebase JS SDK很棒,通常在React-Native中工作,但它主要是为web平台构建的,因此不是React-Native环境中使用的最全面的解决方案,例如,有相当多的Firebase服务无法与web SDK一起使用。见对照表 但是,您可以使用本机Android/iOS Firebase SDK运行,并在它们和JavaScript代码(即react本机模块)之间架起一座桥梁 谢天谢地,您不必自己实现这一点,因为已经有一些模块可以为您实现这一点: 例如,在JavaScript端镜像web SDK API,但在本机端使用本机Android和iOS Firebase SDK执行。它与您可能已经实现的任何现有Firebase Web SDK逻辑兼容,并打算作为Web SDK的替代品 此库通过身份验证持久性和脱机功能支持您的用例:
从“react native firebase”导入firebase;
const instance=firebase.initializeApp({
坚持:真的
});
//也可以使用'keepSynced`/'setPersistence`方法:
//instance.database().ref('/someref').keepSynced();
//instance.database().setPersistence(true);
导出默认实例
在最新版本中,您需要在本机代码中执行此初始化,如中所述