Secure Storage
Secure Storage 는 HSP 에서 확장 라이브러리로 제공하는 API 로 aar 라이브러리 파일과 build.gradle 파일을 수정한 뒤 Realm 와 Network 관련 설정을 하게 되면 사용할 수 있다.
라이브러리 추가 방법은 Android 개발 가이드의 내용을 참조하면 되며 Realm 과 관련된 설정은 하단을 참고 한다.
사용 설정
Realm 설정
Secure Storage 는 ORM 디비인 Realm 이용하고 있으며 이와 관련되어 필요한 설정을 설명 한다.
(Realm 의 자세한 설정을 정보를 원하면 https://realm.io/kr/docs/java/latest/ 를 참조한다.)
먼저 Project Level 의 build.gradle 파일내 dependencies 에 realm 의 classpath 를 추가 한 뒤
repositories {
jcenter()
}
dependencies {
classpath "io.realm:realm-gradle-plugin:3.5.0"
}
}
App Level 의 build.gradle 파일내 apply plugin: 'com.android.application' 하단에 아래의 코드를 추가 한다.
이후 Application 을 상속 받은 MainApp 의 onCreate 에 Secure Storage 의 init 을 추가하면 Realm 관련 설정이 완료된다.
@Override
public void onCreate() {
super.onCreate();
DAPSecureStorage.init(this);
HoneMobile.get().setContext(this);
}
}
INetworkDelegate
Secure Storage 는 디비 암호화를 위해 AES / RSA 를 이용하고 있고 이와 관련된 키 값을 얻기 위해 Operation 과 연동 작업이 이루어져야 한다. 이를 위해 NetworkDelegate 가 필요 하며 그에 대한 예제는 아래와 같다.
Example
@Override
public void request(@NonNull Map<String, Object> context, @NonNull Map<String, Object> message, @NonNull OnResultListener<Object> listener) {
Map<String, Object> paramsMap = MapUtils.newNetworkParams(context, message);
OnResultListener<MessageContainer> resListener = (result, msgContainer) -> {
switch (result) {
case OnResultListener.TRUE:
listener.onResult(result, msgContainer.getMessage().getPayload());
break;
default:
listener.onResult(result, msgContainer);
break;
}
};
DAPNetwork.asyncDoRequest(activity, paramsMap, resListener);
}
@Override
public void download(@NonNull Map<String, Object> context, @NonNull OnResultListener<Object> listener) {
}
});
instance
instance 는 디비를 초기화 하기 위한 준비 작업으로 암호화 관련 정보를 전달 받은 후 Realm 디비를 초기화 하는 과정이다.
Example
DAPSecureStorage.instance(activity, {
// TODO
}, {
// TODO
}, true)
// 3.10.18 이하
DAPSecureStorage.instance({ result, secureObj ->
// TODO
}, true)
DAPSecureStorage.instance(activity, result -> {
// TODO
}, e -> {
// TODO
}, true);
// 3.10.18 이하
DAPSecureStorage.instance((result, secureObj) -> {
// TODO
}, true);
get
get 은 키를 기준으로 저장된 데이터를 얻을 수 있다. (복호화된 값을 얻는다.)
Example
DAPSecureStorage.instance(activity, { secureObj ->
DAPSecureStorage.get(activity, secureObj.db, "key", { result ->
// TODO
}, {
// TODO
})
}, {
// TODO
}, true)
// 3.10.18 이하
DAPSecureStorage.instance({ result, secureObj ->
if (result == OnResultListener.TRUE) {
val data = DAPSecureStorage.get(secureObj.db, "key")
// TODO
}
}, true)
DAPSecureStorage.instance(activity, secureObj -> {
DAPSecureStorage.get(activity, secureObj.db, "key", result -> {
// TODO
}, e -> {
// TODO
});
}, e -> {
// TODO
}, true);
// 3.10.18 이하
DAPSecureStorage.instance((result, secureObj) -> {
if (result == OnResultListener.TRUE) {
SecureData data = DAPSecureStorage.get(secureObj.db, "key");
// TODO
}
}, true);
set
set 은 키를 기준으로 데이터를 저장한다. 이때 데이터는 암호화 되어 저장된다.
Example
DAPSecureStorage.instance(activity, { secureObj ->
DAPSecureStorage.set(activity, secureObj.db, "key", "value", { result ->
// TODO
}, {
// TODO
})
}, {
// TODO
}, true)
// 3.10.18 이하
DAPSecureStorage.instance({ result, secureObj ->
if (result == OnResultListener.TRUE) {
val data = DAPSecureStorage.get(secureObj.db, "key")
// TODO
}
}, true)
DAPSecureStorage.instance(activity, secureObj -> {
DAPSecureStorage.set(activity, secureObj.db, "key", "value", result -> {
// TODO
}, e -> {
// TODO
});
}, e -> {
}, true);
// 3.10.18 이하
DAPSecureStorage.instance((result, secureObj) -> {
if (result == OnResultListener.TRUE) {
SecureData data = DAPSecureStorage.get(secureObj.db, "key");
// TODO
}
}, true);
remove
remove는 키를 기준으로 데이터를 삭제한다.
Example
DAPSecureStorage.instance(activity, { secureObj ->
DAPSecureStorage.remove(activity, secureObj.db, "key", { result ->
// TODO
}, {
// TODO
})
}, {
// TODO
}, true)
// 3.10.18 이하
DAPSecureStorage.instance({ result, secureObj ->
if (result == OnResultListener.TRUE) {
val data = DAPSecureStorage.remove(secureObj.db, "key")
// TODO
}
}, true)
DAPSecureStorage.instance(activity, secureObj -> {
DAPSecureStorage.remove(activity, secureObj.db, "key", result -> {
// TODO
}, e -> {
// TODO
});
}, e -> {
}, true);
// 3.10.18 이하
DAPSecureStorage.instance((result, secureObj) -> {
if (result == OnResultListener.TRUE) {
DAPSecureStorage.remove(secureObj.db, "key");
}
}, true);