1
ĐẠI HỌC QUỐC GIA TP. HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA KHOA HỌC MÁY TÍNH
__________
TIỂU LUẬN MÔN HỌC:
ĐIỆN TOÁN ĐÁM MÂY
PUSH NOTIFICATION SYSTEM
Giảng viên hướng dẫn : PGS-TS NGUYỄN PHI KHỨ
Học viên thực hiện: NGUYỄN THỊ DIỄM AN
1
GVHD: PGS-TS Nguyễn Phi Khứ SVTH: Nguyễn Thị Diễm An CH1301075
2
TP. HồChí Minh, tháng 6 năm 2014
LỜI MỞ ĐẦU
Hiện nay xu hướng công nghệ đang chuyển dần từ PC sang điện thoại di
động, các ứng dụng ngày càng phát triển nhiều trên smartphone và từ đó cũng có
nhiều hệ điều hành support như android, ios, windowphone. Các nhà cung cấp hệ
điều hành này hỗ trợ tính năng đẩy tin nhắn về thiết bị thông qua device token của
mỗi máy. Thông thường mỗi ứng dụng (giả sử trong cùng một công ty) muốn đẩy
thông báo về máy thì thường làm tính năng riêng biệt đó trong mỗi ứng dụng, điều
này sẽ làm lặp đi lặp lại các các chức năng đó. “Push notification system” đáp ứng
được việc cung cấp dịch vụ đẩy thông báo về các ứng dụng.
Hiện tại push notification system chỉ mới nghiên cứu đến mức độ là sơ đồ hệ
thống, thiết kế cơ cơ sở dữ liệu và các kỹ thuật liên quan để xây dựng hệ thống này
vì em muốn phát triển nó làm đề tài luận văn sau này.
2
GVHD: PGS-TS Nguyễn Phi Khứ SVTH: Nguyễn Thị Diễm An CH1301075
3
LỜI CẢM ƠN
3
GVHD: PGS-TS Nguyễn Phi Khứ SVTH: Nguyễn Thị Diễm An CH1301075
Lời đầu tiên em muốn bày tỏ sự cảm ơn sâu sắc của mình tới PGS.TS. Nguyễn
Phi Khứ giảng viên bộ môn Điện Toán Đám Mây, trường Đại học Công Nghệ Thông
Tin, ĐHQG – Tp.HCM đã hướng dẫn chúng em cũng như chia sẽ những kinh nghiệm
của thầy. Trong thời gian học, em đã tiếp thu nhiều kiến thức bổ ích để hoàn thành bài
tiểu luận này.
Em rất mong nhận được sự đóng góp ý kiến của thầy và các bạn để đề tài có thể
hoàn thiện hơn.
Em xin chân thành cảm ơn!
Tp Hồ Chí Minh, tháng 06 năm 2014
Học viên: Nguyễn Thị Diễm An
4
NHẬN XÉT
(Của giảng viên)
……………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………………………………………
………………………………………………
Giảng viên
(Họ tên và chữ kí)
4
GVHD: PGS-TS Nguyễn Phi Khứ SVTH: Nguyễn Thị Diễm An CH1301075
5
MỤC LỤC
CHƯƠNG 1: TỔNG QUAN VỀ CHƯƠNG TRÌNH
1.1 Lý do chọn đề tài
Công nghệ thông tin ngày càng phát triển, và ứng dụng ngày nay chủ yếu
xây dựng trên nền điện thoại di động, xu hướng điện thoại thay cho PC ngày càng
mạnh mẽ. Nhu cầu quảng cáo các ứng dụng của mình ngày càng đòi hỏi, mạng xã
hội cũng phát triển mạnh do nhu cầu kết nối người dùng. Để người dùng có thể thấy
ngay được tin nhắn khi ứng dụng đang tắt hoặc để các nhà phát triển muốn đẩy một
thông tin nào xuống máy, hoặc quảng cáo các ứng dụng khác, thì hệ điều hành ios
và android có cung cấp thư viện đẩy thông báo, tuy nhiên số lượng kết nối tới apple
và google là có giới hạn. Như vậy làm sao để có thể đẩy lượng thông báo là lớn
nhất và hiệu quả nhất nằm trong giới hạn của google và apple cho phép. Và “push
5
GVHD: PGS-TS Nguyễn Phi Khứ SVTH: Nguyễn Thị Diễm An CH1301075
6
notification system” có thể đáp ứng được nhu cầu đó.
1.2 Ý tưởng
Từ lý do trên mà em đi xây dựng push notification system với chức năng là
có thể push quảng cáo hoặc push cập nhật ứng dụng (từ addmin)… hoặc push giữa
các người dùng từ yêu cầu của server app (server của một ứng dụng nào đó).
1.3 Mục tiêu đề tài
Mục tiêu đề tài là cung cấp một cloud chuyên về push notification cho một
công ty hoặc rộng hơn là cung cấp cho nhiều công ty mà muốn sử dụng dịch vụ
này.
6
GVHD: PGS-TS Nguyễn Phi Khứ SVTH: Nguyễn Thị Diễm An CH1301075
7
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT
2.1 Push notification trên ios
Khi ứng dụng bị tắt hoặc không hoạt động mà lúc đó người dùng lại có tin
nhắn mới hoặc cái thông báo mới gì đó thì làm sao ứng dung có thể biết được. May
mắn thay, apple cung cấp chức năng push notification. Phần phía máy chủ của ứng
dụng có thể làm chức năng này đó là kết nối với apple cloud để đầy thông báo về
người dùng. Nhưng khi xây dựng hệ thông push notification thì thay vì máy chủ của
ứng dụng kết nối với apple cloud thì nó kết nối với hệ thống của mình, và từ hệ
thống này mình push thông báo về ứng dụng thông qua apple cloud. Các thành phần
có thể gửi qua thông báo bao gồm: Một tin nhắn văn bản ngắn, âm thanh báo, thiết
lập một số dữ liệu kèm theo.
- Quá trình đẩy thông báo của apple như sau:
7
GVHD: PGS-TS Nguyễn Phi Khứ SVTH: Nguyễn Thị Diễm An CH1301075
8
- Giải thích quy trình trên:
Ứng dụng muốn nhận được thông báo thì phải đăng ký với ios.
Hệ điều hành xin APNS server một device token, và device token này được
gửi về cho ứng dụng.
Các ứng dụng sẽ gửi cái device token mà nó nhận được ở trên lên server app
của nó.
Khi có một số điều gì đó xảy ra liên quan đến ứng dụng thì server app sẽ gửi
một thông báo tới dịch vụ thông báo push của App (APN).
APN sẽ gửi thông báo đến thiệt bị của người dùng.
- Những điều cần thiết cho việc đẩy thông báo:
Cần một chiếc iphone, hoặc ipad
Có một AppId
8
GVHD: PGS-TS Nguyễn Phi Khứ SVTH: Nguyễn Thị Diễm An CH1301075
9
Máy phải được kết nối internet
- Nội dung của một thông báo:
Máy chủ có trách nhiệm tạo ra các thông báo. Một thông báo bao gồm
device token, một payload, và một số bit, byte khác.
Máy chủ nên tạo một payload dạng Json. Một payload đơn giản như sau:
{
"APS":
{
"alert": "Xin chào!",
"sound": "default"
}
}
Kích thước của payload không được vượt quá 256 byte
2.2 Push notification tren android
GCM (Google Cloud Messaging) là một dịch vụ cho phép gửi dữ liệu từ máy
chủ của đển thiết bị hỗ trợ Android của người dùng, và cũng để nhận tin nhắn từ các
thiết bị trên cùng một kết nối. Dịch vụ GCM xử lý mọi khía cạnh của hàng đợi tin
nhắn và gửi tin nhắn đến các mục tiêu ứng dụng Android chạy trên thiết bị mục
tiêu.
GCM là một dịch vụ miễn phí,. Giới hạn dữ liệu lên đến 4KB (dữ liễu khá
lớn so với.
- Đặc điểm chính của GCM:
Nó cho phép các máy chủ ứng dụng của bên thứ ba (server app chằng hạn) để
gửi tin nhắn đến các ứng dụng Android của bên thứ ba đó.
Bằng cách kết nối và sử dụng máy chủ GCM, ứng dụng có thể nhận tin nhắn.
Một ứng dụng Android trên một thiết bị Android không cần phải chạy để nhận
tin nhắn. Hệ thống sẽ đánh thức những ứng dụng Android thông qua phát sóng khi
9
GVHD: PGS-TS Nguyễn Phi Khứ SVTH: Nguyễn Thị Diễm An CH1301075
10
tin nhắn đến, miễn là ứng dụng được thiết lập và có kết nối internet.
GCM chỉ đơn giản là đi thông điệp dữ liệu thô nhận thẳng vào ứng dụng
Android, trong đó ứng dụng có toàn quyền kiểm soát như thế nào để xử lý nó. Ví
dụ, các ứng dụng có thể gửi một thông báo, hiển thị một giao diện tùy chỉnh, hoặc
dữ liệu âm thầm đồng bộ.
Nó đòi hỏi các thiết bị chạy Android 2.2 hoặc cao hơn hoặc một trình giả lập
chạy Android 2.2 với các API của Google.
- Kiến trúc GCM:
Google cung cấp máy chủ kết nối GCM có tin nhắn từ một máy chủ ứng dụng
của bên thứ ba và gửi các tin nhắn đến một ứng dụng Android. Hiện tại, Google
cung cấp cho các máy chủ kết nối cho HTTP và XMPP .
Các máy chủ của hãng thứ ba là một thành phần thực hiện để làm việc với máy
chủ kết nối GCM. Máy chủ ứng dụng gửi tin nhắn đến một máy chủ kết nối GCM,
các enqueues máy chủ kết nối và lưu trữ các tin nhắn, và sau đó gửi nó đến thiết bị
khi thiết bị đang trực tuyến.
Để nhận tin nhắn GCM, ứng dụng này phải đăng ký với GCM và có được một
ID đăng ký. Nếu đang sử dụng XMPP (CCS) máy chủ kết nối, ứng dụng client có
10
GVHD: PGS-TS Nguyễn Phi Khứ SVTH: Nguyễn Thị Diễm An CH1301075
11
thể gửi tin nhắn "ngược dòng" lại cho máy chủ kết nối.
- Gửi tin nhắn, đây là chuỗi các sự kiện xảy ra khi máy chủ ứng dụng gửi một thông
điệp:
Các máy chủ ứng dụng gửi một thông điệp đến các máy chủ GCM.
Đưa vào hang đợi và lưu trữ các tin nhắn trong trường hợp thiết bị đang ẩn.
Khi điện thoại được trực tuyến, Google sẽ gửi tin nhắn tới các thiết bị.
Trên thiết bị, hệ thống chương trình phát sóng tin nhắn tới các ứng dụng
Android với các điều khoản thích hợp, để chỉ những ứng dụng Android nhắm mục
tiêu nhận được tin nhắn.điều này đánh thức các ứng dụng Android lên. Ứng dụng
Android không cần phải được chạy trước để nhận được thông báo( có nghĩa là ứng
dụng bị tắt cũng có thể nhận được tin nhắn, miễn sao có kết nối internet).
Ứng dụng Android xử lý thông báo theo cách nó muốn.
Một ứng dụng Android có thể hủy đăng ký GCM nếu nó không còn muốn nhận
tin nhắn.
- Một số thông số trong tin nhắn: (dạng HTTP)
registration_ids: một mảng các thiết bị mà được nhận tin nhắn. ít nhất là 1 và
nhiều nhất là 1000
collapse_key: chuỗi tùy ý để phân nhóm các tin nhắn dạng bị ẩn, và chỉ có tin
nhắn cuối cùng được gửi đến client, việc này tránh gửi quá nhiều khi điện thoại hoạt
động trở lại.
data: sử dụng dạng đối tượng json. Ví dụ: "data":{"score":"3x1"}
delay_while_idle: nếu có, chỉ ra rằng tin nhắn sẽ không được gửi ngay nếu thiết
bị bị idle, máy chủ sẽ đợi cho thiết bị hoạt đông trở lại và sau đó tin nhắn cuối củng
11
GVHD: PGS-TS Nguyễn Phi Khứ SVTH: Nguyễn Thị Diễm An CH1301075
12
của collapse_key sẽ được gửi đến ngay
time_to_live: thời gian mà tin nhắn được lưu trữ trong GCM, mặc định là 4 tuần.
restricted_package_name: tên gói ứng dụng. Khi thiết lập, tin nhắn sẽ được gửi
đến ID đăng ký phù hợp với tên gói. Tùy chọn
dry_run: Nếu có, cho phép các nhà phát triển để kiểm tra yêu cầu của họ mà
không thực sự gửi một thông điệp. Tùy chọn.
CHƯƠNG 3: XÂY DỰNG CHƯƠNG TRÌNH
3.1 phân tích yêu cầu
Danh sách các yêu cầu:
12
GVHD: PGS-TS Nguyễn Phi Khứ SVTH: Nguyễn Thị Diễm An CH1301075
13
- Thiết kế và xây dựng cơ sở dữ liệu (có thể là slq hoặc noslq)
- Xây dựng api để cung cấp cho client, và api cung cấp cho server app.
- Xây dựng trang admin để quản lý vấn để push.
- Xây dựng “lookup api queue to DB” để lưu thông tin về client
- Xây dựng “lookup queue out to DB” để lưu report từ google cloud và apple cloud.
- Xây dựng schedule job để thăm dò từ DB xem đã tới thời gian push chưa.
- Xây dựng các hang đợi “Api queue in”, “google queue in”, “apple queue in”,
“queue out”.
3.2 Triển khai hệ thống
Hệ thống được triển khai như mô hình sau đây:
13
GVHD: PGS-TS Nguyễn Phi Khứ SVTH: Nguyễn Thị Diễm An CH1301075
14
Giải thích vể mô hình push notification:
- Push theo yêu cầu từ web admin
• Client gửi thông tin về thiết bị như device token (để push), sex, age, level (những
thông tin làm tiêu chí push) … sau khi gửi lên server qua API mà server cung cấp,
14
GVHD: PGS-TS Nguyễn Phi Khứ SVTH: Nguyễn Thị Diễm An CH1301075
15
thì dữ liệu sẽ được đưa vào hang đợi “Api queue in”. khi đó ở khu vực Web admin
sẽ có một woker “Lookup api queue to DB” làm nhiệm vụ lấy data từ “Api quque
in” và lưu vào DB.
• Từ trang web admin, sẽ có các yêu cầu như vào thời điểm A, push cho những
người chơi game B theo các tiêu chí như độ tuổi, gioi tính, level … với nội dung C
nào đó. Lúc này có một con “schedule job” làm nhiệm vụ là thăm dò DB xem yêu
cầu của admin đã tới giờ chưa, nếu tới giờ rồi nó sẽ lấy những thông tin liên quan
để push thông báo xuống client. Thông tin cần thiết như là key app, device token,
nội dung, tiêu chí push… khi nó lấy thông t in lên rồi, nó sẽ tạo data và đưa vào
hang đợi “google queue in” hoặc “apple queue in” tùy vào device thuộc loại nào.
Sau đó sẽ có 1 con woker làm nhiệm vụ lấy data từ hang đợi “google queue in” và
“apple queue in” và đẩy lên google cloud và apple cloud.
• Sau khi gửi lên apple cloud và google cloud, nó sẽ push tin nhắn về device. Và có
report liên quan, nếu thất bại thì dữ liệu sẽ đưa và queue out và save vào DB dể
report bao nhiêu thành công, bao nhiêu thất bại.
- Push theo yêu cầu từ server app
• Khi server app gửi tin nhắn cần push, thì nó phải có đầy đủ thông tin push key app,
android hay ios, device token, nội dung… khi đó thông tin này sẽ được đưa vào
hang đợi “google queue in” và “apple queue in”, từ đó có 1 woker làm nhiệm vụ
đẩy nó lên google cloud và apple cloud. Từ đó client sẽ nhận được tin nhắn. và có
report thông báo có bao nhiêu thành công và thất bại.
3.3 thiết kế cơ sở dữ liệu
Bảng application
Tên cột Kiểu dữ liệu
id Long
app_name String
android_key Longtext
ios_keystore_production Longtext
ios_keystore_dev Longtext
15
GVHD: PGS-TS Nguyễn Phi Khứ SVTH: Nguyễn Thị Diễm An CH1301075
16
ios_keystore_enterprise_production Longtext
ios_keystore_enterprise_dev Longtext
ios_keypass_production String
ios_keypass_dev String
ios_keypass_enterprise_production String
ios_keypass_enterprise_dev String
create_by String
create_on Date
secret_key String
Bảng ApplicationUser
Tên cột Kiểu dữ liệu
Id Long
application Long (id của bảng application)
user Long (id của bảng user)
Bảng Device
Tên cột Kiểu dữ liệu
id Long
application Long (id của bảng application)
device_token String
os String
server_id String
char_level int
16
GVHD: PGS-TS Nguyễn Phi Khứ SVTH: Nguyễn Thị Diễm An CH1301075
17
gender String
version String
username String
os_version String
create_on Date
update_on Date
Bảng DeviceReport
Tên cột Kiểu dữ liệu
id Long
create_on Date
total Long
fail Long
pushSchedule Long (id của bảng pushSchedule)
Bảng DeviceReportDetail
Tên cột Kiểu dữ liệu
id Long
create_on Date
description String
deviceReport Long (id của bảng deviceReport)
device Long (id của bảng device)
Bảng PushSchedule
17
GVHD: PGS-TS Nguyễn Phi Khứ SVTH: Nguyễn Thị Diễm An CH1301075
18
Tên cột Kiểu dữ liệu
id Long
schedule_name String
application Long (id của bảng application)
time Date
create_on Date
Bảng User
Tên cột Kiểu dữ liệu
id Long
username String
first_name String
last_name String
password String
create_on Date
role_user int
enabled bit
18
GVHD: PGS-TS Nguyễn Phi Khứ SVTH: Nguyễn Thị Diễm An CH1301075
19
CHƯƠNG 4: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN
4.1 Kế luận
Hệ thống này em muốn phát triển lên thành luận văn nên em chỉ mới xây
dựng được mô hình hệ thống, thiết kế được cơ sở dữ liệu dạng mysql.
Tìm hiểu các kỹ thuật liên quan để xây dựng hệ thống như spring framework,
rabbitmq, javaPns, GCM, hibernate framework, các woker….
Em mong muốn được sự góp ý của thầy về hệ thống này để có thể đáp ứng
được tiêu chuẩn của một luận văn thực sự.
4.2 Hướng phát triển
Push notification system hiện đang con dở dang, còn phải hoàn thiện hết
danh sách yêu cầu đặt ra như:
- Xây dựng api để cung cấp cho client, và api cung cấp cho server app.
- Xây dựng trang admin để quản lý vấn để push.
- Xây dựng “lookup api queue to DB” để lưu thông tin về client
- Xây dựng “lookup queue out to DB” để lưu report từ google cloud và apple cloud.
- Xây dựng schedule job để thăm dò từ DB xem đã tới thời gian push chưa.
- Xây dựng các hang đợi “Api queue in”, “google queue in”, “apple queue in”,
“queue out”.
19
GVHD: PGS-TS Nguyễn Phi Khứ SVTH: Nguyễn Thị Diễm An CH1301075