2016-10-30 25 views
2

Realm有很好的加密數據庫的write upsample code。本文檔和示例工作按計劃,直到您嘗試解密境界時:在後臺或通知進程中使用加密領域?

  1. 用戶都有自己的手機上輸入密碼
  2. 設備被鎖定
  3. 您的應用程序正在試圖做的工作與境界時遠程通知進來

發生這種情況是因爲我們無法訪問鑰匙串來獲取(或創建)密鑰以解密/解密Realm。默認kSecAttrAccessible值爲kSecAttrAccessibleWhenUnlocked

有幾個選項,我看到他們:

  1. 變化kSecAttrAccessiblekSecAttrAccessibleAlways。我不喜歡這個,因爲它是a)太開放了,b)它在iOS 9中是slated to be deprecated
  2. 更改kSecAttrAccessiblekSecAttrAccessibleAfterFirstUnlockkSecAttrAccessibleAfterFirstUnlockThisDeviceOnly。雖然docs狀態爲:這建議用於需要由後臺應用程序訪問的項目
  3. 創建第二個未加密的Realm以用作臨時數據庫,但這仍然讓我感覺開放太多。將通知數據存儲在此處,然後當應用程序從用戶交互中喚醒(設備將被解鎖)時,將數據從分段Realm移動到加密的Realm中。這也不舒服,因爲我們暫時沒有加密數據
  4. 組合2和3並加密分段Realm,並用kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly加密
  5. ??

我目前正試圖如果#2來決定,如果#3是值得投入時間到,或者如果我能想出一個#5

是否有辦法在這裏,我應該清楚使用還是我錯過了?

感謝

回答

2

KeychainAccess庫的作者。我強烈建議您使用kSecAttrAccessibleAfterFirstUnlock(第二種選擇)。這是從後臺訪問鑰匙串項目的最佳方式。

+0

謝謝,通過kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly?我傾向於這一點,但後來意識到,當用戶恢復他們的手機時(如果數據庫被複制,但它的關鍵沒有),它會變得非常快。 – timbroder

+0

另外,真棒看圖書館 – timbroder

+0

是'~ThisDeviceOnly'意味着項目永遠不會遷移到新設備(=未備份)。如果您沒有特殊原因,我建議使用'kSecAttrAccessibleAfterFirstUnlock'而不是'〜ThisDeviceOnly'。大多數用戶希望從加密備份恢復密碼。 –