Notice
Recent Posts
Recent Comments
Link
투케이2K
937. (Android/Java) AWSIotMqttManager 사용해 Aws 프로비저닝 수행 시 임시 인증서 생성 요청 및 응답 데이터 확인 소스 코드 본문
Android
937. (Android/Java) AWSIotMqttManager 사용해 Aws 프로비저닝 수행 시 임시 인증서 생성 요청 및 응답 데이터 확인 소스 코드
투케이2K 2025. 1. 14. 19:53[개발 환경 설정]
개발 툴 : AndroidStudio
개발 언어 : Java / Kotlin
[소스 코드]
// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------
- 언어 : Java / Kotlin
- 개발 툴 : AndroidStudio
- 기술 구분 : Aws / Provisioning / Certificated / Private Key
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[사전) 프로비저닝 설명]
// --------------------------------------------------------------------------------------
1. 프로비저닝은 IT 인프라 설정 프로세스를 뜻하며, 데이터와 리소스에 대한 액세스 관리에 필요한 단계입니다
2. Aws Iot Core Shadow 통신을 하기 위해서는 Aws 프로비저닝 단계에서 전달 받은 임시 인증서를 사용해 Device Connection 연결 및 Pub , Sub 을 테스트 할 수 있습니다.
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[소스 코드]
// --------------------------------------------------------------------------------------
// TODO [사전 라이브러리 추가 설정 : Build.gradle]
implementation 'com.amazonaws:aws-android-sdk-core:2.57.0'
implementation 'com.amazonaws:aws-android-sdk-iot:2.57.0'
implementation 'com.amazonaws:aws-android-sdk-mobile-client:2.57.0'
// TODO [객체 생성 실시 예시]
AWSIotMqttManager awsProvisioningMqttManager = new AWSIotMqttManager(
String.valueOf(CLIENT_ID), // [클라이언트 아이디 : 디바이스 고유값]
String.valueOf(END_POINT) // [엔드 포인트 : AWS 접속 정보]
);
// TODO [Subscribe 구독 소스 코드]
public static void aws_Subscribe(Context mContext, String topic) {
// -------------------------------------------------------------------
// [Subscribe 구독 Topic 참고]
// -------------------------------------------------------------------
// $aws/certificates/create/json/accepted
// -------------------------------------------------------------------
// $aws/certificates/create/json/rejected
// -------------------------------------------------------------------
S_Log._D_("[Aws] :: Subscribe 구독 수행", new String[]{ "TOPIC :: " + String.valueOf(topic) });
// [로직 처리 실시]
try {
if (aws_Mqtt_IsConnect() == true){ // [MqttManager 연결 상태 인 경우]
// TODO [awsDeviceMqttManager 구독 실시]
awsProvisioningMqttManager.subscribeToTopic(String.valueOf(topic),
QOS, new AWSIotMqttSubscriptionStatusCallback() {
@Override
public void onSuccess() { // [성공]
S_Log._W_("[Aws] :: Subscribe 구독 성공 :: onSuccess", new String[]{ "TOPIC :: " + String.valueOf(topic) });
}
@Override
public void onFailure(Throwable exception) { // [에러]
S_Log._E_("[Aws] :: Subscribe 구독 실패 :: onFailure", new String[]{ "TOPIC :: " + String.valueOf(topic), "ERROR :: " + String.valueOf(exception.getMessage())});
}
}, new AWSIotMqttNewMessageCallback() {
@Override
public void onMessageArrived(String topic, byte[] data) { // [메시지 수신]
S_Log._D_("[Aws] :: Subscribe 실시간 메시지 수신 확인 :: onMessageArrived", new String[]{
"TOPIC :: " + String.valueOf(topic),
"MESSAGE :: " + String.valueOf(new String(data))
});
// -------------------------------------------------------------
// [실시간 전달 받은 메시지 확인]
// -------------------------------------------------------------
String message = String.valueOf(new String(data));
// -------------------------------------------------------------
// [Publish 인증서 생성 요청 성공 시] >> Subscribe Accepted 부분에서 임시 인증서 데이터 확인
// -------------------------------------------------------------
if (topic.contains("$aws/certificates/create/json/accepted") == true
&& message.contains("certificateId") == true
&& message.contains("certificatePem") == true
&& message.contains("privateKey") == true
&& message.contains("certificateOwnershipToken") == true){ // [정상 디바이스 접속 인증 확인 완료]
// -------------------------------------------------
// TODO [응답 형식]
/**
* {
* "certificateId": "c4fb1819...",
* "certificatePem": "-----BEGIN CERTIFICATE-----\nMIIDWj...xfM3ozg==\n-----END CERTIFICATE-----\n",
* "privateKey": "-----BEGIN RSA PRIVATE KEY-----\nM...ixfGs=\n-----END RSA PRIVATE KEY-----\n",
* "certificateOwnershipToken": "eyJ2...IOGT0ifQ=="
* }
* */
// -------------------------------------------------
}
}
});
}
else {
S_Log._E_("[Aws] :: Subscribe 구독 실패", new String[]{
"TOPIC :: " + String.valueOf(topic),
"MESSAGE :: " + String.valueOf("AWSIotMqttManager Connection 연결 되지 않았습니다. 연결 상태를 다시 확인해 주세요.")
});
}
}
catch (Exception e){
S_Log._printStackTrace_(null, S_FinalData.LOG_BUG_STATE, null, e);
}
}
// TODO [Publish 메시지 전송 소스 코드] : 임시 인증서 생성 요청
public static void aws_Publish(Context mContext, String topic){
// -------------------------------------------------------------------
// [Publish 메시지 전송 Topic 참고] : 디바이스 접속 및 임시 인증서 생성 요청
// -------------------------------------------------------------------
// $aws/certificates/create/json
// -------------------------------------------------------------------
S_Log._D_("[Aws] :: Publish 메시지 전송 수행", new String[]{ "TOPIC :: " + String.valueOf(topic) });
try {
// [MqttManager 연결 상태 인 경우]
if (aws_Mqtt_IsConnect() == true){
// [Publish 수행]
awsProvisioningMqttManager.publishString("", topic, QOS);
}
else {
S_Log._E_("[Aws] :: Publish 메시지 전송 실패", new String[]{
"TOPIC :: " + String.valueOf(topic),
"MESSAGE :: " + String.valueOf("AWSIotMqttManager Connection 연결 되지 않았습니다. 연결 상태를 다시 확인해 주세요.")
});
}
}
catch (Exception e){
S_Log._printStackTrace_(null, S_FinalData.LOG_BUG_STATE, null, e);
}
}
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[참고 사이트]
// --------------------------------------------------------------------------------------
https://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/iot-provision.html
https://blog.naver.com/kkh0977/222987213019?trackingCode=blog_bloghome_searchlist
https://docs.aws.amazon.com/ko_kr/iot/latest/developerguide/iot-device-shadows.html
https://dongwon18.github.io/aws_iot/AWS-IoT-Shadow-Tutorial/
// --------------------------------------------------------------------------------------
반응형
'Android' 카테고리의 다른 글
Comments