本發(fā)明涉及計算機(jī)技術(shù)領(lǐng)域,尤其涉及一種基于Keychain的數(shù)據(jù)管理方法及終端。
背景技術(shù):
目前市場上的絕大多數(shù)應(yīng)用APP都記錄有用戶信息,并需要把用戶信息保留在終端上,用以實現(xiàn)在一定時間段內(nèi)免登陸,而且能夠迅速展示用戶信息的功能。其中,例如金融業(yè)領(lǐng)域,用戶信息是極度安全敏感的,為了避免水平參差的開發(fā)工程師用不安全的方式保存用戶信息,以及減少大部分開發(fā)工程師重復(fù)工作量的目的,需要一種安全方便方法以存儲和讀取用戶信息。
技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明實施例提供一種基于Keychain的數(shù)據(jù)管理方法及終端,本發(fā)明實施例對傳統(tǒng)的Keychain進(jìn)行改進(jìn),方便了用戶信息的存儲和讀取。
一種基于Keychain的數(shù)據(jù)管理方法,該方法包括:
構(gòu)建字典,每個字典對應(yīng)若干鍵值對Key-Value,每個Key-Value對應(yīng)用戶的一種屬性信息;
接收用戶輸入的用戶信息,所述用戶信息包括至少一種屬性信息;
將所述用戶信息生成相應(yīng)的字符串;
根據(jù)所述屬性信息將相應(yīng)的字符串設(shè)置為字典中的Key-Value;
對所述Key-Value進(jìn)行編碼;
將構(gòu)建的字典寫入所述Keychain中;
若接收到用戶訪問Key-Value的指令,對所述Key-Value進(jìn)行解碼。
具體的,所述對所述Key-Value進(jìn)行編碼,具體包括:
調(diào)用編碼函數(shù)并獲取編碼器;
利用所述編碼器對所述Key-Value進(jìn)行編碼。
具體的,所述對所述Key-Value進(jìn)行解碼,具體包括:
調(diào)用解碼函數(shù)并獲取解碼器;
利用所述解碼器對所述Key-Value進(jìn)行解碼。
具體的,所述方法還包括:
若應(yīng)用再次啟用時,從Keychain中讀取所有用戶信息。
具體的,所述將構(gòu)建的字典寫入所述Keychain中,具體包括:
對所述Keychain進(jìn)行封閉并生成數(shù)據(jù)接口,所述數(shù)據(jù)接口包括存儲數(shù)據(jù)接口、讀取數(shù)據(jù)接口以及刪除數(shù)據(jù)接口;
根據(jù)所述數(shù)據(jù)接口,將構(gòu)建的字典寫入所述Keychain中。
一種終端,該終端包括:
構(gòu)建單元,用于構(gòu)建字典,每個字典對應(yīng)若干鍵值對Key-Value,每個Key-Value對應(yīng)用戶的一種屬性信息;
接收單元,用于接收用戶輸入的用戶信息,所述用戶信息包括至少一種屬性信息;
生成單元,用于將所述用戶信息生成相應(yīng)的字符串;
設(shè)置單元,用于根據(jù)所述屬性信息將相應(yīng)的字符串設(shè)置為字典中的Key-Value;
編碼單元,用于對所述Key-Value進(jìn)行編碼;
寫入單元,用于將構(gòu)建的字典寫入所述Keychain中;
解碼單元,用于若接收到用戶訪問Key-Value的指令,對所述Key-Value進(jìn)行解碼。
具體的,所述編碼單元,具體包括:
第一調(diào)用單元,用于調(diào)用編碼函數(shù)并獲取編碼器;
編碼子單元,用于利用所述編碼器對所述Key-Value進(jìn)行編碼。
具體的,所述解碼單元,具體包括:
第二調(diào)用單元,用于調(diào)用解碼函數(shù)并獲取解碼器;
解碼子單元,用于利用所述解碼器對所述Key-Value進(jìn)行解碼。
具體的,所述終端還包括:
讀取單元,用于若應(yīng)用再次啟動時,從Keychain中讀取所有用戶信息。
具體的,所述寫入單元,具體包括:
封裝單元,用于對所述Keychain進(jìn)行封裝并生成數(shù)據(jù)接口,所述數(shù)據(jù)接口包括存儲數(shù)據(jù)接口、讀取數(shù)據(jù)接口以及刪除數(shù)據(jù)接口;
寫入子單元,用于根據(jù)所述數(shù)據(jù)接口,將構(gòu)建的字典寫入所述Keychain中。
由上可見,本發(fā)明實施例通過構(gòu)建字典,利用字典中對應(yīng)的鍵值對Key-Value存儲用戶信息,并將存儲有用戶信息的字典寫入Keychain方便了用戶信息的存儲,并且在用戶信息設(shè)置為所述字典中的Key-Value之前,對用戶信息進(jìn)行編碼,使得用戶信息支持NSCoding協(xié)議;在讀取Keychain中的用戶信息時,對讀取的用戶信息進(jìn)行解碼并轉(zhuǎn)換成相對應(yīng)的數(shù)據(jù)類型,方便對所述用戶信息的使用。
附圖說明
為了更清楚地說明本發(fā)明實施例技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明實施例一提供的一種基于Keychain的數(shù)據(jù)管理方法的示意流程圖。
圖2是本發(fā)明實施例一提供的一種基于Keychain的數(shù)據(jù)管理方法的另一示意流程圖。
圖3是本發(fā)明實施例一提供的一種基于Keychain的數(shù)據(jù)管理方法的另一示意流程圖。
圖4是本發(fā)明實施例一提供的一種基于Keychain的數(shù)據(jù)管理方法的另一示意流程圖。
圖5是本發(fā)明實施例二提供的一種基于Keychain的數(shù)據(jù)管理方法的示意流程圖。
圖6是本發(fā)明實施例提供的一種終端的示意性框圖。
圖7是本發(fā)明實施例提供的一種終端的另一示意性框圖。
圖8是本發(fā)明實施例提供的一種終端的另一示意性框圖。
圖9是本發(fā)明實施例提供的一種終端的另一示意性框圖。
圖10是本發(fā)明實施例提供的一種終端的另一示意性框圖。
圖11是本發(fā)明實施例提供的一種終端的另一實施例的結(jié)構(gòu)組成示意圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護(hù)的范圍。
應(yīng)當(dāng)理解,當(dāng)在本說明書和所附權(quán)利要求書中使用時,術(shù)語“包括”和“包含”指示所描述特征、整體、步驟、操作、元素和/或組件的存在,但并不排除一個或多個其它特征、整體、步驟、操作、元素、組件和/或其集合的存在或添加。
還應(yīng)當(dāng)理解,在此本發(fā)明說明書中所使用的術(shù)語僅僅是出于描述特定實施例的目的而并不意在限制本發(fā)明。如在本發(fā)明說明書和所附權(quán)利要求書中所使用的那樣,除非上下文清楚地指明其它情況,否則單數(shù)形式的“一”、“一個”及“該”意在包括復(fù)數(shù)形式。
如圖1所示,為本發(fā)明實施例一提供的一種基于Keychain的數(shù)據(jù)管理方法的流程示意圖。該方法包括步驟S101~S107。
S101,構(gòu)建字典,每個字典對應(yīng)若干鍵值對Key-Value,每個Key-Value對應(yīng)用戶的一種屬性信息。在本發(fā)明實施例中,Keychain(即鑰匙串)是運(yùn)行在IOS系統(tǒng)上一種存儲工具,并能夠為系統(tǒng)上的應(yīng)用提供安全系數(shù)較高的數(shù)據(jù)存儲,保證數(shù)據(jù)的安全性;Keychain可以通過鍵值對Key-Value的存儲方式,將必要的數(shù)據(jù)進(jìn)行保存,并且保證該數(shù)據(jù)不會在一般的文件中被找到或者暴露,亦不會被系統(tǒng)中其他的應(yīng)用所讀取。例如,當(dāng)用戶初次在應(yīng)用中注冊登錄時,應(yīng)用通過構(gòu)建字典NSDictionary存儲用戶輸入的用戶數(shù)據(jù),每個字典對應(yīng)若干鍵值對Key-Value,其中將用戶的賬號作為Key,將用戶模型作為Value進(jìn)行存儲。
所述屬性信息指的是鍵值對Key-Value中Key與Value的映射關(guān)系,在每次存儲一個數(shù)據(jù)時,是根據(jù)Key進(jìn)行索引存儲的;相對應(yīng)的在用戶輸入的用戶數(shù)據(jù)中,例如用戶數(shù)據(jù)為用戶帳號和用戶模型,則每一個用戶帳號均對應(yīng)一種用戶模型,將用戶帳號作為Key以及將用戶模型作為Value進(jìn)行存儲,在查詢用戶數(shù)據(jù)時,通過調(diào)用Key便可查詢相對應(yīng)的Value。
S102,接收用戶輸入的用戶信息,所述用戶信息包括至少一種屬性信息。
S103,將所述用戶信息生成相應(yīng)的字符串。在本發(fā)明實施例中,用戶輸入的用戶數(shù)據(jù)(例如包括用戶帳號、用戶模型)并不能直接輸入鍵值對Key-Value中,Key-Value存儲的數(shù)據(jù)類型為字符串類型,需要將用戶輸入的用戶數(shù)據(jù)轉(zhuǎn)換成Key-Value對應(yīng)的字符串類型。
S104,根據(jù)所述屬性信息將相應(yīng)的字符串設(shè)置為字典中的Key-Value。在本發(fā)明實施例中,當(dāng)用戶登錄應(yīng)用成功后,創(chuàng)建單例操作類PHKeychainManager將用戶輸入的用戶數(shù)據(jù)設(shè)置為字典中的Key-Value,例如將用戶帳號作為Key,與用戶帳號相對應(yīng)的用戶模型作為Value,將用戶輸入的用戶帳號和用戶模型輸入鍵值對Key-Value。需要說明的是,所創(chuàng)建的單例操作類PHKeychainManager用來統(tǒng)一管理用戶數(shù)據(jù)的輸入和讀取,單例操作類PHKeychainManager的創(chuàng)建過程為標(biāo)準(zhǔn)化創(chuàng)建,例如,可以在類實現(xiàn)文件中聲明一個全局變量_instance,規(guī)定此類的統(tǒng)一訪問函數(shù)為+sharedManager,并在此函數(shù)中判斷全局變量_instance是否已經(jīng)初始化,若是,則返回該變量本身,否則使用函數(shù)dispatch_once:,以確保_instance只執(zhí)行一次初始化,并且覆蓋其他可能產(chǎn)生新對象的方法,如+allocWithZone:或者-copyWithZone:等。
S105,對所述Key-Value進(jìn)行編碼。在本發(fā)明實施例中,由于在開發(fā)中用來存儲用戶數(shù)據(jù)的Key-Value所在的對象模型是一個實體數(shù)據(jù)類,例如本發(fā)明自定義創(chuàng)建的實體數(shù)據(jù)類,且繼承自NSObject類,實體數(shù)據(jù)類可以有多項屬性,包含用戶帳號、姓名、昵稱、年齡、性別、頭像或者URL地址等具體信息,但是在最初創(chuàng)建的時候?qū)嶓w數(shù)據(jù)類并不支持NSCoding協(xié)議,因此需要對實體數(shù)據(jù)類進(jìn)行編碼,使得用戶數(shù)據(jù)支持NSCoding協(xié)議,以及為所述字典NSDictionary存入Keychain的步驟做準(zhǔn)備。
具體地,如圖2所示,步驟S104包括步驟S201~S202。
S201,調(diào)用編碼函數(shù)并獲取編碼器。所述編碼函數(shù)為-encodeWithCoder:,調(diào)用該函數(shù)時會傳入一個編碼器aCoder。
S202,利用所述編碼器對所述Key-Value進(jìn)行編碼。對實體數(shù)據(jù)類中的每個Key-Value都用編碼器編碼一次,而對于實體數(shù)據(jù)類中的Key-Value不支持編碼的屬性,如Int類型的屬性,通過NSString類函數(shù)+StringWithFormat:轉(zhuǎn)換成NSString類型,再利用編碼器對轉(zhuǎn)換后的屬性進(jìn)行編碼。
S106,將構(gòu)建的字典寫入所述Keychain中。在本發(fā)明實施例中,在將相應(yīng)的字符串設(shè)置為字典中的Key-Value后,再次調(diào)用單例操作類PHKeychainManager,將存儲有用戶數(shù)據(jù)的字典NSDictionary寫入Keychain中。此外,在另外一些可行的實施例中,本發(fā)明可以通過監(jiān)聽?wèi)?yīng)用的活動狀態(tài),若檢測到應(yīng)用被關(guān)閉時,通過單例操作類PHKeychainManager將用戶數(shù)據(jù)存入字典NSDictionary中,并調(diào)用操作類PHKeychainWrapper,通過操作類PHKeychainWrapper的數(shù)據(jù)接口及時把字典NSDictionary保存至Keychain中。
具體地,如圖3所示,步驟S106包括步驟S301~S302。
S301,對所述Keychain進(jìn)行封裝并生成數(shù)據(jù)接口,所述數(shù)據(jù)接口包括存儲數(shù)據(jù)接口、讀取數(shù)據(jù)接口以及刪除數(shù)據(jù)接口。本發(fā)明實施例通過封裝一Keychain操作類PHKeychainWrapper方便開發(fā)者通過單例操作類PHKeychainManager直接操作Keychain;具體的,對Keychain進(jìn)行封裝并生成三個數(shù)據(jù)接口,通過數(shù)據(jù)接口方便用戶對Keychain進(jìn)行直接操作,對Keychain進(jìn)行封裝后生成的三個數(shù)據(jù)接口分別為,存儲數(shù)據(jù)接口+saveObject:toService:serviceID、讀取數(shù)據(jù)接口+saveObject:toService:serviceID以及刪除數(shù)據(jù)接口+deleteKeychainBy:serviceID。
S302,根據(jù)所述數(shù)據(jù)接口,將構(gòu)建的字典寫入所述Keychain中。本發(fā)明實施例通過單例操作類PHKeychainManager對所述Keychain進(jìn)行數(shù)據(jù)操作,可以通過對Keychain封裝后生成的三個數(shù)據(jù)接口進(jìn)行直接操作,例如,可以通過存儲數(shù)據(jù)接口+saveObject:toService:serviceID將存儲有用戶數(shù)據(jù)的字典NSDictionary寫入Keychain中,可以通過讀取數(shù)據(jù)接口+saveObject:toService:serviceID讀取Keychain并獲得用戶數(shù)據(jù),可以通過刪除數(shù)據(jù)接口+deleteKeychainBy:serviceID將Keychain中存儲的用戶數(shù)據(jù)進(jìn)行刪除,因此,通過操作類PHKeychainWrapper以及生成的數(shù)據(jù)接口方便統(tǒng)一管理用戶數(shù)據(jù)的存儲、讀取以及刪除等操作。
S107,若接收到用戶訪問Key-Value的指令,對所述Key-Value進(jìn)行解碼。
具體地,如圖4所示,步驟S107包括步驟S401~S402。
S401,調(diào)用解碼函數(shù)并獲取解碼器。從Keychain中讀取用戶數(shù)據(jù)時調(diào)用解碼函數(shù),所述解碼函數(shù)為-initWithCoder:,調(diào)用該函數(shù)時會傳入一個解碼器aDecoder。
S402,利用所述解碼器對所述Key-Value進(jìn)行解碼。對從Keychain中讀取的每個Key-Value都用解碼器解碼一次,即將每個Key-Value中的用戶數(shù)據(jù)都用解碼器解碼一次,且解碼成NSString類型,再根據(jù)需要轉(zhuǎn)換成每個用戶數(shù)據(jù)對應(yīng)的數(shù)據(jù)類型,并賦值給相應(yīng)的對象。
由以上可見,本發(fā)明實施例通過構(gòu)建字典,利用字典中對應(yīng)的鍵值對Key-Value存儲用戶信息,并將存儲有用戶信息的字典寫入Keychain方便了用戶信息的存儲,并且在用戶信息設(shè)置為所述字典中的Key-Value之前,對用戶信息進(jìn)行編碼,使得用戶信息支持NSCoding協(xié)議;在讀取Keychain中的用戶信息時,對讀取的用戶信息進(jìn)行解碼并轉(zhuǎn)換成相對應(yīng)的數(shù)據(jù)類型,方便對所述用戶信息的使用。
在本發(fā)明一種基于Keychain的數(shù)據(jù)管理方法的另一個實施例中,如圖5所示,為本發(fā)明另一實施例提供的流程示圖,其包括步驟S501~S508(其中步驟S501~S507與本發(fā)明實施例一相同,在此不再詳述)。
S501,構(gòu)建字典,每個字典對應(yīng)若干鍵值對Key-Value,每個Key-Value對應(yīng)用戶的一種屬性信息。
S502,接收用戶輸入的用戶信息,所述用戶信息包括至少一種屬性信息。
S503,將所述用戶信息生成相應(yīng)的字符串。
S504,根據(jù)所述屬性信息將相應(yīng)的字符串設(shè)置為字典中的Key-Value。
S505,對所述Key-Value進(jìn)行編碼。
S506,將構(gòu)建的字典寫入所述Keychain中。
S507,若接收到用戶訪問Key-Value的指令,對所述Key-Value進(jìn)行解碼。
S508,若應(yīng)用再次啟用時,從Keychain中讀取所有用戶信息。本發(fā)明實施例在檢測到應(yīng)用再次開啟時設(shè)置了監(jiān)聽,若檢測到應(yīng)用再次啟用時,通過單例操作類PHKeychainManager及時響應(yīng),并調(diào)用操作類PHKeychainWrapper,通過操作類PHKeychainWrapper的數(shù)據(jù)接口讀取Keychain中的用戶數(shù)據(jù)。
由以上可見,本發(fā)明實施例通過監(jiān)聽?wèi)?yīng)用的狀態(tài),可以防止用戶數(shù)據(jù)的丟失。
如圖6所示,對應(yīng)上述一種基于Keychain的數(shù)據(jù)管理方法,本發(fā)明還提出一種終端,該終端100包括:構(gòu)建單元10、接收單元20、生成單元30、編碼單元40、設(shè)置單元50、寫入單元60、解碼單元70。
其中構(gòu)建單元10,用于構(gòu)建字典,每個字典對應(yīng)若干鍵值對Key-Value,每個Key-Value對應(yīng)用戶的一種屬性信息。在本發(fā)明實施例中,Keychain(即鑰匙串)是運(yùn)行在IOS系統(tǒng)上一種存儲工具,并能夠為系統(tǒng)上的應(yīng)用提供安全系數(shù)較高的數(shù)據(jù)存儲,保證數(shù)據(jù)的安全性;Keychain可以通過鍵值對Key-Value的存儲方式,將必要的數(shù)據(jù)進(jìn)行保存,并且保證該數(shù)據(jù)不會在一般的文件中被找到或者暴露,亦不會被系統(tǒng)中其他的應(yīng)用所讀取。例如,當(dāng)用戶初次在應(yīng)用中注冊登錄時,應(yīng)用通過構(gòu)建字典NSDictionary存儲用戶輸入的用戶數(shù)據(jù),每個字典對應(yīng)若干鍵值對Key-Value,其中將用戶的賬號作為Key,將用戶模型作為Value進(jìn)行存儲。所述屬性信息指的是鍵值對Key-Value中Key與Value的映射關(guān)系,在每次存儲一個數(shù)據(jù)時,是根據(jù)Key進(jìn)行索引存儲的;相對應(yīng)的在用戶輸入的用戶數(shù)據(jù)中,例如用戶數(shù)據(jù)為用戶帳號和用戶模型,則每一個用戶帳號均對應(yīng)一種用戶模型,將用戶帳號作為Key以及將用戶模型作為Value進(jìn)行存儲,在查詢用戶數(shù)據(jù)時,通過調(diào)用Key便可查詢相對應(yīng)的Value。
接收單元20,用于接收用戶輸入的用戶信息,所述用戶信息包括至少一種屬性信息。
生成單元30,用于將所述用戶信息生成相應(yīng)的字符串。在本發(fā)明實施例中,用戶輸入的用戶數(shù)據(jù)(例如包括用戶帳號、用戶模型)并不能直接輸入鍵值對Key-Value中,Key-Value存儲的數(shù)據(jù)類型為字符串類型,需要將用戶輸入的用戶數(shù)據(jù)轉(zhuǎn)換成Key-Value對應(yīng)的字符串類型。
設(shè)置單元40,用于根據(jù)所述屬性信息將相應(yīng)的字符串設(shè)置為字典中的Key-Value。在本發(fā)明實施例中,當(dāng)用戶登錄應(yīng)用成功后,創(chuàng)建單例操作類PHKeychainManager將用戶輸入的用戶數(shù)據(jù)設(shè)置為字典中的Key-Value,例如將用戶帳號作為Key,與用戶帳號相對應(yīng)的用戶模型作為Value,將用戶輸入的用戶帳號和用戶模型輸入鍵值對Key-Value。需要說明的是,所創(chuàng)建的單例操作類PHKeychainManager用來統(tǒng)一管理用戶數(shù)據(jù)的輸入和讀取,單例操作類PHKeychainManager的創(chuàng)建過程為標(biāo)準(zhǔn)化創(chuàng)建,例如,可以在類實現(xiàn)文件中聲明一個全局變量_instance,規(guī)定此類的統(tǒng)一訪問函數(shù)為+sharedManager,并在此函數(shù)中判斷全局變量_instance是否已經(jīng)初始化,若是,則返回該變量本身,否則使用函數(shù)dispatch_once:,以確保_instance只執(zhí)行一次初始化,并且覆蓋其他可能產(chǎn)生新對象的方法,如+allocWithZone:或者-copyWithZone:等。
編碼單元50,用于對所述Key-Value進(jìn)行編碼。在本發(fā)明實施例中,由于在開發(fā)中用來存儲用戶數(shù)據(jù)的Key-Value所在的對象模型是一個實體數(shù)據(jù)類,例如本發(fā)明自定義創(chuàng)建的實體數(shù)據(jù)類,且繼承自NSObject類,實體數(shù)據(jù)類可以有多項屬性,包含用戶帳號、姓名、昵稱、年齡、性別、頭像或者URL地址等具體信息,但是在最初創(chuàng)建的時候?qū)嶓w數(shù)據(jù)類并不支持NSCoding協(xié)議,因此需要對實體數(shù)據(jù)類進(jìn)行編碼,使得用戶數(shù)據(jù)支持NSCoding協(xié)議,以及為所述字典NSDictionary存入Keychain的步驟做準(zhǔn)備。
寫入單元60,用于將構(gòu)建的字典寫入所述Keychain中。在本發(fā)明實施例中,在將相應(yīng)的字符串設(shè)置為字典中的Key-Value后,再次調(diào)用單例操作類PHKeychainManager,將存儲有用戶數(shù)據(jù)的字典NSDictionary寫入Keychain中。此外,在另外一些可行的實施例中,本發(fā)明可以通過監(jiān)聽?wèi)?yīng)用的活動狀態(tài),若檢測到應(yīng)用被關(guān)閉時,通過單例操作類PHKeychainManager將用戶數(shù)據(jù)存入字典NSDictionary中,并調(diào)用操作類PHKeychainWrapper,通過操作類PHKeychainWrapper的數(shù)據(jù)接口及時把字典NSDictionary保存至Keychain中。。
解碼單元70,用于若接收到用戶訪問Key-Value的指令,對所述Key-Value進(jìn)行解碼。
進(jìn)一步的,如圖7所示,所述編碼單元50,具體包括:
第一調(diào)用單元501,用于調(diào)用編碼函數(shù)并獲取編碼器。所述編碼函數(shù)為-encodeWithCoder:,調(diào)用該函數(shù)時會傳入一個編碼器aCoder。
編碼子單元502,用于利用所述編碼器對相應(yīng)的字符串進(jìn)行編碼。對實體數(shù)據(jù)類中的每個Key-Value都用編碼器編碼一次,而對于實體數(shù)據(jù)類中的Key-Value不支持編碼的屬性,如Int類型的屬性,通過NSString類函數(shù)+StringWithFormat:轉(zhuǎn)換成NSString類型,再利用編碼器對轉(zhuǎn)換后的屬性進(jìn)行編碼。
進(jìn)一步的,如圖8所示,所述解碼單元70,具體包括:
第二調(diào)用單元701,用于調(diào)用解碼函數(shù)并獲取解碼器。從Keychain中讀取用戶數(shù)據(jù)時調(diào)用解碼函數(shù),所述解碼函數(shù)為-initWithCoder:,調(diào)用該函數(shù)時會傳入一個解碼器aDecoder。
解碼子單元702,用于利用所述解碼器對所述Key-Value進(jìn)行解碼。對從Keychain中讀取的每個Key-Value都用解碼器解碼一次,即將每個Key-Value中的用戶數(shù)據(jù)都用解碼器解碼一次,且解碼成NSString類型,再根據(jù)需要轉(zhuǎn)換成每個用戶數(shù)據(jù)對應(yīng)的數(shù)據(jù)類型,并賦值給相應(yīng)的對象。
進(jìn)一步的,如圖9所示,所述終端100,還包括:
讀取單元80,用于若應(yīng)用再次啟動時,從Keychain中讀取所有用戶信息。本發(fā)明實施例在檢測到應(yīng)用再次開啟時設(shè)置了監(jiān)聽,若檢測到應(yīng)用再次啟用時,通過單例操作類PHKeychainManager及時響應(yīng),并調(diào)用操作類PHKeychainWrapper,通過操作類PHKeychainWrapper的數(shù)據(jù)接口讀取Keychain中的用戶數(shù)據(jù)。
進(jìn)一步的,如圖10所示,所述寫入單元60,具體包括:
封裝單元601,用于對所述Keychain進(jìn)行封裝并生成數(shù)據(jù)接口,所述數(shù)據(jù)接口包括存儲數(shù)據(jù)接口、讀取數(shù)據(jù)接口以及刪除數(shù)據(jù)接口。本發(fā)明實施例通過封裝一Keychain操作類PHKeychainWrapper方便開發(fā)者通過單例操作類PHKeychainManager直接操作Keychain;具體的,對Keychain進(jìn)行封裝并生成三個數(shù)據(jù)接口,通過數(shù)據(jù)接口方便用戶對Keychain進(jìn)行直接操作,對Keychain進(jìn)行封裝后生成的三個數(shù)據(jù)接口分別為,存儲數(shù)據(jù)接口+saveObject:toService:serviceID、讀取數(shù)據(jù)接口+saveObject:toService:serviceID以及刪除數(shù)據(jù)接口+deleteKeychainBy:serviceID。
寫入子單元602,用于根據(jù)所述數(shù)據(jù)接口,將構(gòu)建的字典寫入所述Keychain中。本發(fā)明實施例通過單例操作類PHKeychainManager對所述Keychain進(jìn)行數(shù)據(jù)操作,可以通過對Keychain封裝后生成的三個數(shù)據(jù)接口進(jìn)行直接操作,例如,可以通過存儲數(shù)據(jù)接口+saveObject:toService:serviceID將存儲有用戶數(shù)據(jù)的字典NSDictionary寫入Keychain中,可以通過讀取數(shù)據(jù)接口+saveObject:toService:serviceID讀取Keychain并獲得用戶數(shù)據(jù),可以通過刪除數(shù)據(jù)接口+deleteKeychainBy:serviceID將Keychain中存儲的用戶數(shù)據(jù)進(jìn)行刪除,因此,通過操作類PHKeychainWrapper以及生成的數(shù)據(jù)接口方便統(tǒng)一管理用戶數(shù)據(jù)的存儲、讀取以及刪除等操作。
圖11為本發(fā)明的終端的另一實施例的結(jié)構(gòu)組成示意圖。如圖11所示,其可包括:輸入裝置99、輸出裝置88、收發(fā)裝置77、存儲器66以及處理器55,其中:
所述輸入裝置99,用于接收外部訪問控制設(shè)備的輸入數(shù)據(jù)。具體實現(xiàn)中,本發(fā)明實施例所述的輸入裝置99可包括鍵盤、鼠標(biāo)、光電輸入裝置、聲音輸入裝置、觸摸式輸入裝置、掃描儀等。
所述輸出裝置88,用于對外輸出訪問控制設(shè)備的輸出數(shù)據(jù)。具體實現(xiàn)中,本發(fā)明實施例所述的輸出裝置88可包括顯示器、揚(yáng)聲器、打印機(jī)等。
所述收發(fā)裝置77,用于通過通信鏈路向其他設(shè)備發(fā)送數(shù)據(jù)或者從其他設(shè)備接收數(shù)據(jù)。具體實現(xiàn)中,本發(fā)明實施例的收發(fā)裝置77可包括射頻天線等收發(fā)器件。
所述存儲器66,用于存儲帶有各種功能的程序數(shù)據(jù)。本發(fā)明實施例中存儲器66存儲的數(shù)據(jù)包括可調(diào)用并運(yùn)行的程序數(shù)據(jù)。具體實現(xiàn)中,本發(fā)明實施例的存儲器66可以是系統(tǒng)存儲器,比如,揮發(fā)性的(諸如RAM),非易失性的(諸如ROM,閃存等),或者兩者的結(jié)合。具體實現(xiàn)中,本發(fā)明實施例的存儲器66還可以是系統(tǒng)之外的外部存儲器,比如,磁盤、光盤、磁帶等。
所述處理器55,用于調(diào)用所述存儲器66中存儲的程序數(shù)據(jù),并執(zhí)行如下操作:
構(gòu)建字典,每個字典對應(yīng)若干鍵值對Key-Value,每個Key-Value對應(yīng)用戶的一種屬性信息;接收用戶輸入的用戶信息,所述用戶信息包括至少一種屬性信息;將所述用戶信息生成相應(yīng)的字符串;根據(jù)所述屬性信息將相應(yīng)的字符串設(shè)置為字典中的Key-Value;對所述Key-Value進(jìn)行編碼;將構(gòu)建的字典寫入所述Keychain中;若接收到用戶訪問Key-Value的指令,對所述Key-Value進(jìn)行解碼。
進(jìn)一步地,所述處理器55還執(zhí)行如下操作:
調(diào)用編碼函數(shù)并獲取編碼器;利用所述編碼器對所述Key-Value進(jìn)行編碼。
進(jìn)一步地,所述處理器55還執(zhí)行如下操作:
調(diào)用解碼函數(shù)并獲取解碼器;利用所述解碼器對所述Key-Value進(jìn)行解碼。
進(jìn)一步地,所述處理器55還執(zhí)行如下操作:
若應(yīng)用再次啟用時,從Keychain中讀取所有用戶信息。
進(jìn)一步地,所述處理器55還執(zhí)行如下操作:
對所述Keychain進(jìn)行封閉并生成數(shù)據(jù)接口,所述數(shù)據(jù)接口包括存儲數(shù)據(jù)接口、讀取數(shù)據(jù)接口以及刪除數(shù)據(jù)接口;根據(jù)所述數(shù)據(jù)接口,將構(gòu)建的字典寫入所述Keychain中。
本發(fā)明所有實施例中的單元可以通過通用集成電路,例如CPU(Central Processing Unit,中央處理器),或通過ASIC(Application Specific Integrated Circuit,專用集成電路)來實現(xiàn)。
本發(fā)明實施例方法中的步驟可以根據(jù)實際需要進(jìn)行順序調(diào)整、合并和刪減。
本發(fā)明實施例終端中的單元可以根據(jù)實際需要進(jìn)行合并、劃分和刪減。
本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例方法中的全部或部分流程,是可以通過計算機(jī)程序來指令相關(guān)的硬件來完成,所述的程序可存儲于一計算機(jī)可讀取存儲介質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法的實施例的流程。其中,所述的存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(Read-Only Memory,ROM)或隨機(jī)存儲記憶體(Random Access Memory,RAM)等。
以上所述,僅為本發(fā)明的具體實施方式,但本發(fā)明的保護(hù)范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到各種等效的修改或替換,這些修改或替換都應(yīng)涵蓋在本發(fā)明的保護(hù)范圍之內(nèi)。因此,本發(fā)明的保護(hù)范圍應(yīng)以權(quán)利要求的保護(hù)范圍為準(zhǔn)。