在Android開發(fā)中,經(jīng)常要獲取sha1證書指紋。
創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都網(wǎng)站設(shè)計、網(wǎng)站制作、崗巴網(wǎng)絡(luò)推廣、重慶小程序開發(fā)公司、崗巴網(wǎng)絡(luò)營銷、崗巴企業(yè)策劃、崗巴品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎;創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供崗巴建站搭建服務(wù),24小時服務(wù)熱線:028-86922220,官方網(wǎng)址:www.cdcxhl.com
例如:在嵌入高德地圖的時候,就需要使用這個東東。
這個東東在Eclipse中可以直接獲取到,但是在AndroidStudio中,
并沒有直接提供,需要通過別的手段手動獲取。
我們可以使用 Java 的一個工具: keytool 來獲取這個值。
keytool 是jdk提供的一個工具,只要你的java環(huán)境變量配置的ok,
直接在命令行輸入 keytool 就可以執(zhí)行這個命令。
獲取sha1的命令為:
具體獲取方法,看下圖:
android API 23時新增的功能,指紋識別
主要類:FingerpringManager
在API28后,F(xiàn)ingerpringManager被遺棄,使用BiometricPrompt,此時授權(quán)識別的彈窗不能自定義,
只能使用官方統(tǒng)一彈窗,只能設(shè)置各個授權(quán)文案。各個開發(fā)商內(nèi)部實現(xiàn)可能不一致。
通過只是使用指紋識別,直接使用官方api即可,但出于安全或業(yè)務(wù)場景需求,很多都需要去檢測生物庫信息是否變更,
如指紋庫在重新指紋識別前是否發(fā)生變更,這個官方api就沒有提供方法,需要我們自己實現(xiàn)。
參考:
通過檢測密鑰查看是否變更( )
在API28以前,指紋庫信息時可以通過反射獲取,獲取的信息有指紋id、groupId、指紋名稱、指紋個數(shù)、設(shè)備id等等,
而FingerprintBean是這樣的:
最理想的方式是我們反射獲取到這些指紋庫信息,然后將這些信息保存到本地,每次調(diào)用指紋識別時,獲取當(dāng)前指紋庫信息與之前的指紋庫信息比較,
只有不同即可判定指紋庫信息變更,
但在實際操作中,發(fā)現(xiàn)在手機(jī)上獲取到的指紋id只是簡單的1、2、3即指紋庫里的排列順序,而指紋名稱是可以隨意更改,groupId、deviceId都為0,
如果使用這些信息去校驗,錯誤率太高。
還有一種方式即是上面參考鏈接中的,
檢測指紋庫密鑰信息是否變更
但在上面鏈接那種方法中,有幾個問題:
1、增加、刪除指紋無法檢測
2、使用修改指紋的手指識別后才能檢測出修改
于是將反射、密鑰檢測兩者結(jié)合,
先反射獲取指紋庫信息,只是比較指紋庫指紋個數(shù),先判斷指紋個數(shù)是否發(fā)生變更,就可知道指紋庫信息變更了
如果指紋個數(shù)沒有變更,再來校驗密鑰是否發(fā)生變化
背面指紋識別方案是為了不破壞手機(jī)屏幕的完整性和一體性,為了提升手機(jī)屏幕的屏占比。隨著技術(shù)的發(fā)展,現(xiàn)在已經(jīng)開發(fā)出了屏下指紋模組識別技術(shù),在手機(jī)屏幕內(nèi)部裝置指紋模組,這樣既不會破壞屏幕的完整,使用也更方便。手機(jī)指紋模組是由外圈、涂層、傳感器、驅(qū)動芯片、FPCBA、PSA、連接器這幾個部分組成的。手機(jī)指紋模組出廠前需要進(jìn)行質(zhì)量測試、性能測試,測試中要用到連接測試電路并與電子芯片匹配的測試針模組。彈片微針模組具有穩(wěn)定的導(dǎo)通作用,可通過的電流最高能達(dá)到50A!電流傳輸過程電阻恒定、電性穩(wěn)定,無電流衰減、無卡pin、斷針,有著可靠的解決方案。
1. 6.0+
2.手機(jī)里至少要有一個已經(jīng)錄入的指紋
需要指紋權(quán)限:uses-permissionandroid:name="android.permission.USE_FINGERPRINT"/
人臉識別可以引入虹軟的sdk
主要介紹一下FingerprintManager類,提供類三個方法
第一個方法:啟動指紋識別
第二個方法:判斷手機(jī)里面是否有已經(jīng)有錄入的指紋(至少得有一個)
第三個方法:判斷手機(jī)是否有指紋感應(yīng)區(qū)(硬件支持)
這里需要注意一下,F(xiàn)ingerprintManager對象的isHardwareDetected()方法和hasEnrolledFingerprints()方法需要API級別為23及以上,如果你的API級別小于23,那就得加上@TargetApi(23)
1.FingerPrintManager.AuthenticationCallback:
在驗證時傳入該接口,通過該接口來返回驗證指紋的結(jié)果
2.FingerPrintManager.AuthenticationResult:
當(dāng)指紋驗證正確時,接口里返回的參數(shù)
3.FingerPrintManager.CryptoObject:
由FingerPrintManager支持的封裝加密對象的類
我們將指紋識別的CallBack綁定到FingerprintManager中,以獲得指紋識別的結(jié)果。這就得引入上面圖片中FingerprintManager的第一個方法:
public void authenticate(FingerprintManager.CryptoObject crypto,CancellationSignal cancel,int flags,FingerprintManager.AuthenticationCallback callback,Handler handler)
可以看到,這個方法中傳遞了一個AuthenticationCallback,用于獲取指紋識別結(jié)果 ,傳遞了一個CancellationSignal。至此,指紋識別已經(jīng)開啟了。
取消指紋識別很簡單,authenticate方法中的第二個參數(shù)是一個CancellationSignal對象,這個對象就是用來維護(hù)取消操作的,這些操作包括取消監(jiān)聽和設(shè)定取消回調(diào)等。所以,如果要取消,這個參數(shù)就不能傳Null。
取消指紋識別 mCancellationSignal.cancel();
取消之后會執(zhí)行的方法是onAuthenticationError()
1.使用密碼登錄成功后,去判斷設(shè)備是否支持指紋/人臉登錄,如果支持可以讓用戶自行選擇后續(xù)是否需要指紋/人臉登錄
2.判斷用戶指紋/人臉驗證是否成功
3.生成加密字符串 可以用sp存儲
4.指紋/人臉登錄時驗證上次加密的字符串
相應(yīng)的流程圖