没有加密密钥的领域迁移检查

时间:2020-07-20 23:22:15

标签: android encryption realm realm-migration

我的应用不断报告某些崩溃,尤其是在我们发布新的Realm Scheme时,由于以下错误:

 io.realm.exceptions.RealmMigrationNeededException: Migration is required due to the following errors:
 Class 'XXX' has been added , ...

即使我们设置了迁移,也会抛出这些错误,并且对于99%的用户,迁移执行得很好。

经过全面测试后,我注意到该错误是因为加密密钥变得无效(至今仍为原因),所以从未设置我的默认初始配置,所以从未分配MigrationHelper:

Realm.init(context);
final RealmKeyProvider keyProvider = new RealmKeyProvider(context);
final byte[] symmetricKey = keyProvider.getSecretKey();
if (symmetricKey != null && symmetricKey.length == 64) {  //this returns empty key
    RealmConfiguration sRealmConfiguration = new RealmConfiguration.Builder()
            .name(REALM_NAME)
            .schemaVersion(REALM_SCHEMA_VERSION)
            .migration(new MigrationHelper())
            .encryptionKey(symmetricEarmark)
            .build();
    Realm.setDefaultConfiguration(sRealmConfiguration);
} 

我已经开发出一种解决方法,可以在发生这种情况时还原Realm,以便使应用可以从干净状态重新启动。

但是,我很好奇,如果没有提供用于解密现有数据库的密钥,Realm如何知道需要迁移?方案未加密吗?

0 个答案:

没有答案