【发布时间】:2020-09-22 21:22:33
【问题描述】:
我的问题:你能阻止 firebase 文档在特定时间限制后被写入吗?我正在尝试更改用户的密码并在一定时间内通知他们成功或失败。下面是关于我的问题的更多信息(尤其是最后的粗体区域)。
注意:目前,用户的 pin 保存在其本地共享首选项中。但是,同一栋建筑物中可能有几台平板电脑/手机,我希望它们都具有相同的密码。我计划让设备每天检查一次 pin 更新。该 pin 保存在 Shared Preferences 中以供立即使用,而 firestore pin 仅被检查以更新 Shared Preferences pin 号。
要更改他们的 pin,我现在让他们输入他们当前的 pin,然后根据他们的应用程序的共享首选项以及保存在 firestore 文档中的内容进行测试。以下是所有伪代码,但应该足够接近我的观点。
// MAIN ACTIVITY - Global Handler variable
Handler mHandler = new Handler();
...
// Button's OnClick()
if( (pinEntered == sharedPreferencesPin) && (pinEntered == currentFirestorePin)){
// Connect to firestore and update the new pin
// OnSuccessListener changes a Singleton boolean value to true or false
changePin(pinEntered)
// Show "Please Wait" Loading Class with spinning progress bar widget
showWaitingScreen();
// Runnable checks Singleton in 5 seconds to see whether the operation was success or failure
mHandler(checkSuccessRunnable, 5000);
}
我将我的 firebase 方法分开,所以下一部分是一个不同的类
// Global For PIN UPDATE Class
FirebaseFirestore db = FirebaseFirestore.getInstance();
public void changePin(String pinIn){
db.collection(pinCollectionPath).document("PIN").set(pinIn)
.addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
// Update singleton - Success
SingletonClass.setPinChangedBoolean = true;
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
// Update singleton - Failed
SingletonClass.setPinChangedBoolean = false;
}
});
}
回到我的主要活动,我的可运行文件已经完成。 “checkSuccessRunnable”检查单例布尔值。根据值,我创建一个成功或失败警报对话框。
// MAIN ACTIVITY
checkSuccessRunnable= new Runnable() {
@Override
public void run() {
createAlertDialog( SingletonClass.getPinChangedBoolean() );
}
}
};
当我尝试在离线状态下更新 firestore pin 文档时出现问题。然后,几分钟后,当平板电脑/手机重新联机时,成功写入文档。我需要在 5 秒内获得失败或成功消息。显然,用户想立即知道他们的 pin 是否已更改。
在测试中,我关闭了 WiFi/数据并尝试更新 Pin 文档。在 5 秒可运行过期后,我收到“更新失败”消息,这是正确的。但是,几分钟后,当我重新打开手机数据时,firestore 文档立即更新。明显的问题是用户在 Runnable 完成后(点击更新按钮 5 秒后)已经收到“失败”消息。
我最初考虑使用广播意图,但应用程序每隔一段时间就会收到设施硬件更改当前活动的请求。即使成功消息稍后呈现给用户,他们也可能永远看不到它。
【问题讨论】:
标签: android firebase google-cloud-firestore