【发布时间】:2021-07-14 20:19:35
【问题描述】:
我正在运行一个简单的函数来查询orders 集合并添加一个快照侦听器,以便在查询中的文档发生更改时保持更新。
它在任何情况下都可以正常工作,除了用户将手机锁定在iOS 并返回应用程序的情况。
在这种情况下,当用户从后台返回应用程序时,大约需要 30 秒。让监听器再次激活并处理任何更改。
有谁知道为什么会发生这种情况? iOS 在应用程序从后台进入时是否有某种“唤醒”时间?
快照监听功能:
// function gets orders that are either in status "new" or "ready"
const getOrders = async () => {
try {
firebase
.firestore()
.collection("orders")
.where("userId", "==", firebase.auth().currentUser.uid)
.where("status", "in", ["new", "ready"])
.onSnapshot((snapshot) => {
if (!snapshot.empty) {
let ordersArr = [];
snapshot.forEach((order) => {
ordersArr.push({ id: order.id, data: order.data() });
});
setOrders(ordersArr);
} else {
setOrders(null);
}
});
} catch (error) {
alert("Error getting orders");
} finally {
setLoading(false);
}
};
【问题讨论】:
-
你是否在应用进入后台时停用监听器,并在应用重新进入前台时重新激活它?
-
不,我没有。是这个问题吗?
-
很有可能。除非您的应用程序配置为在后台运行并且确实需要,否则侦听器不应侦听和更新未在屏幕上呈现的 UI。当应用重新进入前台并且您重新激活侦听器时,它将立即触发。
-
感谢您的回复。您认为在进入后台时分离监听器/在前台启用它的最佳方法是什么?
-
有多种方法可以检测应用何时进入后台。在应用范围内,您可以使用应用委托方法。 View-controller 特定的,你可以订阅相应的
NotificationCenter通知,例如UIApplication.willResignActiveNotification。
标签: javascript ios firebase react-native google-cloud-firestore