本來想直接翻看看原生生物識(shí)別是怎么做的 百度了一下 flutter官方有提供輪子 本著
造不如買的原則 就研究了一下發(fā)現(xiàn)它十三天前更新了2.0.0版本 那就來康康他的傳新版本
老樣子 官網(wǎng)再右側(cè) local_auth 2.0.0
一. 插件引入
dependencies:
local_auth: ^2.0.0
二. 安卓端修改
2.1 注冊(cè)清單中加入權(quán)限
<uses-permission android:name="android.permission.USE_FINGERPRINT"/>
你要用上面那個(gè)權(quán)限 它會(huì)提示說過時(shí)了 安卓P以上換了一個(gè) 反正我minSDK也在p以上就換成了它推薦的 畢竟聽人勸吃飽飯
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
2.2 把繼承的FlutterActivity 改成FlutterFragmentAcitvity
沒什么好改的換了個(gè)導(dǎo)入包就可以了
public class MainActivity extends FlutterFragmentActivity {
@Override
public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine);
// 引入你寫的插件
try {
flutterEngine.getPlugins().add(new CustomChannelPlugin(this));
} catch (Exception e) {
Log.e(getLocalClassName(), "Error registering pluginCustomChannelPlugin,", e);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
}
三. IOS端修改
沒有開發(fā)工具哈 文檔說要改東西
<key>NSFaceIDUsageDescription</key>
<string>Why is my app authenticating using face id?</string>
四. dart的引用
- isDeviceSupported 方法
在Android 6.0 以上才能用 以下都是false 如果你手機(jī)沒有設(shè)置密碼 他會(huì)返回false 設(shè)置密碼就可以返回true了
bool supposed = await LocalAuthentication().isDeviceSupported();
- 檢測(cè)是否有生物識(shí)別 上面檢測(cè)你開沒開 這個(gè)檢測(cè)有沒有 (硬件)
bool supposed = await LocalAuthentication().canCheckBiometrics();
- 已經(jīng)注冊(cè)的生物識(shí)別 ios可能顯示指紋和faceid把
我手上的Android返回了兩個(gè)一個(gè)weak 和strong
Android 得設(shè)置完指紋之后才有返回
availableBiometrics = await LocalAuthentication().getAvailableBiometrics();
- 最重要的來了
識(shí)別方法
新版要這么寫 官網(wǎng)的demo都沒更新..真的是......
對(duì)了 要需改 AndroidAuthMessages 需要手動(dòng)引入這個(gè)地址
import 'package:local_auth_android/local_auth_android.dart';
bool authenticated = await LocalAuthentication().authenticate(
///這個(gè)東西不是必須的 只是用來改文字用的..... 有中文的是我應(yīng)該是能看到過的東西.....
authMessages: [
const AndroidAuthMessages(
biometricHint: "生物識(shí)別提示",
biometricNotRecognized: "biometricNotRecognized",
biometricRequiredTitle: "彈出提示框的時(shí)候的提示",
biometricSuccess: "biometricSuccess",
cancelButton: "取消按鈕的文字",
deviceCredentialsRequiredTitle: "deviceCredentialsRequiredTitle",
deviceCredentialsSetupDescription:
"deviceCredentialsSetupDescription",
goToSettingsButton: "去設(shè)置界面的按鈕",
goToSettingsDescription: "這里說的是你如果沒有設(shè)置指紋那么你應(yīng)該去設(shè)置里面去設(shè)置",
//頂部提示 默認(rèn)是英文說的是
signInTitle: "您需要掃描指紋才能繼續(xù)",
)
],
localizedReason: '我們需要驗(yàn)證您的指紋',
options: const AuthenticationOptions(
///使用他們的錯(cuò)誤處理
useErrorDialogs: true,
///如果去后臺(tái)在返回還能繼續(xù)識(shí)別
stickyAuth: true,
//解鎖以后還能干什么東西來著
sensitiveTransaction: true,
//只用身份處理不能用密碼
biometricOnly: true,
),
);
五. 他會(huì)拋出六種異常 需要自己去catch..
- 雖然官方文檔說會(huì)給彈窗提示 useErrorDialogs給true的時(shí)候 但是我手機(jī)一次沒彈出來過 不知到為啥
- 查看了一下源碼 他得在手機(jī)有設(shè)置指紋的情況下打開識(shí)別界面彈出彈窗以后再刪除指紋才能彈窗 不知道是不是機(jī)型原因...
六. 我遇到的問題
手機(jī)有設(shè)置指紋的情況下打開識(shí)別界面彈出彈窗以后再刪除指紋才能彈窗 不知道是不是機(jī)型原因...
界面不能自定義 他在原生部分寫好的 你只能改提示文字
也可能是我研究不到家 有更新再補(bǔ)上去把......