Android - Firebase 离线最佳实践
Android - Firebase Offline Best Practices
我无法理解使 Firebase 应用程序离线的概念。
根据文档,我们需要调用:
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
但是我们应该在哪里调用呢?是否应该在应用程序的每个 Activity 中使用它?因为,当我在我的应用程序 class onCreate() 方法中使用它时,我的应用程序不断崩溃。
那么,让我们的应用离线的最佳实践是什么。
还有一个疑问就是上面那个和DatabaseReference.keppSynced(true);
的区别
setPersistenceEnabled()
应该在启动时调用一次,然后再检索数据库的第一个引用。我调用后直接调用我的FIRApp.configure()
持久性启用允许完全脱机保留信息。其重要组成部分是离线请求和更新将完成,即使您强制关闭应用程序并重新打开它也是如此。如果您正在寻找离线访问,这是要设置的布尔值。
保持同步用于以下情况:您希望在每次检索信息时缓存最新数据,但不一定需要在下次打开应用程序时恢复该数据。
一个很好的使用示例是,如果您有访问登录用户详细信息的视图。无需在所有使用详细信息的视图上设置用户详细信息侦听器,您只需指定保持数据库引用同步,即可更快地获取最新数据。
有关持久性和同步的更多详细信息,请参阅 Firebase 文档:
https://firebase.google.com/docs/database/android/offline-capabilities
摘自
不确定,是否与此处相关。但是还有另一种情况会发生这种崩溃。
如果您的应用程序有一个服务(具有不同的进程)并且您正在创建自己的应用程序 class,该服务和前台应用程序将使用相同的应用程序 class(不是相同的实例) 进行初始化。现在,当我使用 com.google.firebase:firebase-crash 依赖项来处理崩溃时,它会创建一个后台服务 your.app.packagename:background_crash。出于某种原因,这导致我的应用程序崩溃。具体来说,因为在我的应用程序 class 中,我正在调用
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
我假设,当使用我们的应用程序 class 启动后台服务时,Firebase 不知何故未初始化。为了解决这个问题,我做了
if (!FirebaseApp.getApps(this).isEmpty())
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
创建应用程序Class
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
}
}
并将清单更改为
<application
android:name=".MyApp"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
如果有 iOS 开发人员遇到同样的问题,
然后在函数 "application:didFinishLaunchingWithOptions" 的 AppDelegate.swift 文件中,在 return 语句
之前写入以下行
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
并使用以下行
DatabaseReference.keppSynced(true);
在您的 viewController 中使用您的数据库引用。
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
只需在设置内容视图后的 onCreate 方法中的第一个 activity 或启动器 activity 中粘贴上一行。
它对我来说很完美。
创建 java class 名为 MyAppOFFLINE
并在清单文件
中注册这个class
public class MyAppOFFLINE extends Application {
@Override
public void onCreate() {
super.onCreate();
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
}
}
我无法理解使 Firebase 应用程序离线的概念。 根据文档,我们需要调用:
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
但是我们应该在哪里调用呢?是否应该在应用程序的每个 Activity 中使用它?因为,当我在我的应用程序 class onCreate() 方法中使用它时,我的应用程序不断崩溃。
那么,让我们的应用离线的最佳实践是什么。
还有一个疑问就是上面那个和DatabaseReference.keppSynced(true);
setPersistenceEnabled()
应该在启动时调用一次,然后再检索数据库的第一个引用。我调用后直接调用我的FIRApp.configure()
持久性启用允许完全脱机保留信息。其重要组成部分是离线请求和更新将完成,即使您强制关闭应用程序并重新打开它也是如此。如果您正在寻找离线访问,这是要设置的布尔值。
保持同步用于以下情况:您希望在每次检索信息时缓存最新数据,但不一定需要在下次打开应用程序时恢复该数据。
一个很好的使用示例是,如果您有访问登录用户详细信息的视图。无需在所有使用详细信息的视图上设置用户详细信息侦听器,您只需指定保持数据库引用同步,即可更快地获取最新数据。
有关持久性和同步的更多详细信息,请参阅 Firebase 文档: https://firebase.google.com/docs/database/android/offline-capabilities
摘自
不确定,是否与此处相关。但是还有另一种情况会发生这种崩溃。
如果您的应用程序有一个服务(具有不同的进程)并且您正在创建自己的应用程序 class,该服务和前台应用程序将使用相同的应用程序 class(不是相同的实例) 进行初始化。现在,当我使用 com.google.firebase:firebase-crash 依赖项来处理崩溃时,它会创建一个后台服务 your.app.packagename:background_crash。出于某种原因,这导致我的应用程序崩溃。具体来说,因为在我的应用程序 class 中,我正在调用
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
我假设,当使用我们的应用程序 class 启动后台服务时,Firebase 不知何故未初始化。为了解决这个问题,我做了
if (!FirebaseApp.getApps(this).isEmpty())
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
创建应用程序Class
public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
}
}
并将清单更改为
<application
android:name=".MyApp"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
如果有 iOS 开发人员遇到同样的问题, 然后在函数 "application:didFinishLaunchingWithOptions" 的 AppDelegate.swift 文件中,在 return 语句
之前写入以下行FirebaseDatabase.getInstance().setPersistenceEnabled(true);
并使用以下行
DatabaseReference.keppSynced(true);
在您的 viewController 中使用您的数据库引用。
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
只需在设置内容视图后的 onCreate 方法中的第一个 activity 或启动器 activity 中粘贴上一行。 它对我来说很完美。
创建 java class 名为 MyAppOFFLINE 并在清单文件
中注册这个classpublic class MyAppOFFLINE extends Application {
@Override
public void onCreate() {
super.onCreate();
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
}
}