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á
Trang 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
TP HồChí Minh, tháng 6 năm 2014
Trang 2LỜ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
Trang 3LỜI CẢM ƠN
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
Trang 4NHẬN XÉT (Của giảng viên)
………
………
………
………
………
………
………
………
………
………
………
………
Giảng viên (Họ tên và chữ kí)
Trang 5MỤC LỤC
CHƯƠNG 1: TỔNG QUAN VỀ CHƯƠNG TRÌNH 5
1.1 Lý do chọn đề tài 5
1.2 Ý tưởng 5
1.3 Mục tiêu đề tài 5
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 6
2.1 Push notification trên ios 6
2.2 Push notification tren android 7
CHƯƠNG 3: XÂY DỰNG CHƯƠNG TRÌNH 11
3.1 phân tích yêu cầu 11
3.2 Triển khai hệ thống 11
3.3 thiết kế cơ sở dữ liệu 13
CHƯƠNG 4: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 18
4.1 Kế luận 18
4.2 Hướng phát triển 18
Trang 6CHƯƠ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 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
Trang 7CHƯƠ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:
- Giải thích quy trình trên:
Trang 8Ứ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
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
Trang 9GCM 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 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
Trang 10củ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ó 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
Trang 11nhắ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 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
Trang 123.1 phân tích yêu cầu
Danh sách các yêu cầu:
- 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:
Trang 13Giả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, 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
Trang 14 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 ết kế cơ sở dữ liệu ết kế cơ sở dữ liệu ơ sở dữ liệu ở dữ liệu ữ liệu ệu
Bảng application
ios_keystore_enterprise_production Longtext
ios_keystore_enterprise_dev Longtext
ios_keypass_enterprise_production String
Trang 15ios_keypass_enterprise_dev String
Bảng ApplicationUser
Bảng Device
Trang 16Bảng DeviceReport
Bảng DeviceReportDetail
Bảng PushSchedule
Bảng User
Trang 17Tên cột Kiểu dữ liệu
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ự
Trang 184.2 H ướng phát triển ng phát tri n ể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”