2017-08-07 58 views
0

我在我的Android應用中使用了Realm database。數據需要加密,我正在使用Realm的加密。他們的密鑰來自服務器,然後存儲在設備上,但使用用戶PIN加密。在Realm中註銷錯誤加密密鑰的用戶

我想退出用戶,如果 - 無論如何 - 鑰匙被鍛鍊。我使用ParentActivity類一些通用的初始化和試圖做這裏面onCreate像下面,

private void initRealm() { 
    try { 
     if(MyApplication.getInstance().isRelamInitialized) 
      realm = Realm.getDefaultInstance(); 
    } catch (IllegalStateException e) { 
     e.printStackTrace(); 
     deleteAllAndLogout(); 
    } 

} 

而且deleteAllAndLogout類似於下,

public void deleteAllAndLogout() { 
    session.logoutUser(); 
    session.removeFbData(); 
    RealmManager.deleteAll(realm); 
    LoginManager.getInstance().logOut(); 
    Intent intent = new Intent(this, LoginActivity.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
    startActivity(intent); 
    finish(); 
} 

問題

  • Realm尚未初始化,那麼它應該如何清除數據wi大約realm正在初始化?

  • 當我測試它時,它一次又一次地開始LoginActivity並從未停止過。

我正在初始化RealmApplication類。

public void initRealm() { 
    String encryptedKey = new Session(getApplicationContext()).getStringForKey(Session.mainEncryptedKeyForEncryption); 
    String key = new Cipher(getApplicationContext()).decrypt(encryptedKey); 

    Realm.init(getApplicationContext()); 
    config = new RealmConfiguration 
      .Builder() 
      .encryptionKey(key.getBytes()) 
      .deleteRealmIfMigrationNeeded() 
      .name(DB_NAME) 
      .schemaVersion(DB_VERSION) 
      .build(); 

    Realm.setDefaultConfiguration(config); 
    isRelamInitialized = true; 

} 

問題

如何以及在哪裏可以刪除所有本地數據和註銷用戶時Realm沒有正確解密?

回答

0

如果您嘗試使用錯誤的加密密鑰打開Realm文件,則領域將拋出RealmFileException

因此,您需要將所有呼叫都打包到Realm.getDefaultInstance(),發現異常並將其註銷。