728x90
안녕하세요 오늘은 socket.io로 통신할 때 Trust all certificates를 설정해주는 방법을 알려드리겠습니다
trust all certificates 는 js 클라이언트의 rejectUnauthorized: false 와 동일합니다.
trust all certificates 는 보안 연결을 사용하는 목적에 어긋나므로 주의해서 사용해야합니다.
1. 안드로이드 manifest폴더 밑에 있는 파일에 다음과 같은 코드를 추가해주세요
<uses-permission android:name="android.permission.INTERNET" />
2. 안드로이드에서 socket.io 사용하려면 build.gradle 파일 에 다음과 같은 코드 추가해주세요
주의) 안드로이드의 socket.io 버전에 따라 서버와 통신이 불가능할 수 도 있습니다. 버전 호환성을 확인해주세요
https://socketio.github.io/socket.io-client-java/installation.html
(버전 호환성 확인할 수 있는 사이트)
implementation('io.socket:socket.io-client:2.1.0') {
exclude group:'org.json', module:'json'
}
참고 사이트 : https://socketio.github.io/socket.io-client-java/initialization.html#Trust_all_certificates
다음은 socket.io 에서 Trust all certificates 설정 후에 서버와 통신하는 코드입니다.
packagecom.example.webrtc1.tutorial;
import staticio.socket.client.Socket.EVENT_CONNECT;
import staticio.socket.client.Socket.EVENT_CONNECT_ERROR;
importandroid.os.Bundle;
importandroid.util.Log;
importandroidx.appcompat.app.AppCompatActivity;
importcom.example.webrtc1.R;
importjava.net.URISyntaxException;
importjava.security.KeyManagementException;
importjava.security.NoSuchAlgorithmException;
importjava.security.cert.X509Certificate;
importjava.util.ArrayList;
importjava.util.Arrays;
importjava.util.concurrent.TimeUnit;
importjavax.net.ssl.HostnameVerifier;
importjavax.net.ssl.SSLContext;
importjavax.net.ssl.SSLSession;
importjavax.net.ssl.TrustManager;
importjavax.net.ssl.X509TrustManager;
importio.socket.client.IO;
importio.socket.client.Socket;
importokhttp3.OkHttpClient;
public classCompleteActivity_noCheckServerextendsAppCompatActivity {
private static finalStringTAG="CompleteActivity";
private static final intRC_CALL= 111;
OkHttpClientokHttpClient;
privateSocketsocket;
privateArrayList<String>userList=newArrayList<>();
@Override
protected voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.socket_test_for_newo);
HostnameVerifier hostnameVerifier =newHostnameVerifier() {
@Override
public booleanverify(String hostname, SSLSession sslSession) {
return true;
}
};
X509TrustManager trustManager =newX509TrustManager() {
publicX509Certificate[] getAcceptedIssuers() {
return newX509Certificate[] {};
}
@Override
public voidcheckClientTrusted(X509Certificate[] arg0, String arg1) {
// not implemented
}
@Override
public voidcheckServerTrusted(X509Certificate[] arg0, String arg1) {
// not implemented
}
};
SSLContext sslContext =null;
try{
sslContext = SSLContext.getInstance("TLS");
}catch(NoSuchAlgorithmException e) {
throw newRuntimeException(e);
}
try{
sslContext.init(null,newTrustManager[] { trustManager },null);
}catch(KeyManagementException e) {
throw newRuntimeException(e);
}
okHttpClient=newOkHttpClient.Builder()
.hostnameVerifier(hostnameVerifier)
.sslSocketFactory(sslContext.getSocketFactory(), trustManager)
.readTimeout(1, TimeUnit.MINUTES)// important for HTTP long-polling
.build();
start();
};
private voidstart() {
socketConnect();//시그널링와 이벤트를 주고 받을 소켓 생성및 시그널링 서버와 연결
}
private voidSocketEventListener(){//생성된 소켓의 연결 상태를 알려주는 역할
socket.on(EVENT_CONNECT_ERROR,args -> {
Log.d(TAG,"소켓 연결 에러 "+ Arrays.toString(args));
});
}
private void socketConnect() {
String URL ="통신할 서버 url :8086";// https://서버url :port번호 형식으로 작성
Log.d(TAG,"REPLACE ME: IO Socket:"+ URL);
IO.Options options =newIO.Options();
options.callFactory=okHttpClient;
options.webSocketFactory=okHttpClient;
try{
socket= IO.socket(URL,options);
}catch(URISyntaxException e) {
throw newRuntimeException(e);
}
socket.connect();
Log.d(TAG,"소켓 connect연결 시도");
socket.on(EVENT_CONNECT, args -> {
Log.d(TAG,"소켓 연결 됨 args : "+args);
});
}
}
'안드로이드 자바' 카테고리의 다른 글
[Android][Java] 리사이클러뷰 notifyItemChanged 활용하여 리사이클러뷰 아이템 특정 요소 수정하기 (좋아요 기능) (2) | 2023.09.18 |
---|---|
[Android][Java] 내 기기에서 오디오 파일 선택해 복사본 생성 및 파일 이름 가져오기 (0) | 2023.09.16 |
[Android][Java] ConnectivityManager를 활용하여 현재 인터넷 상태 가져오기 (0) | 2023.09.06 |
[Android][Java] 카메라로 동영상 촬영하기 (0) | 2023.09.04 |
[Android][Java] WebRTC library 사용해서 원격 피어와 연결하기 (2) | 2023.08.21 |