CommExpert Library 를 사용하여 한국투자증권에 로그인이 가능한지 확인해 본다.
CommExpert Library 만들기 방법
https://stockant.tistory.com/343
1. Empty Activity 로 새로운 Project를 생성한다.
로그인만 확인할 것이므로 MainActivity 만 구현한다.
2. CommExpert.aar 파일을 Mkis\app\libs 폴더에 복사한다.
CommExpert 라이브러리가 없으면 아래 페이지에서 다운로드한다.
https://stockant.tistory.com/343
3. 복사한 CommExpert.aar 을 프로젝트에 추가.
File > Project Structure 에서 Dependencies 항목에서 app을 선택 후,
Declared Dependencies 의 + 버튼을 누른다.
*.aar 파일도 라이브러리로 추가하기 위해서다.
Jar Dependency 항목을 선택하면 libs 상태이고 그대로 OK 하면 된다.
libs 항목이 두개가 되는데 includes: 에 [*.jar] 만 있는 것이 있는데 이것을 삭제한다.
includes: 에 [*.aar, *.jar]로 된 항목이 있을 것이다.
Apply를 하고 창을 닫는다.
라이브러리가 잘 적용되었는지 확인해 보기 위해 MainActivity.kt 파일에 아래 코드를 넣어본다.
import com.commexpert.CommExpertMng
4. qry 폴더를 복사한다.
OpenApiSample\assets 폴더 아래의 qry 폴더를 LoginTest\app\src\main\assets 폴더 안에 복사한다.
5. 가이드 내용으로 코딩한다.
kis_Expert_mobile_guide.pdf 파일 내용이 너무 부실하지만 로그인이 되는지 아래 코드로 확인해 본다.
A. AndroidManifest.xml 파일에 아래 내용을 추가한다.
Sample code나 guide 문서를 보면 알 수 있다.
android:installLocation="internalOnly"
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
Q OS 단말에서는 READ_PHONE_STATE 를 사용하면 안되는 것 같다.
P OS 이하 단말에서만 가능한건 말도 안된다. 해결방법을 찾아봐야 겠다.
B. MainActivity.kt 도 수정한다.
상세 내용은 하단에 적었다.
6. 빌드 후 인스톨 하여 실행을 해보면 아래와 같은 에러가 발생했다.
java .lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/com.enigmah2k.logintest-woYYua-rMLw3JZ3lfdP7zA==/base.apk"],nativeLibraryDirectories=[/data/app/com.enigmah2k.logintest-woYYua-rMLw3JZ3lfdP7zA==/lib/arm64, /system/lib64, /product/lib64]]] couldn't find "libKeySharp_Android_Core.so"
libKeySharp_Android_Core.so 라이브러리를 복사하지 않아서 그렇다.
예제 CommExpert\src\main 의 jniLibs 폴더를 LoginTest\app\src\main 폴더 아래 복사한다.
아래는 ndk를 설치하는 내용이다.
https://developer.android.com/studio/projects/install-ndk?hl=ko
https://developer.android.com/studio/projects/add-native-code?hl=ko
7. 실행시 아래와 같은 에러가 발생하면,
java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/impl/client/DefaultHttpClient
AndroidManifest.xml 파일에 아래 코드를 넣는다.
<application>
...
<meta-data android:name="com.google.android.actions"
android:resource="@xml/network_security_config" />
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
...
</application>
해 보니 meta-data는 꼭 필요한 건 아니다. android studio에서 자동 삭제되는 것 같다.
8. 빌드가 잘 되고 설치가 된 후 실행을 하기전에 권한을 준다.
공인인증 네이티브 경로가 설정이 안된 것으로 나오는 경우는
한국투자증권 앱에서 공인인증서 가져오기를 하지 않아서 그렇다.
9. 로그인 기능을 구현하면 아래와 같은 에러가 발생할 수 있다.
NetworkSecurityConfig: No Network Security Config specified, using platform default
안드로이드9(APL Lv 28) 부터 강화된 네트워크 보안정책으로 발생한다.
res/smlMkis\app\src\main\res\xml\ 폴더에 network_security_config.xml 파일을 만든다.
아래와 같이 작성한다.
<?xml version ="1.0" encoding ="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">new.real.download.dws.co.kr</domain>
</domain-config>
</network-security-config>
AndroidManifest.xml 파일의 application 항목에 아래 두 값을 추가한다.
android:usesCleartextTraffic="true"
android:networkSecurityConfig="@xml/network_security_config"
10. 로그인 정보를 넣고 로그인 하게 되면,
MasterFileDownload 에 zip 파일들의 다운로드가 진행된다.
그런데 "공인인증 네이티브 경로지정 실패" 가 계속 발생한다.
왜 그런지 모르겠다.
AndroidManifest.xml 파일에 sample 코드를 참고하여 옵션을 추가했다.
android:allowTaskReparenting="true"
android:screenOrientation="portrait"
android:alwaysRetainTaskState="true"
11. 로그인이 잘 안 될 경우, 개발을 진행하며 로그인 정보가 잘못되어 5회 실패를 하였는지 확인이 필요하다.
한국투자증권 앱으로 로그인 해 보면 알 수 있다.
계정 ID와 계좌 개수 정보를 잘 얻어오는 것을 확인했으니,
다음은 조회 쪽으로 구현해 보겠다.
12. 공인인증 네이티브 경로를 못찾아서 에러가 발생한다.
아직 해결 방법을 찾지 못했다. 계속 찾아보고 있다.
주문 관련 API를 사용할 수 없지만, 조회 관련 현재가/실시간 API는 사용할 수 있다.
일단 매수 매도 기능을 구현하여 테스트 해 보니 잘 된다.
경로를 찾지 못한다는 토스트 팝업은 무시해도 될 것 같다.
가이드 내용이나 SampleCode 동작들 중에서는 안되는 것은 없는것 같다.
다만 가이드 문서 내용이 좀 빈약하고 오타나 잘못된 부분이 좀 있다.
MainActivity.kt
package com.enigmah2k.logintest
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.commexpert.CommExpertMng
import com.truefriend.corelib.commexpert.intrf.IExpertInitListener
import com.truefriend.corelib.commexpert.intrf.IExpertLoginListener
import kotlinx.android.synthetic.main.activity_main.*
class MainActivity : AppCompatActivity(), IExpertInitListener, IExpertLoginListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
/** * ExpertMng 기본 셋팅 */
// Activity 셋팅
CommExpertMng.InitActivity(this);
// 초기화 및 통신 접속
CommExpertMng.InitCommExpert(this);
// Listener 셋팅
CommExpertMng.getInstance().SetInitListener(this@MainActivity);
CommExpertMng.getInstance().SetLoginListener(this@MainActivity);
// "0"리얼 , "1" 개발
CommExpertMng.getInstance().SetDevSetting("1");
button.setOnClickListener(){
//로그인 시작
CommExpertMng.getInstance().StartLogin ( "본인ID", "본인PW", "공인PW" );
}
}
override fun onDestroy() {
super.onDestroy()
/** * ExpertMng 종료... */
CommExpertMng.getInstance().Close()
}
override fun onSessionConnecting() {}
override fun onSessionConnected(isSuccess: Boolean, strErrorMsg: String?) {}
override fun onAppVersionState(isDone: Boolean) {}
override fun onMasterDownState(isDone: Boolean) {}
override fun onMasterLoadState(isDone: Boolean) {}
override fun onInitFinished() {}
override fun onRequiredRefresh() {}
override fun onLoginResult(isSuccess: Boolean, strErrorMsg: String?) {}
override fun onAccListResult(isSuccess: Boolean, strErrorMsg: String?) {}
override fun onPublicCertResult(isSuccess: Boolean) {}
override fun onLoginFinished() {}
}
한국투자증권 OpenAPI 모바일앱 개발 전체 리스트
==================================================
한국투자증권 OpenAPI 관련 블로그 내용을 모아 편집하여 전자책을 만들었습니다.
블로그 내용과 거의 유사하므로 블로그를 참고하실 분은 구매하지 않으셔도 됩니다.
'프로그래밍 > 한국투자증권API' 카테고리의 다른 글
한국투자증권 API 모바일앱 - 계좌정보 구하기 (0) | 2020.05.24 |
---|---|
한국투자증권 API 모바일앱 - 코스피 종목/코스닥 종목 리스트 구하기 (0) | 2020.05.22 |
한국투자증권 OpenAPI 모바일앱 개발 (4) | 2020.05.21 |
한국투자증권 API 모바일앱 CommExpert Library AAR(Android Archive package) (7) | 2020.05.13 |
한국투자증권 API 모바일앱 개발 시작 (2) | 2020.05.13 |