【发布时间】:2017-06-13 04:26:09
【问题描述】:
我在 React Native iOS 应用程序中使用 Firebase,主要用于存储用户数据和用户身份验证,当设备实际具有有效的网络连接时效果很好。
谈到 Firebase 的离线功能,它看起来像这样:
问题:在没有网络连接的情况下启动应用程序的用户无法执行任何操作,因为他们从未登录过
以下是重现此行为的步骤:
第 1 步:已注销的用户在具有网络连接的情况下启动应用
- 用户点击“Facebook登录”按钮
- Firebase 使用 Facebook 身份验证登录
-
onAuthStateChanged (user)以登录用户为参数调用 -
user.getToken()获得的令牌被发送到我的服务器,它会生成一个自定义令牌 (generatedToken),可用于使用signInWithCustomToken (generatedToken)登录 Firebase 身份验证,因此保存在本地存储中 - 用户愉快地读写 Firebase 数据库,更改会立即与 Firebase 服务器同步
第 2 步:登录用户启动应用 网络连接
- 应用意识到本地存储中有一个
generatedToken -
generatedToken用于firebase.auth().signInWithCustomToken (..) - (同步骤 1.3)
- (与步骤 1.4 相同)
- (同步骤 1.5)
- &写入 Firebase 数据库
- 网络连接已恢复:更改与 Firebase 服务器同步
第 3 步:登录用户在没有网络连接的情况下启动应用
- 应用意识到本地存储中有一个
generatedToken -
generatedToken用于firebase.auth().signInWithCustomToken (..) -
firebase.auth().signInWithCustomToken (..)失败,因为没有网络连接 -
onAuthStateChanged (user)被称为null作为user - 用户根本无法使用 Firebase 数据库,因为所有读/写请求都因缺少身份验证而失败
尝试的解决方案
-
在初始化
FIRApp之后,在 Objective-C / AppDelegate.m 中将persistenceEnabled设置为true:(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // ... [FIRApp configure]; [FIRDatabase database].persistenceEnabled = YES; // ... }这不会导致预期的结果,并且(至少在我的情况下)在 Firebase 的行为方面没有任何改变。
---您的建议在这里---
感谢您的意见!
【问题讨论】:
标签: firebase react-native firebase-realtime-database firebase-authentication offline