iOS Hệ điều hành dành cho các thiết bị di động của Apple iOS SDK iOS Software Development Kit – bộ công cụ phát triển ứng dụng dành cho hệ điều hành iOS iPhone Mẫu điện thoại di động rất
Trang 1KƯƠNG ÁNH HOÀNG
PHÁT TRIỂN DỊCH VỤ GỬI NHẬN THÔNG BÁO TỰ ĐỘNG VÀ XÂY DỰNG HỆ THỐNG
BẢO VỆ ỨNG DỤNG CHO IPHONE
LUẬN VĂN THẠC SĨ KHOA HỌC
NGƯỜI HƯỚNG DẪN: TS NGUYỄN KIM KHÁNH
HÀ NỘI – 2010
Trang 21
Lời cảm ơn
Luận văn nghiên cứu phát triển ứng dụng trên nền điện thoại iPhone được hoàn thành với sự giúp đỡ tận tình của thày giáo hướng dẫn TS Nguyễn Kim Khánh, Viện Công nghệ Thông Tin và Truyền Thông, Trường ĐH Bách Khoa Hà Nội Tôi cũng xin chân thành càm ơn tập đoàn France Telecom đã tạo điều kiện cho tôi được sang thực tập và làm viêc trong môi trường hiện đại của tập đoàn, được tiếp xúc với nhiều công nghệ mới và các chuyên gia giàu kinh nghiệm, đặc biệt là anh Fehmi Toumi tại Orange Lab Issy les Moulenaux
Xin chân thành cảm ơn Viện Công nghệ Thông tin và Truyền thông, Viện ĐT Sau Đại học trường Đại học Bách Khoa Hà Nội đã tạo điều kiện cho tôi thoàn thành luận văn này
Trang 32
Lời cam đoan
Họ và tên: Lương Ánh Hoàng
Ngày sinh: 23/07/1985
Ngành học: Xử lý thông tìn và truyền thông, Viện CNTT và TT
Khóa: 2008-2010
Tên luận văn: Phát triển dịch vụ gửi nhận thông báo tự động và xây dựng
hệ thống bảo vệ ứng dụng cho iPhone
Người hướng dẫn: TS Nguyễn Kim Khánh
Tôi – Lương Ánh Hoàng - xin cam đoan mình là tác giả của toàn bộ nội dung luận văn này, không sao chép toàn văn bất kỳ luận văn, văn bản nào khác Tôi xin chịu mọi trách nhiệm nếu có sai sót
Hà Nội, ngày 30 tháng 10 năm 2010
Người cam đoan
Lương Ánh Hoàng
Trang 43
Mục lục
Chương 1 Tổng quan 10
1.1 Lý do chọn đề tài 10
1.2 Lịch sử phát triển 11
1.3 Những luận điểm cơ bản và đóng góp mới 13
1.4 Phương pháp nghiên cứu 13
Chương 2 Phát triển dịch vụ gửi nhận thông báo tự động cho ứng dụng chạy trên iPhone 15
2.1 Đặt vấn đề 16
2.2 Sơ lược về hệ điều hành iPhone OS (iOS ) 18
2.3 Dịch vụ Push Notification 20
2.3.1 Kiến trúc 21
2.3.2 Tiếp nhận phản hồi từ APNS 22
2.3.3 Cơ chế an ninh 22
2.3.4 Quá trình đưa tin 24
2.3.5 Quá trình nhận tin 25
2.4 Tích hợp dịch vụ Push Notification cho hệ thống iPhoneAcademy 26
2.4.1 Xây dựng nguồn tin 26
2.4.2 Xây dựng ứng dụng nhận tin trên thiết bị 34
2.5 Kết luận 38
Chương 3 Xây dựng hệ thống bảo vệ ứng dụng cho iPhone – iPhone Authorization Framework 39
3.1 Quy trình phát triển ứng dụng cho iOS 40
Trang 54
3.2 Giải pháp bảo vệ ứng dụng và dịch vụ 42
3.2.1 Kiến trúc hệ thống 43
3.2.2 Kịch bản cấp phát chứng thực 44
3.3 Xây dựng hệ thống 45
3.3.1 Xây dựng Certificate Authority 46
3.3.2 Cài đặt MySQL và thiết kế cơ sở dữ liệu 51
3.3.3 Cài đặt Apache/PHP 55
3.3.4 Phát triển tính năng cấp phát chứng thực bằng PHP 55
3.3.5 Bảo vệ ứng dụng trên thiết bị 62
3.3.6 Bảo vệ dịch vụ khỏi các truy nhập trái phép 75
3.3.7 Xây dựng giao diện quản trị hệ thống 78
3.4 Kết luận 87
Chương 4 Kết luận 88
4.1 Những kết quả mới 88
4.2 Đề xuất 88
Tài liệu tham khảo 90
Trang 65
Danh mục hình
Hình 1 Mô hình Client - Server 16
Hình 2 Hệ điều hành iOS 19
Hình 3 Các tầng của iOS 20
Hình 4 Một bản tin Push 21
Hình 5 Mô hình APNs với một thiết bị 21
Hình 6 Mô hình APNs với nhiều nguồn tin và nhiều thiết bị 22
Hình 7 Quá trình thiết lập kết nối giữa thiết bị và APNs 23
Hình 8 Quá trình thiết lập kết nối giữa nguồn tin và APNs 23
Hình 9 Quá trình sinh device token 24
Hình 10 Gửi tin đến thiết bị 25
Hình 11 Kiến trúc nguồn tin 27
Hình 12 Bảng devicetokens 28
Hình 13 Định dạng dữ liệu gửi đến APNs 29
Hình 14 Bản tin khi hiển thị trên thiết bị 31
Hình 15 Ứng dụng iPhoneAcademy 35
Hình 16 Bản tin Push của iPhoneAcademy 38
Hình 17 Quy trình phát triển ứng dụng cho cá nhân 41
Hình 18 Quy trình phát triển ứng dụng cho doanh nghiệp 42
Hình 19 Kiến trúc hệ thống bảo vệ ứng dụng 43
Hình 20 Kịch bản cấp phát chứng thực cho thiết bị 44
Hình 21 Quy trình sinh chứng thực tại hệ thống 49
Hình 22 Chứng thực được cấp cho thiết bị 50
Hình 23 Giao diện Xcode 63
Hình 24 Vòng đời của một ứng dụng 64
Hình 25 Cơ chế kiểm tra trên thiết bị 65
Hình 26 Màn hình lựa chọn khi thiết bị chưa có chứng thực hợp lệ 74
Hình 27 Màn hình xin cấp phát chứng thực 74
Trang 76
Hình 28 Màn hình nhập mã an toàn trước khi tải chứng thực về thiết bị 75
Hình 29 Chuyển đổi sang các giao thức hỗ trợ PKI 75
Hình 30 Các chức năng của giao diện quản trị hệ thống 78
Hình 31 Giao diện trang chủ 81
Hình 32 Giao diện danh sách người dùng 82
Hình 33 Giao diện thêm mới người dùng 83
Hình 34 Giao diện sửa/xóa người dùng 84
Hình 35 Danh sách ứng dụng 84
Hình 36 Giao diện thêm mới ứng dụng 85
Hình 37 Giao diện sửa/xóa ứng dụng 85
Hình 38 Giao diện thêm thiết bị mới 86
Hình 39 Giao diện danh sách thiết bị 86
Hình 40 Giao diện cấp phép từ chối 87
Trang 87
Danh sách thuật ngữ
Apache Tên một phần mềm máy chủ HTTP miễn phí và mã
nguồn mở
APNs Apple Push Notification service – dịch vụ đẩy thông
báo của Apple
APNS Apple Push Notification Server – máy chủ chạy dịch
vụ đẩy thông báo của Apple App Store Quầy ứng dụng trực tuyến của Apple
Certificate Chứng thực số, đây là một tệp tin được mã hóa dưới
dạng X509 bao gồm các thông tin:khóa công khai, tên chủ thể, thời hạn, địa chỉ URL của trung tâm thu hồi chứng thực
CA Viết tắt của Certificate Authority
Certificate Authority Cơ quan cấp chứng thực số
Developer Certificate Chứng thực số dành cho lập trình viên cá nhân của
Apple
device token Một chuỗi chữ số hexa duy nhất dùng để phân biệt
các thiết bị trong hệ thống APNs
Enterprise Certificate Chứng thực số dành cho doanh nghiệp của Apple
HTTP Hyper Text Transfer Protocol – giao thức truyền dữ
liệu siêu văn bản
iOS Hệ điều hành dành cho các thiết bị di động của Apple iOS SDK iOS Software Development Kit – bộ công cụ phát
triển ứng dụng dành cho hệ điều hành iOS iPhone Mẫu điện thoại di động rất nổi tiếng của Apple với
thiết kế tinh tế, cấu hình mạnh và giao diện thân
Trang 98
thiện
iPhoneAcademy Hệ thống cộng tác dành cho các lập trình viên iPhone
tại Orange Labs
iPhone Authorization
Framework
Hệ thống bảo vệ ứng dụng chạy trên nền iPhone
iTune Ưng dụng đa năng của Apple bao gồm : nghe nhạc,
xem phim, tải ứng dụng, đồng bộ hóa với các thiết bị…
Mac OS X Hệ điều hành phiên bản thứ 10 của Apple
MySQL Một hệ quản trị CSDL mã nguồn mở rất thông dụng Object-C Ngôn ngữ lập trình hướng đối tượng do Apple phát
triển
OpenSSL Công cụ mã nguồn mở xử lý các vấn đề liên quan
đến hạ tầng khóa công khai
PHP Ngôn ngữ thông dịch được sử dụng rộng rãi trên các
dịch vụ web
PKI Public Key Infrastructure – Hạ tầng khóa công khai Private Key Khóa riêng, được giữ bí mật trong các giao dịch PKI Provider Nguồn tin, chịu trách nhiệm kết nối đến APNS và gửi
bản tin Push Push Notification Thông báo đẩy, đây là một bản tin được đẩy trực tiếp
và hiển thị trên thiết bị (giống như SMS nhưng hoạt động trên nền Internet)
Snow Leopard Hệ điều hành mới nhất trong họ Mac OS X của
Trang 109 xâu gồm 40 chữ số hexa dùng để phân biệt tất cả các thiết bị của Apple
Trang 1110
Chương 1 Tổng quan
Trong những năm gần đây, một xu thế điện toán mới nổi đang thu hút được rất nhiều sự chú ý của các tập đoàn, các tổ chức công ty lớn đó là điện toán di động Các hãng sản xuất điện thoại liên tiếp cho ra mắt các mẫu điện thoại mạnh mẽ nhiều tính năng, thiết kế mỏng và đẹp Song song với đó là các hệ điều hành cho thiết bị
di động cũng liên tiếp được giới thiệu với rất nhiều tính năng hấp dẫn và thu hút người tiêu dùng Một trong số đó là hệ điều hành iOS của Apple
Apple là một trong những hãng công nghệ lớn nhất thế giới Sự thành công đó có đóng góp một phần không nhỏ của sản phẩm chiến lược: chiếc điện thoại iPhone Ngay từ khi mới xuất hiện, nó đã thay đổi cả cách nhìn về chiếc điện thoại iPhone thực sự là một thiết bị di động thông minh, thay thế được nhiều công việc trước kia phải thực hiện trên máy tính Trải qua các phiên bản khác nhau, chiếc điện thoại iPhone càng ngày càng hoàn thiện và hiện nay, iPhone 4 là chiếc điện thoại thông minh có doanh số được bán cao nhất trong lịch sử Tính đên tháng 9/2010, tổng số điện thoại iPhone được phân phối trên toàn thế giới là 60 triệu chiếc
1.1 Lý do chọn đề tài
Có hai lý do chính tôi lựa chọn đề tài nghiên cứu phát triển ứng dụng cho iPhone Thứ nhất là từ sở thích cá nhân với hệ điều hành iPhone OS, định hướng của thày giáo hướng dẫn, cùng với kinh nghiệm đã phát triển ứng dụng cho iPhone OS trước
đó Thứ hai là do tài trợ của tập đoàn France Telecom cho việc thực tập tốt nghiệp luận văn, đề tài thực tập của tôi tại tập đoàn cũng có định hướng về phát triển ứng dụng cho iPhone
Trang 1211
Do vậy đề tài tôi chọn là: Phát triển dịch vụ gửi nhận thông báo tự động và xây
dựng hệ thống bảo vệ ứng dụng cho iPhone
Đề tài gồm hai phần lớn:
Phát triển tính năng gửi thông báo tự động dựa trên dịch vụ Apple Push Notification (đẩy thông báo) cho ứng dụng iPhoneAcademy iPhoneAcademy là một ứng dụng cộng tác được sử dụng trong tập đoàn France Telecom để trao đổi thông tin giữa các nhà phát triển iPhone trong cùng tập đoàn với nhau Về cơ bản nó hoạt động giống như một diễn đàn, bao gồm các chủ đề, các bản tin, mọi người có thể bình luận và trả lời….Ứng dụng chạy trên điện thoại iPhone Tuy nhiên điểm hạn chế của ứng dụng là người dùng phải kiểm tra bản tin mới một cách thủ công giống như kiểm tra thư điện tử Nhiệm vụ của phần này là sử dụng công nghệ đẩy thông báo (Push Notification) để chủ động gửi thông báo đến thiết bị mỗi khi có bản tin mới, và thiết bị sẽ thông báo cho người dùng như thể họ nhận được tin nhắn SMS qua mạng điện thoại di động
Xây dựng hệ thống bảo vệ ứng dụng chạy trên iPhone và dịch vụ cho tập đoàn Orange (France Telecom) Tập đoàn France Telecom có khá nhiều ứng dụng và dịch vụ chạy trên nền điện thoại (dự báo thời tiết, tin tức, truyền hình, thư điện tử, internet…) Nhiệm vụ của phần này là thiết kế một hệ thống kiểm soát thiết bị để: Chỉ những thiết bị được cho phép mới có quyền chạy ứng dụng, chỉ những thiết bị được cho phép mới có quyền sử dụng dịch
vụ nào đó của Orange Việc bảo vệ được thực hiện dựa trên hạ tầng khóa công khai (PKI)
1.2 Lịch sử phát triển
iPhone là mẫu điện thoại di động mới được Apple chính thức giới thiệu năm 2007
và ngay lập tức giành được thành công vang dội với doanh số hàng triệu bản bán ra chỉ trong quý đầu tiên phát hành Phiên bản đầu tiên của iPhone hoạt động trên mạng 2G và chạy hệ điều hành iPhone OS 1.0 Trải qua ba năm, Apple đã cho ra
Trang 1312
mắt 4 phiên bản iPhone: iPhone, iPhone 3G, iPhone 3GS, iPhone 4 Cùng với đó là
4 phiên bản chính hệ điều hành: iPhone OS 1.0, iPhone OS 2.0, iPhone OS 3.0 và iOS 4, cùng với đó là các bản nâng cấp nhỏ cho mỗi phiên bản chính của hệ điều hành Cứ định kì mỗi năm Apple lại cho ra mắt một phiên bản mới của iPhone với rất nhiều cải tiến và được giới công nghệ mong đợi Kể từ phiên bản hệ điều hành thứ hai, Apple bắt đầu mở cửa hệ điều hành, và cung cấp toàn bộ công cụ để phát triển ứng dụng cho iPhone: iPhone SDK Apple cũng xây dựng quầy ứng dụng trực tuyến (App Store), nơi người sử dụng có thể mua các ứng dụng từ bên thứ ba Môi trường phát triển ứng dụng Xcode đi kèm với iPhone SDK rất thân thiện và trực quan, không mất nhiều thời gian để có thể viết được chương trình đầu tiên chạy trên iPhone Các thư viện mạnh hỗ trợ lập trình viên khá nhiều Đó là những điểm chính thu hút giới lập trình viên tập trung phát triển ứng dụng cho iPhone, cho đến thời điểm viết luận văn, trong quầy ứng dụng trực tuyến của Apple đã có khoảng 250000 ứng dụng, một con số rất đáng nể Việc phát triển thêm những tính năng mới cho ứng dụng sẵn có, đồng thời tăng cường khả năng bảo vệ cho ứng dụng là hướng nghiên cứu trong nhóm phát triển iPhone tại Orange Labs tại Paris
Luận văn sẽ trình bày hai nội dung nghiên cứu chính:
Tích hợp dịch vụ Apple Push Notification vào hệ thống iPhoneAcademy của France Telecom
o Nghiên cứu và cài đặt cơ chế nhận và xử lý bản tin Push trên ứng dụng iPhoneAcademy client
o Nghiên cứu và xây dựng provider, kết nối đến máy chủ APN của Apple và gửi bản tin
Thiết kế giải pháp và xây dựng hệ thống bảo vệ ứng dụng và dịch vụ trên nền iPhone cho France Telecom
o Nghiên cứu và xây dựng hệ thống bảo vệ ứng dụng trên thiết bị
o Nghiên cứu cơ chế bảo vệ dịch vụ trên máy chủ phục vụ
Trang 141.3 Những luận điểm cơ bản và đóng góp mới
Những luận điểm cơ bản sẽ được trình bày trong luận văn:
Kiến trúc hệ điều hành iPhone OS
Kiến trúc dịch vụ Apple Push Notification
Những đóng góp mới:
Tích hợp Appe Push Notification vào hệ thống iPhoneAcademy
Thiết kế hệ thống bảo vệ ứng dụng và dịch vụ trên nền PKI
1.4 Phương pháp nghiên cứu
Do iPhone OS là hệ điều hành khá mới mẻ, công nghệ Apple Push Notification mới được giới thiệu năm 2008, nên số lượng tài liệu xuất bản không nhiều, chủ yếu được tham khảo từ tài liệu trong bộ công cụ SDK do Apple cung cấp và trên Internet Công cụ nghiên cứu:
Phần cứng:
o Máy tính iMac
o Thiết bị iPhone 3G, iPhone 4, iPod Touch 2G
Phần mềm
o Hệ điều hành Snow Leopard 10.6.2 của Apple
o Hệ điều hành iPhone OS 3.0 và iOS 4
o Bộ công cụ phát triển iPhone SDK 3.2.3 và Xcode 3
o Phần mềm máy chủ:Apache HTTP Server
o Phần mềm thông dịch: PHP 5.3.2
o Phần mềm quản trị cơ sở dữ liệu: MySQL 5.1.32
Trang 1615
Chương 2 Phát triển dịch vụ gửi nhận thông báo
tự động cho ứng dụng chạy trên iPhone
Chương này sẽ trình bày kiến trúc cơ bản của dịch vụ Push Notification và phương
pháp tích hợp vào một hệ thống cụ thể : iPhone Academy
Trang 1716
2.1 Đặt vấn đề
Dịch vụ Push đã có lịch sử phát triển trên nền máy tính cá nhân từ khá lâu Tuy nhiên việc triển khai trên thiết bị di động thì khá hạn chế do sự phát triển của các thiết bị di động mới chỉ bùng nổ trong những năm gần đây Về cơ bản hầu hết dịch
vụ trên Internet hoạt động theo mô hình Client – Server Client là thiết bị cuối nơi người dùng sử dụng Client sẽ gửi truy vấn đến Server, Server nhận được sẽ đáp trả Client bằng một phản hồi tương ứng Đó là cách ta thường thấy trong dịch vụ HTTP Nếu Server muốn chủ động gửi cho Client một thông tin nào đó, nó sẽ không có cách nào khác là đợi Client gửi truy vấn đến rồi mới gửi thông tin
Phương pháp này còn gọi là Pull
Hình 1 Mô hình Client - Server
Dịch vụ Push sẽ giải quyết hạn chế này Push là dịch vụ cho phép máy chủ phục vụ
chủ động khởi tạo một phiên giao dịch với máy khách Các ứng dụng trên nền dịch
vụ này khá phong phú: nhắn tin ngắn, hội thoại, thư điện tử…Push có thể thực hiện theo một vài cách:
HTTP server push: Khi máy khách gửi yêu cầu đến máy chủ phục vụ HTTP, máy chủ phục vụ gửi trả phản hồi, nhưng không đóng kết nối lại ngay Do vậy khi có sự kiện mới, máy chủ phục vụ có thể gửi lại ngay cho
máy khách thông qua kết nối cũ đang mở
Trang 1817
Long pooling: Phương pháp này tương tự như cách thăm dò thông thường (Pull) Khi máy khách gửi yêu cầu đến máy chủ phục vụ , nếu không có dữ liệu gửi trả, thay vì gửi trả một phản hồi rỗng thì máy chủ phục vụ không gửi
gì hết, cũng như không ngắt kết nối Máy khách sẽ được đặt vào trạng thái chờ dữ liệu, ngay khi máy chủ phục vụ có dữ liệu, nó sẽ gửi trả máy khách thông qua kết nối cũ và đóng kết nối Nhiệm vụ của máy khách là gửi một
truy vấn mới và lại đợi khi có dữ liệu nhận về
Duy trì kết nối TCP: Đây là cách Apple sử dụng để đẩy thông báo đến các thiết bị của mình Mỗi thiết bị sẽ mở một kết nối TCP duy nhất đến máy chủ phục vụ và duy trì kết nối đó trong suốt thời gian thiết bị sử dụng Khi có thông báo mới, máy chủ phục vụ sẽ gửi trả thiết bị thông qua kết nối đã được
mở Với dịch vụ Push của Apple, tất cả các ứng dụng và dịch vụ cùng sử
dụng chung một kết nối
Các ứng dụng sử dụng Push trên nền điện thoại chủ yếu có hai loại: nhắn tin ngắn
và nhận thư điện tử Các phần mềm nhắn tin ngắn (các mạng xã hội) thường xây dựng giải pháp push bằng phương án thứ 3 Mỗi ứng dụng sẽ tự mở một kết nối đến máy chủ tin nhắn của riêng mình và duy trì kết nối đó Có thể liệt kê một vài dịch
vụ gửi thư điện tử chính trên điện thoại sử dụng Push (Push Email)
Apple Push Notification Service Đây là dịch vụ miễn phí cho tất cả các thiết bị chạy hệ điều hành iPhone OS phiên bản 3.0 trở nên Dịch vụ này sẽ được đề cập kỹ hơn trong phần hai của luận văn này
IMAP IDLE IMAP là một giao thức nhận thư điện tử tương tự như POP nhưng có nhiều tính năng hơn Tính năng IDLE cho phép máy chủ phục vụ thư điện tử chủ động gửi thư tới máy khách khi có thư mới Các hệ điều hành
di động hỗ trợ giao thức này gồm có Google Android, Microsoft Windows Mobile, Nokia S60 và Palm OS
Wireless Mail User Agent và BlackBerry Enterprise Server (BES) Đây
là hệ thống thư điện tử phát triển riêng bởi RIM (Reseach In Motion) BES
Trang 1918
hoạt động kết hợp với hệ thống thư điện tử sẵn có, theo dõi máy chủ phục vụ thư điện tử, tự động lấy thư mới và đẩy xuống thiết bị cầm tay BlackBerry qua mạng di động Người dùng sẽ nhận được thư ngay lập tức mà không cần phải mở hộp thư đến BlackBerry đã trở nên rất phổ biến tại thị trường Mỹ và trên thế giới, đối tượng người dùng chính là các doanh nhân Sự thành công của BlackBerry đã dẫn đến cuộc chạy đua phát triển hệ thống thư điện tử giữa các nhà sản xuất thiết bị di động như Symbian và Windows Mobile Tại Việt Nam, dịch vụ Push Email được Viettel triển khai năm 2009
Có thể nói phần lớn các ứng dụng Push là thư điện tử, do vậy trước khi dịch vụ Push của Apple ra đời, nội dung của các bản tin push chỉ là thư điện tử Kể từ hệ điều hành iPhone OS phiên bản thứ 3 Apple đã chính thức triển khai một hệ thống Push thông báo, có nghĩa là có thể đẩy bất kỳ thông tin gì đến thiết bị như các bản tin ngắn, các thông báo cập nhật, thư điện tử….làm đa dạng và phong phú hơn khả năng của Push
Mỗi hệ thống Push Notification của Apple gồm bốn thành phần chính:
Ứng dụng nhận thông báo chạy trên thiết bị chạy hệ điều hành iOS
Ứng dụng chạy trên máy chủ cung cấp các bản tin
Máy chủ phục vụ Push của Apple làm nhiệm vụ đẩy bản tin đến thiết bị
Bản thân thiết bị sẽ nhận bản tin
Việc phát triển ứng dụng sử dụng dịch vụ Apple Push Notification sẽ bao gồm việc xây dựng ứng dụng chạy trên máy chủ cung để cung cấp bản tin, và xây dựng ứng dụng nhận và xử lý bản tin ở phía thiết bị Vấn đề cần giải quyết là tích hợp được dịch vụ Push Notification vào hệ thống iPhone Academy của Orable Lab
2.2 Sơ lược về hệ điều hành iPhone OS (iOS )
iOS là hệ điều hành cho thiết bị di động được Apple phát triển đầu tiên cho điện thoại iPhone Sau đó nó được sử dụng cho cả dòng sản phẩm iPod và iPad Khác với các hệ điều hành di động khác, iOS chỉ chạy trên phần cứng do Apple thiết kế
Trang 2019
Các ứng dụng cho hệ điều hành được cung cấp bởi bên thứ ba thông qua quầy ứng dụng trực tuyến của Apple (App Store) Đến thời điểm 1/9/2010, ước tính đã có khoảng 250000 ứng dụng được phát hành
Hình 2 Hệ điều hành iOS
Giao diện của iOS là giao diện cảm ứng đa chạm, cho phép người dùng thao tác trực tiếp thông qua việc chạm vào các biểu tượng trên màn hình Hệ điều hành sẽ đoán nhận các thao tác như chạm, trượt, …Các thành phần giao diện gồm có nút bấm, thanh trượt, thanh cuộn…Phần cứng cảm biến gia tốc, cảm biến trọng trường, cảm biến hướng giúp hệ điều hành nhận biết một vài thao tác nữa của người dùng như lắc, xoay thiết bị
iOS được phát triển trên nền Mac OS X, có chung nhân Darwin và thuộc họ Unix
Hệ điều hành bao gồm bốn lớp: Cocoa Touch, Media, Core Services, Core OS và dung lượng chiếm khoảng 500 megabyte
Trang 2120
Hình 3 Các tầng của iOS
Apple cung cấp bộ công cụ iPhone SDK để giúp các nhà lập trình phát triển ứng dụng cho iOS Bộ công cụ bao gồm trình biên dịch, trình soạn thảo, bộ gỡ rối, phân tích hiệu năng ….Phiên bản mới nhất là iPhone SDK 4.1
Việc phát triển ứng dụng cho hệ điều hành sẽ sử dụng các API cung cấp bởi các lớp này Đối với các API thuộc lớp Core OS, Core Services, ngôn ngữ lập trình sử dụng là C/C++ Đối với các API thuộc lớp Media và Cocoa Touch, ngôn ngữ lập trình sử dụng là Object-C, một ngôn ngữ hướng đối tượng chủ yếu được sử dụng bởi Apple
2.3 Dịch vụ Push Notification
Dịch vụ Push Notification (Apple Push Notification Service – APNs) là dịch vụ đẩy thông báo một cách chủ động đến các thiết bị di động Các thông báo có thể bao gồm văn bản hoặc âm thanh hoặc thông tin do người phát triển tự định nghĩa
Trang 22Các thành phần của APNs:
Provider: Nguồn tin, thiết bị (ứng dụng sẽ phát ra bản tin)
Notification: bản tin cần truyền
APNS: các máy chủ dịch vụ của Apple, làm nhiệm vụ trung gian đưa bản tin
Client Application: ứng dụng chạy trên thiết bị sẽ nhận bản tin
Hình 5 Mô hình APNs với một thiết bị
Hệ thống sẽ phức tạp hơn với sự tham gia của nhiều ứng dụng, nhiều thiết bị và nhiều nguồn tin
Trang 2322
Hình 6 Mô hình APNs với nhiều nguồn tin và nhiều thiết bị
2.3.2 Tiếp nhận phản hồi từ APNS
Việc gửi bản tin không phải lúc nào cũng thành công, đôi khi thiết bị đang ngoài vùng kết nối mạng, hoặc người dùng đã gỡ bỏ ứng dụng dẫn đến không có ứng dụng nào xử lý bản tin Hệ thống sẽ lưu lại danh sách các thiết bị đó và trách nhiệm của người phát triển là thu nhận danh sách và dừng việc gửi tin đến các thiết bị trên Các bản tin sẽ được hệ thống APNs lưu trữ và chuyển tiếp đến thiết bị Nếu thiết bị mất kết nối mạng, APNs sẽ chỉ lưu trữ bản tin sau cùng với mỗi ứng dụng trên thiết
bị đó
2.3.3 Cơ chế an ninh
Hệ thống APNs hoạt động dựa trên cơ chế tin cậy lẫn nhau giữa các thành phần mà nền tảng là PKI Có hai kết nối được thành lập:
Kết nối giữa thiết bị với APNS
Kết nối giữa nguồn tin với APNS
Kết nối giữa thiết bị với APNs: APNs gán cho mỗi thiết bị một chuỗi định danh
duy nhất gọi là device token Các bản tin sẽ có địa chỉ đích là các device token
tương ứng với thiết bị sẽ nhận được bản tin Nguồn tin sẽ duy trì một danh sách các
device token của thiết bị cần gửi tin đến Quá trình sinh device token được thực
hiện ở phía máy chủ của Apple và nhà phát triển không cần phản can thiệp gì đến quá trình này
Trang 2423
Hình 7 Quá trình thiết lập kết nối giữa thiết bị và APNs
Mỗi thiết bị khi được sản xuất đều được tích hợp sẵn một chứng thực từ Apple, và
do đó APNs có thể dễ dàng xác thực thiết bị tham gia vào hệ thống
Kết nối giữa nguồn tin và APNs: Kết nối giữa nguồn tin và APNs tương tự như
giữa thiết bị với APNs
Hình 8 Quá trình thiết lập kết nối giữa nguồn tin và APNs
Chức thực mà nguồn tin sử dụng để kết nối đến APNs sẽ được Apple cung cấp thông qua công cụ Provisional Portal, một chức năng trong cổng thông tin cho các nhà phát triển của Apple
Trang 2524
Như vậy nguồn tin muốn gửi bản tin đến thiết bị thông qua APNs, thì phải biết được
device token của thiết bị Quá trình sinh device token sẽ được thực hiện với mỗi
thiết bị khi lần đầu tiên nó kết nối đến APNs Khi thiết bị có device token, nó phải chuyển ngược lại cho nguồn tin thông qua ứng dụng tương ứng Nguồn tin sau đó sẽ lưu lại vào cơ sở dữ liệu để phục vụ cho việc đưa tin
Hình 9 Quá trình sinh device token
2.3.4 Quá trình đưa tin
Khi nguồn tin đã có thông tin về thiết bị trong cơ sở dữ liệu thì có thể gửi bản tin đến ứng dụng chạy trên thiết bị thông qua APNS Tất cả những gì nguồn tin cần làm
là kết nối đến APNS thông qua kênh truyền SSL, với chứng thực được chấp nhận bởi APNS Tiếp theo nó gửi liên tiếp các bản tin với định dạng cho trước Việc còn lại là APNS sẽ đưa bản tin đến ứng dụng thuộc thiết bị định trước Việc kết nối giữa thiết bị và APNS diễn ra hoàn toàn tự động, người phát triển không cần phải can thiệp gì
Trang 26đề cập trong phần sau
Trang 2726
2.4 Tích hợp dịch vụ Push Notification cho hệ thống iPhoneAcademy
iPhoneAcademy là một ứng dụng cộng tác được sử dụng trong tập đoàn France Telecom, giúp các lập trình viên iPhone OS chia sẻ thông tin Về cơ bản nó giống như một diễn đàn nội bộ, nhưng chạy trên các thiết bị sử dụng hệ điều hành iPhone
OS Việc tích hợp dịch vụ Push Notification sẽ mang lại khả năng tương tác cao hơn của ứng dụng cho người dùng Thí dụ: khi có một bản tin mới, hệ thống sẽ tự động gửi thông báo đến thiết bị, và thiết bị sẽ đổ chuông như vừa nhận được tin nhắn SMS Phần này sẽ trình bày cách tích hợp dịch vụ Push Notification lên iPhoneAcademy nói riêng và ứng dụng trên nền iPhone OS nói chung
Trong mỗi hệ thống APNs đều bao gồm bốn thành phần:
Thiết bị chạy hệ điều hành iPhone OS
Máy chủ dịch vụ APNS của Apple
Nguồn tin (Provider) cung cấp các bản tin cần gửi
Ứng dụng đích chạy trên thiết bị nhận bản tin
Việc tích hợp APNs vào một ứng dụng sẵn có sẽ gồm hai công việc chính:
Xây dựng nguồn tin (Provider)
Xây dựng ứng dụng chạy trên thiết bị nhận tin (Client Application)
2.4.1 Xây dựng nguồn tin
Nguồn tin là phần mềm (máy chủ) chịu trách nhiệm thu thập bản tin từ nguồn nào
đó (cơ sở dữ liệu, thiết bị gửi tin), kết nối với APNS để gửi bản tin đến các thiết bị khác Trong trường hợp ứng dụng iPhoneAcademy, các bản tin do mỗi thiết bị gửi lên sẽ được lưu vào cơ sở dữ liệu MySQL Mỗi khi người dùng gửi bản tin mới, nguồn tin sẽ thu thập, lưu vào cơ sở dữ liệu, đồng thời kết nối đến APNS để gửi bản tin Push, thông báo với các thiết bị khác có một bản tin mới Nguồn tin trong hệ thống iPhoneAcademy được xây dựng bằng Apache/PHP
Trang 28thực này là gateway.sandbox.push.apple.com
Chứng thực phân phối (Distribution Certificate): chứng thực này sử dụng để kết nối đến máy chủ APN và gửi bản tin đến các thiêt bị có ứng dụng nhận được đăng ký là phân phối (hoàn thiện) Máy chủ APN chấp nhận chứng
thực này là gateway.push.apple.com
Không phải tất cả các thiết bị đều có thể nhận được bản tin push Mỗi ứng dụng muốn chạy được trên hệ điều hành iOS phải được ký bởi Apple Trong quá trình phát triển, Apple sẽ cung cấp cho lập trình viên một chứng thực riêng, sử dụng để
ký các ứng dụng do anh ta phát triển, chứng thực này chỉ cho phép ứng dụng cài đặt
SSL
Provider (Apache/PHP)
Hình 11 Kiến trúc nguồn tin
Trang 2928
trên một vài thiết bị xác định Các ứng dụng được ký bởi chứng thực này sẽ nhận các bản tin Push thông qua máy chủ APN thứ nhất Khi quá trình phát triển hoàn tất, lập trình viên sẽ gửi ứng dụng đến Apple, ứng dụng sẽ được Apple ký và lúc này nó
có thể cài lên mọi thiết bị, đồng thời có thể nhận các bản tin Push từ máy chủ thứ hai
Để có được chứng thực để kết nối với APNS, người phát triển phải tạo một yêu cầu cấp chứng thực (Certificate Request), đăng nhập vào Provisioning Portal và gửi yêu cầu đó, Provisioning Portal sẽ ký và tạo ra một chứng thực (phát triển hoặc phân phối) để kết nối tới APNs Chứng thực nhận được là một tệp có phần mở rộng P12,
mã hóa theo định dạng PKCS12, trong đó chứa một khóa riêng và các chứng thực khác của Apple Chuyển đổi tệp tin nhận được thành định dạng X509 (.pem) để có thể sử dụng được với php
Thiết kế cơ sở dữ liệu iPhoneAcademy có một hệ thống các bảng lưu trữ thông tin
về người dùng, các bản tin… Việc tích hợp thêm tính năng push yêu cầu phải bổ
sung thêm một bảng lưu trữ định danh của thiết bị (device token) Bảng này có tên
là devicetokens
Hình 12 Bảng devicetokens
Mỗi khi có một bản tin mới được gửi, hệ thống sẽ rà soát toàn bộ bảng này và gửi tin đến tất cả các thiết bị trong bảng Trong đó ID là định danh của người sử dụng trên thiết bị, DeviceToken là một chuỗi gồm các chữ số hexa đặc trưng cho thiết bị tương ứng Bảng này không có khóa
Thực hiện gửi tin Mỗi khi người dùng (trên thiết bị) đăng một bản tin, ứng dụng
iPhoneAcademy sẽ gửi một yêu cầu HTTP POST đến tệp tin insert_message.php
Trong đó có các trường sau:
Trang 30Việc còn lại của nguồn tin là lưu thông tin này vào trong cơ sở dữ liệu và thực hiện
kết nối đến APNS để gửi tin Các bản tin sẽ được lưu vào trong bảng messages
Để kết nối đến APNS, nguồn tin phải sử dụng chứng thực được cấp từ Provisioning Portal và kết nối đến cổng 2195 của một trong hai máy chủ APN Đoạn mã sau sẽ thực hiện kết nối đến APNS
$apnHost = 'gateway.push.apple.com'; // Địa chỉ máy chủ APNs
$apnPort = 2195; // Cổng 2195
$apnCert = 'apn-distribution.pem'; // Chức thực ở dạng X509
$streamContext = stream_context_create(); // Tạo SSL stream
stream_context_set_option($streamContext,'ssl','local_cert',$apnCert);//Thiết lập cert
$apn = stream_socket_client('ssl://' $apnHost.': '.$apnPort, $error, $errorString, 2, STREAM_CLIENT_CONNECT,$streamContext); // Kết nối đến APNs
if (!$apn)
die("$errorString ($error)\n");
print "Successfully connected to APN server\n";
Sau khi kết nối thành công tới APNS Nguồn tin sẽ sử dụng giao thức riêng để trao đổi dữ liệu với APNS, có định dạng như sau:
Hình 13 Định dạng dữ liệu gửi đến APNs
Trang 3130
s
Trong đó:
Byte ở vị trí 0: lệnh gửi đến APNS, trong trường hợp gửi tin thì thường là 0
Hai byte sau là chiều dài của định danh thiết bị (thường là 32 byte) dưới dạng đầu to
Các byte tiếp theo là định danh thiết bị cần gửi bản tin
Hai byte tiếp theo là chiều dài của bản tin cũng dưới dạng đầu to
Phần còn lại là nội dung bản tin Nội dung bản tin không được quá 256 ký tự Nội dung bản tin phải được mã hóa theo định dạng JSON
Nội dung bản tin có dạng một từ điển bao gồm các khóa và giá trị Khóa bắt buộc
phải có là aps Giá trị của aps là một từ điển có thể bao gồm một trong ba khóa con
sau:
alert : giá trị của khóa con này là xâu thông báo sẽ hiện lên màn hình thiết bị
hay nội dung văn bản cần gửi
badge: giá trị của khóa này là một số nguyên sẽ hiện lên cùng biểu tượng
của thiết bị
Trang 3231
Hình 14 Bản tin khi hiển thị trên thiết bị
sound: giá trị của khóa này là một xâu chỉ định tệp tin âm thanh sẽ được
phát khi thiết bị nhận được bản tin
Thí dụ nội dung một bản tin theo định dạng JSON chứa thông báo đơn giản nhất : hiện hộp thoại Hello lên màn hình
Trang 33mỗi thiết bị cần thực hiện một lần gửi Đoạn mã php sau sẽ ra soát hết bảng devices
và gửi tin đến từng thiết bị trong bảng
$query = "SELECT * FROM devicetokens WHERE LENGTH(DeviceToken) = 64"; // Câu truy vấn
$result = mysql_query($query) or die("Could not complete token table query");
Trang 34if (!$apn)
die("$errorString ($error)\n");
print "Successfully connected to APN server\n";
// Duyệt từng thiết bị trong hệ thống while ($row=mysql_fetch_array($result)) {
// Lấy token của thiết bị
Trang 352.4.2 Xây dựng ứng dụng nhận tin trên thiết bị
Ứng dụng iPhoneAcademy là ứng dụng hỗ trợ các lập trình viên trao đổi trực tiếp với nhau, chạy trên thiết bị Chức năng của ứng dụng tương đối đơn giản, bao gồm:
Hiện thị danh sách các lập trình viên trong hệ thống, hiển thị thông tin chi tiết một lập trình viên…
Hiển thị và cho phép người dùng đăng tải một bản tin (luồng tin) mới hoặc trả lời bản tin đã có từ trước
Trang 3635
Hình 15 Ứng dụng iPhoneAcademy
Việc tích hợp khả năng gửi nhận các bản tin Push với iPhone Academy nói riêng và các ứng dụng khác nói chung bao gồm ba bước:
Đăng ký khả năng gửi nhận các bản tin Push với hệ điều hành
Cập nhật device token đến nguồn tin (để nguồn tin biết và sau này gửi tin đến)
Bắt sự kiện khi có bản tin mới
Đăng ký khả năng gửi nhận các bản tin push với hệ điều hành: Thao tác này
tương đối đơn giản, ứng dụng thực hiện một lời gọi đối với hệ thống đăng ký muốn nhận các bản tin push, nếu hệ thống sẵn sàng, nó sẽ gửi trả cho ứng dụng định danh thiết bị (device token) Trên iPhone OS, phương thức cho phép đăng ký với hệ điều hành có nguyên mẫu như sau:
- (void)registerForRemoteNotificationTypes:(UIRemoteNotificationType)type
Phương thức này thuộc lớp UIApplication, ứng dụng nên gọi phương thức này ngay khi nó được khởi tạo (khi người dùng vừa bấm vào biểu tượng ứng dụng và chạy)
Trang 37Nếu ứng dụng chạy lần đầu tiên, hệ điều hành sẽ hiện lên thông báo hỏi người dùng
có cho phép ứng dụng này nhận các bản tin push hay không Nếu mọi công việc khởi tạo thành công, hệ điều hành sẽ gọi một hàm callback để trả lại cho ứng dụng định danh của thiết bị trong hệ thống APNs
- (void)application:(UIApplication *)app
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)devToken
Với devToken là định danh của thiết bị, ứng dụng sẽ cập nhật devToken lên cơ sở
dữ liệu của nguồn tin
Trang 3837
Nếu việc đăng ký nhận bản tin push thất bại (thiết bị ngoài vùng phủ sóng, không kết nối được internet…) , hệ điều hành sẽ gọi hàm callback sau để báo cho ứng dụng nguyên nhân của việc thất bại
- (void)application:(UIApplication *)app
didFailToRegisterForRemoteNotificationsWithError:(NSError *)err
Cập nhật định danh thiết bị đến nguồn tin: Khi đã có định danh thiết bị, ứng
dụng cần phải cập nhật lên cơ sở dữ liệu của nguồn tin ít nhất một lần Mặc dù định danh thiết bị thường không thay đổi trong một thời gian dài, nhưng việc ập nhật là vẫn cần thiết iPhoneAcademy cập nhật lên nguồn tin bằng cách gửi một truy vấn HTTP đến tệp update_token.php
Bắt sự kiện khi có một bản tin mới: Nếu việc đăng ký thành công, hệ điều hành sẽ
theo dõi mỗi khi nhận được bản tin và thông báo đến ứng dụng ngay cả khi nó không được chạy
Trong trường hợp thiết bị nhận được bản tin mà ứng dụng đang không chạy, hệ điều hành sẽ hiện một thông báo lên cho người dùng, và tùy chọn có khởi chạy ứng dụng hay không Nếu người dùng đồng ý, hệ điều hành sẽ khởi chạy ứng dụng và truyền tham số cho ứng dụng chính là nội dung bản tin
Trang 39sẻ thông tin tiện lợi, tức thì, thay thế hình thức nhắn tin ngắn hay gọi điện trực tiếp vẫn diễn ra trên điện thoại truyền thống Hơn nữa, thông báo được gửi đến tất cả mọi người ngay lập tức với chi phí bằng không, tiết kiệm được chi phí viễn thông Khả năng của Push là rất lớn, ban đầu khi mới phát triển, Apple đã không hình dung trước được lưu lượng sử dụng lớn đến vậy Tuy nhiên hãng đã nâng cấp hệ thống máy chủ xử lý Push, và hiện nay đã đáp ứng được rất tốt nhu cầu này Ứng dụng của Push cũng tương đối phong phú Chẳng hạn nó hoàn toàn có thể thay thế hình thức gửi tin nhắn SMS thông thường, tuy nhiên hạn chế của dịch vụ này là thiết bị cần nằm trong khu vực có khả năng kết nối dữ liệu (GPRS/EDGE/3G) Tuy vậy với tình hình phủ sóng của các nhà cung cấp dịch vụ viễn thông hiện nay, điều này là không đáng lo ngại
Trang 4039
Chương 3 Xây dựng hệ thống bảo vệ ứng dụng cho
iPhone – iPhone Authorization Framework
Chương này sẽ trình bày mục đích của việc bảo vệ ứng dụng, quy trình phát triển ứng dụng, cơ chế bảo vệ ứng dụng và triển khai một hệ thống hoàn chỉnh