Xây dựng ứng dụng ChatApp partI

Khi xây dựng ứng dụng Android, chúng ta thường phải thực hiện các giao tiếp với server như đăng kí, đăng nhập, gửi tin nhắn. NodeJs và SocketIO là một công cụ cực kì đơn giản và hữu ich để xây dựng server. Khi xây dựng các ứng dụng ChatApp hay Push Notification thì NodeJs luôn là lựa chọn đầu tiên của tôi. Ở bài viết này, tôi chỉ đi sâu vào cách giao tiếp đơn giản giữa Android và NodeJs là gửi nhận tin nhắn, ở các bài viết sau, tôi sẽ hướng dẫn xây dựng các ứng dụng ChatApp, Push Notification, và sử dụng database là MongoDB cực kì đơn giản và dễ sử dụng

  1. Xây dựng server NodeJS Đây là code server nodejs server.js:
// server.js
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

app.get('/', function (req, res){
  res.sendfile('index.html');
});

io.on('connection', function (socket) {
  socket.on('login', function (name) {
    console.log(name + "login");
    socket.emit('login_ok', name + "login ok");
  });
});

http.listen(3000, function(){
  console.log('listening on *:3000');
});

Chạy server ở cổng 3000, lắng nghe các sử kiện login và gửi tin nhắn ngược trở lại để thông báo đã login thành công.

io.on('connection', function (socket) {
  socket.on('login', function (name) {
      console.log(name + "login");
    socket.emit('login_ok', name + "login ok");

  });
});

Để chạy server chạy lệnh

> node server.js
  1. Xây dựng client Android Đầu tiên, bạn thêm thư viện SocketIO vào file build.grable
dependencies {
    compile 'com.github.nkzawa:socket.io-client:0.3.0'
}

Tiếp theo thêm quyền truy cập Internet vào file AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET" />

<uses-permission android:name="android.permission.INTERNET" />

Trong file MainActivity.java, khai báo biến mSocket

 private Socket mSocket;
    {
        try {
            mSocket = IO.socket("http://192.168.1.73:3000");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 private Socket mSocket;
    {
        try {
            mSocket = IO.socket("http://192.168.1.73:3000");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Ở đây, http://192.168.1.73:3000 chính là địa chỉ Ip của máy, lắng nghe server ở cổng 3000. Bạn có thể tìm địa chỉ ip của máy bằng cách vào cmd và gõ ipconfig, địa chỉ ip của máy nằm ở mục IP4 Address.

Kết nối với server và gửi tin nhắn login

 mSocket.connect();
 mSocket.emit("login", "Thomas Codd");
 mSocket.connect();
 mSocket.emit("login", "Thomas Codd");

Để nhận tin nhắn từ phía server, ta dùng

mSocket.on("login_ok", onLogin);
mSocket.on("login_ok", onLogin);

private Emitter.Listener onLogin = new Emitter.Listener() {
        @Override
        public void call(Object... args) {
            String message = args[0].toString();
            Log.d("message", message);
        }
    };

private Emitter.Listener onLogin = new Emitter.Listener() {
        @Override
        public void call(Object... args) {
            String message = args[0].toString();
            Log.d("message", message);
        }
    };

Đây là file MainActivity.java hoàn chỉnh

// MainActivity.java
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import com.github.nkzawa.socketio.client.IO;
import com.github.nkzawa.socketio.client.Socket;
import com.github.nkzawa.emitter.Emitter;

public class MainActivity extends Activity {

    private Socket mSocket;
    {
        try {
            mSocket = IO.socket("http://192.168.1.73:3000");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private Emitter.Listener onLogin = new Emitter.Listener() {
        @Override
        public void call(Object... args) {
            String message = args[0].toString();
            Log.d("message", message);
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mSocket.connect();
        mSocket.emit("login", "Thomas Codd");
        mSocket.on("login_ok", onLogin);
    }
}

Chạy chương chình để thấy sự tương tác giữa Android và NodeJs.

All Rights Reserved