'smack 4.3.0'에 해당되는 글 1건

728x90

SMACK 4.3.0 으로 OpenFire Server 에 로그인하는 기능을 적어둔다.

4.1.0 으로 해도 에러가 발생하고 ... 엄청난 삽질을 하고서 겨우 제대로 로그인되는 걸 확인했다.


build.gradle

repositories {
    maven {
        url 'https://oss.sonatype.org/content/repositories/snapshots'
    }
    mavenCentral()
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation 'com.android.support:recyclerview-v7:27.1.1'
    implementation 'gun0912.ted:tedpermission:2.0.0'
    implementation 'com.google.code.gson:gson:1.7.2'
    implementation "org.igniterealtime.smack:smack-tcp:4.3.0"
    implementation "org.igniterealtime.smack:smack-extensions:4.3.0"
    implementation "org.igniterealtime.smack:smack-experimental:4.3.0"
    implementation ("org.igniterealtime.smack:smack-android:4.3.0"){
        exclude module:'smack-omemo'
        exclude module:'smack-omemo-signal'
    }
}
 



로그인이 성공되어야 채팅 기능을 만드는 걸 해볼 수 있는데 smack 4.2.0 으로 테스트하면 로그인에서 거부당한다.

아래 코드는 로그인이 성공적으로 잘 되는 걸 확인했으며, 동영상 예제를 따라하면서 적은 코드를 수정 보완한 것이라고 보면 된다.

따라서 구글링으로 검색된 다른 코드와는 약간 다르다. 즉 확장성이 떨어질 수 있다는 말이다.

로그인이 성공적으로 동작되도록 하는 코드라고 이해하면 된다.


Anroid 8.0에서 테스트를 했으며, 보안 강화로 IP주소를 직접 적으면 동작에 오류가 발생하는 거 같다.


private String loginURL = "abc.com"; // IP주소 적으면 오류 발생함 (The public/private ip address don't work)
private AbstractXMPPConnection mConnection;

public static final String TAG = MainActivity.class.getSimpleName();


private void setConnection() {
    // Create the configuration for this new connection
    new Thread() {
        @Override
        public void run() {
            StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
            StrictMode.setThreadPolicy(policy);

            InetAddress addr = null;
            try {
                addr = InetAddress.getByName(loginURL);
                Log.e(TAG,"addr : "+addr);
            } catch (UnknownHostException e) {
                e.printStackTrace();
            }
            HostnameVerifier verifier = new HostnameVerifier() {
                @Override
                public boolean verify(String hostname, SSLSession session) {
                    return false;
                }
            };
            DomainBareJid serviceName = null;
            try {
                serviceName = JidCreate.domainBareFrom(loginURL);
                Log.e(TAG,"serviceName : "+serviceName);
            } catch (XmppStringprepException e) {
                e.printStackTrace();
            }
            SmackConfiguration.DEBUG = true;
            XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()
                    //.setUsernameAndPassword("test02", "test1234")
                    .setPort(5222)
                    .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
                    .setXmppDomain(serviceName)
                    .setHostnameVerifier(verifier)
                    .setHostAddress(addr)
                    //.setDebuggerEnabled(true) // smack 4.3.0 error, smack 4.2.0 ok
                    .setSendPresence(true)
                    .build();

            SASLAuthentication.blacklistSASLMechanism("SCRAM-SHA-1");
            SASLAuthentication.blacklistSASLMechanism("DIGEST-MD5");
            SASLAuthentication.unBlacklistSASLMechanism("PLAIN");
            mConnection = new XMPPTCPConnection(config);
            mConnection.setReplyTimeout(10000);

            // Connect to the server
            try {
                Log.e(TAG,"mConnection.connect try");
                mConnection.connect();               
                mConnection.login("test01", "test1234");
                if (mConnection.isAuthenticated() && mConnection.isConnected()) {
                    // message send and receive code here.
                    Log.e(TAG,"run auth done and connected successfully");                    
                } else{
                    Log.e(TAG,"connected fail");
                }

            } catch (SmackException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (XMPPException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }.start();
}



참고 사이트(reference)


'openfire' 카테고리의 다른 글

CentOS 6.6에 openfire 4.2.3 설치  (0) 2018.09.21
블로그 이미지

Link2Me

,