我在实现TouchID/FaceID身份验证时遇到问题,无法在用户打开应用程序时自动提示用户。我正在为TouchID/FaceID使用local_auth依赖项。
在下面的代码中,生物认证会在应用恢复时弹出,但也不能解除,如果你按下home键,它会解除TouchID提示但立即开始重试,如果你一直这样尝试会造成死循环,它还会随机提示两次,所以即使你用第一次TouchID提示成功登录,我在登录页面上也有一个TouchID按钮,用户可以按下它来手动提示TouchID,但我很想重现我的银行应用程序和其他应用程序的工作方式,当你自动打开应用程序时,TouchID会提示。
void initState() {
super.initState();
SystemChannels.lifecycle.setMessageHandler((msg) async {
if (msg==AppLifecycleState.resumed.toString()) {
// If can pop, app is not at login screen
// so don't prompt for authentication
if (!Navigator.canPop(context)) {
if (_useFingerprint) {
SharedPreferences prefs = await SharedPreferences.getInstance();
String password = prefs.getString('password');
biometricAuthentication(_username, password);
}
}
}
});
void biometricAuthentication(String user, String pass) async {
print("Biometric Authentication Called");
bool didAuthenticate = false;
try {
didAuthenticate = await localAuth.authenticateWithBiometrics(localizedReason: 'Please authenticate');
} on PlatformException catch (e) {
print(e);
}
if (!mounted) {
return;
}
if (!didAuthenticate) {
return;
}
else {
normalLogin(user, pass);
}
}
4条答案
按热度按时间yhqotfr81#
这对我很有效
gcmastyq2#
我想我已经解决了。如果还有其他问题,请告诉我。
这似乎在每次打开应用程序时都有效。
lrl1mhuk3#
试试这个:
创建一个类来处理应用的生命周期
然后在你的主:
每次返回到应用程序时,都会执行您放置的操作
vlju58qv4#
**免责声明:**我在iOS开发方面没有太多经验,所以我在这里从Android中推断。
我认为问题是系统对话框使您的应用程序处于非活动状态,从而导致
1.应用程序恢复
1.应用程序显示TouchID/FaceID对话框,从而使其自身处于非活动状态
1.用户确认对话
1.您的应用程序再次进入前台,从而 * 恢复 *
1.请参阅步骤1
可能的解决方案