• Thứ Sáu, 10/04/2009 07:28 (GMT+7)

    Ứng dụng đa hệ

    Phát triển ứng dụng web cho iPhone, Blackberry và các điện thoại thông minh thịnh hành có nhiều ưu điểm hơn so với phát triển ứng dụng dùng mã riêng.

    Hiện có 2 mô hình phát triển ứng dụng cho điện thoại thông minh (ĐTTM – smartphone): viết ứng dụng chuyên biệt với mã lệnh riêng khai thác được hết các tính năng của một loại ĐTTM cụ thể, hoặc viết ứng dụng web làm việc trong trình duyệt web có trên hầu hết ĐTTM.

    Một mô hình chỉ cần đầu tư 15.000 USD và một mô hình cần đến 250.000 USD, bạn chọn mô hình nào? Với tình hình kinh tế hiện nay, việc lựa chọn trở nên đơn giản. Lấy một ứng dụng web thông thường, thêm vài lệnh kiểm tra loại trình duyệt web, vậy là chúng ta có phiên bản đã điều chỉnh theo màn hình nhỏ của ĐTTM.

    Các nhà phát triển đang xâm nhập thị trường ĐTTM theo nhiều cách, một trong những cách được khai thác nhiều nhất là chỉnh sửa ứng dụng web. Doanh số cao từ App Store của Apple thật hấp dẫn, nhưng mã lệnh riêng không phải lúc nào cũng là giải pháp tốt nhất.

    Thay vì viết bằng Java, C# hay C++, bạn có thể chỉnh sửa các file CSS để định dạng cho màn hình của ĐTTM và sau đó viết JavaScript để xử lý các sự kiện. Kết quả khá tốt. Đây không phải là giải pháp phù hợp cho các game phức tạp cần sức mạnh đồ hoạ, nhưng mọi công việc khác JavaScript có thể xử lý tốt. Có lẽ vì vậy mà lúc đầu Steve Jobs chỉ cho các nhà phát triển ứng dụng trên iPhone làm việc với "hộp cát - sandbox" chật chội này (tức ứng dụng chạy trong trình duyệt Safari).

    Có một số điều lý giải khả năng HTML làm việc tốt trên môi trường ĐTTM. Nó được thiết kế từ đầu để đánh dấu tài liệu mà không cần quan tâm đến kích cỡ màn hình. Tuy các nhà thiết kế web luôn bực bội với các thẻ điều khiển hiển thị DIV "vô kỷ luật", nhưng kết quả thường trông khá tốt trên màn hình nhỏ của ĐTTM. Những người kỹ tính có thể cần dùng đến các file CSS riêng hay thậm chí một vài thẻ đánh dấu riêng cho màn hình nhỏ của ĐTTM, nhưng thường thì các thiết lập mặc định đáp ứng yêu cầu.

    Ưu điểm thứ hai là sự phổ biến của WebKit, một thư viện nguồn mở dùng để dựng trang HTML. Cả iPhone và Google Android đều dùng WebKit và hiện Torch Mobile đang tạo 1 trình duyệt dựa trên WebKit cho Windows Mobile. Loại trừ những điểm không tương thích giữa các trình duyệt di động, bạn có thể phát triển các công cụ có khả năng chạy trên nhiều hệ ĐTTM. Android có thể chạy ứng dụng Java và iPhone có thể chạy ứng dụng viết bằng Objective C, nhưng cùng một ứng dụng có thể chạy trên cả hai thông qua WebKit.

    Lợi dụng trình duyệt

    Các hãng tên tuổi đã có nhiều cải tiến bổ sung cho trình duyệt của mình để có khả năng xử lý một số tính năng của ĐTTM. Đa phần các bổ sung khá đặc biệt và khá mạnh. Ví dụ, iPhone của Apple giám sát các lệnh gọi đến tên miền map.google.com để chuyển đến ứng dụng Maps ngoài trình duyệt. Bạn có thể kết hợp ứng dụng của mình với ứng dụng Maps bằng cách ấn định URL theo đúng định dạng.

    Không chỉ dùng "lối tắt" trong HĐH, các cải tiến bổ sung còn khai thác nhiều hàm mới trong đặc tả CSS và trong JavaScript được tất cả trình duyệt hỗ trợ. Chẳng hạn trình duyệt BlackBerry sẽ chia sẻ tọa độ GPS của bạn với trình biên dịch JavaScript, nhưng chỉ sau khi thông báo cho bạn biết có 1 website tò mò muốn biết vị trí địa lý của bạn. Nếu bạn chấp thuận, chương trình JavaScript sẽ lấy kinh độ và vĩ độ của ĐTTM của bạn để làm việc: có nhiều khả năng, bao gồm việc gửi dữ liệu tọa độ địa lý đến website ở xa.

    Các công ty sản xuất ĐTTM tên tuổi cũng dùng web như một kênh dẫn cho phần mềm và thông tin bằng cách cho phép dễ dàng tích hợp các trang web vào môi trường ĐTTM. Chẳng hạn Apple cung cấp một bộ thẻ siêu dữ liệu phong phú, có thể biến bất kỳ trang web nào thành ứng dụng iPhone. Các thẻ này cho phép người dùng đặt địa chỉ đánh dấu (bookmark) 1 trang web ở trang khởi đầu, bookmark này xuất hiện giống y như bất kỳ ứng dụng iPhone nào tải về từ kho iTunes. Hình thức URL có thể giấu đi, cho phép trang web chiếm toàn màn hình khi người dùng nhấn lên biểu tượng. Nó trông như được viết bằng Objective C, tuy thực chất vẫn là ứng dụng web được viết bằng JavaScript và CSS.

    Các tính năng không chỉ giới hạn cho việc đánh lừa thị giác. Trình biên dịch JavaScript trong các trình duyệt di động cũng sẽ có thể lưu thông tin trên ĐTTM trong CSDL SQLite. Hướng đi này sẽ làm cho ĐTTM trở thành 1 bộ máy độc lập.

    Sư kết hợp này cho phép xây dựng các ứng dụng gọn nhẹ và bớt làm nghẽn mạng không dây. ĐTTM có thể lưu phần lớn dữ liệu làm việc cục bộ và chỉ thỉnh thoảng gửi các bản sao đến máy chủ. Đây là mô hình lai giữa desktop độc lập và client-server triển khai đơn giản.

    Đi cùng JavaScript

    Quyết định của RIM dùng Google Gears phản ánh phần nào sự chuẩn hóa đang dần hình thành. Dĩ nhiên, Google đã bắt đầu tiến trình này bằng cách đưa Google Gears vào phiên bản Android hiện tại. Các nhà phát triển web có thể trông chờ các thư viện mở rộng cho JavaScript sắp ra mắt.

    Một nhà phát triển Android tại Google nói rằng bộ công cụ Gears chỉ mới là bắt đầu. Chương trình này chỉ là một chặng trên con đường đạt đến các tính năng sẽ xuất hiện trong HTML5.

    Việc WebKit được quan tâm giúp ích đôi chút cho sự chuẩn hóa. Mặc dù trình duyệt của Google Android được xây dựng dựa trên cùng công cụ WebKit cũng được dùng bởi Apple, nhưng nó không có đủ tất cả các hàm. Trình duyệt của Apple có nhiều tính năng cho phép dùng CSS để định nghĩa lại trang mỗi khi lắc điện thoại và xoay từ đứng thành ngang hay ngược lại. Nó cũng có một số hàm JavaScript để thay đổi các tính năng CSS bổ sung.

    Có một số khác biệt làm thay đổi đặc tính then chốt của mô hình lập trình web. Một số website được thiết kế nhận biết sự kiện rê và di chuyển chuột nhằm tạo tính tương tác. Tính năng này không làm việc đúng trên các màn hình cảm ứng vì ĐTTM không thể phân biệt giữa 1 cú chạm để di chuyển chuột và 1 cú chạm để thao tác kích thước và vị trí của trang web. Khi bạn chạm vào màn hình để di chuyển chuột nhằm tương tác với 1 chức năng nào đó, iPhone sẽ nghĩ rằng bạn muốn kéo trang để nhìn phần khác.

    Giải pháp là bỏ các sự kiện này và chuyển sang dùng các nút để thao tác. Bạn có thể tạo các nút để di chuyển con trỏ sang trái và phải thay vì để con trỏ theo dõi các sự kiện di chuyển chuột.

    Một giải pháp khác là dùng các sự kiện mới như những sự kiện mà Apple đã tạo để xử lý đa chạm mà điện thoại của họ nhận biết. Sự kiện gesturestart kích hoạt khi 2 hay nhiều ngón tay chạm màn hình, và gesturechange kích hoạt khi các ngón tay di chuyển. Khi chỉ còn 1 ngón tay chạm vào màn hình, sự kiện gestureend được gọi.

    Một trong những điểm hấp dẫn trong phiên bản Safari dành cho iPhone đó là khả năng thiết lập các ma trận chuyển đổi trong lớp kiểu CSS. Qua thao tác bằng JavaScript, các ma trận này có thể mô phỏng nhiều hiệu ứng 3-D. Nó không phải là OpenGL và sử dụng đơn giản hơn nhiều.

    Các kiểu cải tiến trên đang dần được đưa vào các nền tảng lập trình thịnh hành. Ví dụ, WordPress có 1 theme để định dạng lại dữ liệu cho màn hình của ĐTTM. Theme này tự động theo dõi biến user-agent của trình duyệt và áp dụng các thay đổi HTML và CSS tuỳ biến riêng cho người dùng iPhone. Những nỗ lực tương tự đang được thực hiện nhằm cho phép lập trình viên dễ dàng nâng cấp các site được xây dựng dựa trên Drupal, Ruby on Rails, Joombla...

    Phần nhiều các bộ CSS+JavaScript đề cập ở trên được phát triển dựa trên iUI framework của Joe Hewitt. Framework này là đoạn mã JavaScript được viết một cách thông minh cho phép chuyển HTML thông thường thành các menu đặc trưng của iPhone. Các menu này có thể được xác định với thẻ UL, thay vì Cocoa cấp thấp hơn.

    Dùng mã lệnh riêng

    Tạo trang web hiển thị đúng trên điện thoại không phải là cách duy nhất để xây dựng ứng dụng dùng HTML, JavaScript và CSS. Còn có dạng ứng dụng lai hình thành lớp vỏ bao quanh HTML, CSS và JavaScript. Dạng ứng dụng này cho phép bạn thực hiện hầu hết công việc bằng các ngôn ngữ web nhưng có khả năng như ứng dụng viết bằng mã lệnh riêng của điện thoại. Trong trường hợp Google, nhà phát triển xây dựng ứng dụng bao quanh đối tượng WebView hành xử giống như cửa sổ trình duyệt.

    Giải pháp này tạo nên một số framework lai. Một trong những framework hấp dẫn nhất là PhoneGap (http://phonegap.com), đây là tập hợp các công cụ đa hệ biến 1 ứng dụng web thành ứng dụng độc lập. Dự án này xây dựng các lớp áo bao theo mã lệnh riêng cho các ĐTTM thịnh hành, và về lý thuyết có thể tạo nên ứng dụng chạy trên mọi ĐTTM.

    Các công cụ này, được phân phối theo giấy phép MIT(1), có đủ các mã lệnh riêng để liên kết trình biên dịch JavaScript với các thành phần của điện thoại mà thường yêu cầu mã lệnh riêng. Dữ liệu GPS từ điện thoại iPhone, Android phone và BlackBerry có thể truy cập với cùng hàm JavaScript getCurrentPosition. Dữ liệu đo gia tốc cũng có với Android và iPhone. Nhóm thực hiện dự án này hy vọng mở rộng để hỗ trợ các hệ Symbian và Windows Mobile và điều khiển nhiều thành phần điện thoại hơn.

    Theo một chuyên gia của PhoneGap, "không nhất thiết các ứng dụng phải viết bằng PhoneGap thay vì mã lệnh riêng. Một số chức năng nền như lớp hiển thị OpenGL nằm ngoài khả năng của mô hình PhoneGap vì lý do hiệu suất. Nếu bạn muốn xây dựng 1 trò chơi 3D, mã lệnh riêng là giải pháp duy nhất. Nhưng PhoneGap giúp thực hiện dễ dàng hơn những việc như chuyển đổi 1 ứng dụng web hiện có để chạy trên iPhone hay tạo các ứng dụng nhỏ dạng "mashup"(2) mà sẽ tốn nhiều công sức hơn nếu viết bằng mã lệnh riêng của iPhone. Tuy nhiên cần lưu ý khi làm việc với PhoneGap, một tính năng thông minh có thể biến thành 1 lỗi nguy hiểm nếu nó mở tung một vài API của iPhone cho website bất kỳ”.

    Những ngôi sao của màn hình nhỏ

    Nhóm thực hiện dự án PhoneGap đang nỗ lực chuyển mã cho các hệ điện thoại khác. "Với Symbian chúng tôi hy vọng sẽ đưa ra S60WebKit, đây là phiên bản của cùng trình duyệt WebKit dùng trên Android và iPhone. Có hơi khó khăn một chút với các điện thoại Windows Mobile, nhưng chúng tôi nghĩ có thể liên kết với các thư viện của Firefox".

    Tuy các dự án như PhoneGap có thể làm rất tốt việc tạo ra hầu hết ứng dụng, nhưng chúng không thể làm cho JavaScript chạy hiệu quả như chương trình C.

    "Mô hình này có những hạn chế về khả năng", theo Ed Burnette, tác giả của cuốn sách "Hello, Android". "Nếu bạn cần mức độ tương tác, đa phương tiện cao hơn, hay truy cập đến các tài nguyên cục bộ như không gian đĩa, thì bạn sẽ cần môi trường phát triển mã lệnh riêng".

    Ed Burnette nói thêm, "Nhiều ứng dụng web phổ biến như Amazon, eBay, Facebook và Twitter đang được viết lại bằng mã lệnh riêng cho ĐTTM. Phiên bản web làm việc ổn, nhưng ứng dụng viết riêng cho thiết bị đem đến cho người dùng trải nghiệm tốt hơn mà ứng dụng web hiện nay không thể đạt được".

    Tham khảo:
    • The cross-platform option: Web apps for smartphones (InfoWorld)
    • Forget Smartphone Applications, Just Build for the Web (.eduGuru)
    • Think Beyond Basic Apps For Smartphones (InformationWeek)

    (1) Giấy phép phần mềm nguồn mở do học viện công nghệ Massachusetts (Massachusetts Institute of Technology - MIT, Mỹ) đưa ra, cho phép sử dụng lại bên trong phần mềm có bản quyền với điều kiện giấy phép này được phân phối cùng với phần mềm đó.
    Theo Free Software Foundation (Tổ chức phần mềm miễn phí), giấy phép MIT được gọi đúng là giấy phép X11 vì ban đầu nó được soạn cho X Window System.
    (2) Để có thêm thông tin về "mashup", bạn có thể tham khảo bài "Mashup cho ứng dụng nghiệp vụ” (ID: A0610_90).

    Phương Uyên

    ID: A0903_90