2017-08-07 98 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(),发现异常并将其注销。