8 điểm bởi baeba 2024-08-28 | 16 bình luận | Chia sẻ qua WhatsApp

Đây là ứng dụng Android cho phép tìm kiếm vé máy bay nội địa và
đặt vé trên trang chủ của hãng hàng không.

Cá nhân tôi thường xuyên đi du lịch Jeju nên
trong lúc muốn tìm vé máy bay tiện lợi, nhanh chóng với giá rẻ
đã nảy ra ý tưởng và làm ra ứng dụng này.

[ Tính năng chính ]

  • So sánh và tìm kiếm vé máy bay
  • Có thể đặt vé trực tiếp trên trang chủ của hãng hàng không

[ Những điểm đã cân nhắc ]

  • Được làm nhẹ để có thể chạy trên smartphone cấu hình thấp.
  • Nếu đã có ứng dụng của hãng hàng không, có thể mở bằng chính ứng dụng đó.

[ Điểm khác biệt với các ứng dụng khác ]

  • Không có phí dịch vụ.
  • Người dùng có thể trực tiếp đặt vé máy bay thông qua ứng dụng này.
  • Không yêu cầu thông tin cá nhân. Không cần đăng nhập.

[ Công nghệ sử dụng ]

  • Android : WebView, java
  • Frontend : Vanilna JS, CSS, Webpack, Swagger API

Nếu có câu hỏi liên quan đến phát triển, tôi cũng sẽ trả lời.
Vì làm như một dự án sở thích nên vẫn còn nhiều thiếu sót.
Nếu có thể góp ý về điều này thì tôi sẽ rất cảm kích.

16 bình luận

 
sonhy02 2024-09-04

Bạn đã phân tích API của website hãng hàng không như thế nào?

 
baeba 2024-09-05

Tôi đã làm theo kiểu rất thủ công. -_-

Korean Air, Asiana, Jin Air, Jeju Air, T'way, Air Seoul, Air Busan, Eastar
Google Flights, Naver Hàng không, Webtour, Interpark Hàng không, v.v.
Tôi vào trang chủ của các hãng hàng không được giới thiệu trong nước
rồi mở từng cửa sổ debugger và bắt packet mạng cho tất cả
để phân tích cách chúng trao đổi qua lại với nhau.

Cứ phân tích như vậy thì sẽ dần nhìn ra được đường đi(?)

 
sonhy02 2024-09-05

Tôi cũng muốn thử phân tích, nhưng xem mãi mà vẫn không hiểu rõ lắm T_T Có thể cho tôi xin một chút mẹo được không..?

 
baeba 2024-09-05

Và còn nữa...
Hệ thống thanh toán của từng hãng hàng không khác nhau rất nhiều, nên
khi cố thanh toán trong webview
sẽ phát sinh đủ loại lỗi.
Nói đơn giản thì
giống như khi giao dịch ngân hàng trên PC phải cài chương trình bảo mật,
cũng có nơi chỉ thanh toán được khi phải cài chương trình bảo mật cho Android
nên

Nếu 1 hãng hàng không có 5 mô-đun thanh toán
thì với 8 hãng hàng không sẽ phải kiểm thử khoảng 40 trường hợp.
Một cá nhân làm việc này thì rất khó.

Tôi có thử hỏi ngắn gọn ở cộng đồng khác xem
thường đặt vé máy bay thế nào thì...
họ chỉ tra giá ở Naver, Interpark, Google Flights hay những nơi tương tự.
Còn việc đặt chỗ thực tế thì họ làm qua ứng dụng của hãng hàng không.

Ứng dụng tôi làm cũng ban đầu có ý định tương tự như vậy.
Tìm kiếm rồi... không mở ứng dụng của hãng hàng không mà chuyển thẳng đến
cửa sổ kết quả tìm kiếm trên trang chủ của hãng để thanh toán ngay..

 
baeba 2024-09-05

Nếu góp ý thì...
Có trình duyệt Firefox dành cho nhà phát triển.
Công cụ phát triển của Chrome cũng ổn.
Nhưng có khác biệt đôi chút.

Thường thì API được gọi rồi chuyển hướng sang trang tiếp theo nên...
không dễ để tìm ra API thực sự được gọi như thế nào.
Có thể làm kiểu thô là chặn web trước khi nó chuyển hướng...

Hoặc là...
Mở một chương trình bắt gói tin mạng
rồi theo dõi thì có thể tìm ra API cuối cùng.

Dù có tìm được API đi nữa thì...
nếu khóa xác thực, thông tin cookie, thông tin session liên quan không khớp
thì dù gọi API đó cũng sẽ phát sinh lỗi.

Mỗi hãng hàng không lại có đặc điểm riêng.
Nên thực sự là cần mấy mẹo -_- .

Chỗ khó nhất là Korean Air!! Dùng Angular nên
rất khó để reverse.

Đã có lúc định bỏ cuộc...
Tôi vật vã mò mẫm cỡ 2 năm đấy. hahaha Vì đầu óc không nhanh nhạy nên... chân tay phải vất vả thôi...

 
sonhy02 2024-09-08

Trước hết mình đang thử với Jin Air, cho mình hỏi bạn đã xử lý x-csrf-token và giá trị cookie như thế nào được không...? Các hãng khác thì mình vẫn chưa hình dung ra, nhưng với Jin Air thì mình đã tìm được cách phải gửi request như thế nào rồi, chỉ còn vướng hai giá trị này thôi T_T

 
baeba 2024-09-09

Khi nhấn F12 trong Chrome, Firefox hoặc Edge,
công cụ dành cho nhà phát triển sẽ hiện ra.
Tại đây hãy chọn tab debugger... rồi kiểm tra cửa sổ source ở bên trái,
khi chọn tab storage thì bên trái sẽ có các mục local storage, session storage, cache storage, indexed DB, cookie.
Hãy kiểm tra các mục này...

Tiếp theo chọn tab network... khi bấm vào trang web thì hãy kiểm tra các packet qua lại như thế nào,
khi đã nắm đại khái rồi thì

đặt breakpoint trong tab debugger,
ở trạng thái này phải kiểm tra từng bước xem trang web trao đổi với server như thế nào.

Jin Air thì thuộc dạng khá dễ^^;;; gần đây giao diện có được cải tổ đẹp hơn.
Nhưng logic bên trong thì hầu như không thay đổi gì so với trước đây (gần như giống 2 năm trước).

Khi token được tạo từ server chuyển về client, hãy thử kiểm tra xem nó được lưu ở đâu
trong storage bên trong trình duyệt web.

Trường hợp của tôi thì khá đơn giản, chỉ dùng thông tin người dùng và thông tin ngày tháng
để di chuyển tới đúng màn hình đó thôi...
cuộn màn hình tới đúng vị trí của thời gian tương ứng rồi là xong.

Ở đây cũng có thể bấm vào giá rồi cho đăng nhập, v.v.
nhưng phần này quá tùy trường hợp cụ thể...

Nên tôi để người dùng tự do thao tác.

Nói cho dễ hiểu hơn thì
người dùng không cần mở app của hãng hàng không
mà chỉ dùng trình duyệt web hay dùng trên smartphone (Chrome, Samsung Internet, v.v.)
để vào trang chủ của hãng hàng không, tìm kiếm,
đăng nhập và thanh toán.

Nhưng nếu làm bằng webview thì
sẽ có rất nhiều hạn chế nên không thể triển khai cho chuẩn được.
Mỗi hãng hàng không đều được triển khai bằng những logic rất kỳ lạ theo kiểu riêng...
Ngay cả Jin Air thôi cũng có lẽ có nhiều hệ thống thanh toán khác nhau.
Vì phải thử hết các bài test tích hợp này...

 
sonhy02 2024-09-05

Tôi cũng đọc bài này rồi định thử chủ yếu với các hãng bay trên tuyến tôi hay đi, chắc tôi cũng sẽ phải mò mẫm nhiều lắm đây hahaha
Cảm ơn bạn

 
kdhyo98 2024-08-30

Dự án tuyệt vời quá!! Vì mình không có Android nên T_T mình sẽ chờ bản iOS hoặc trang web!!

 
baeba 2024-09-02

Vì là web app nên thực ra cũng có thể làm thành trang web... ^^
Tôi ngại quản lý server -_-
Nên đã tải hết các file dành cho trang web lên thẳng điện thoại.
Từ góc nhìn người dùng thì không phải kết nối vào server, nên...
Tốc độ phản hồi cũng nhanh hơn..

Vì vậy...
Có khá nhiều ràng buộc bảo mật và xung đột liên quan,
Nên lúc phát triển tôi cũng khá vất vả.
Đặc biệt là các mô-đun thanh toán
Mỗi hãng hàng không lại khác nhau một trời một vực, còn gắn đủ kiểu hệ thống thanh toán,
Đến sát ngày phát hành tôi mới biết,
Nên lúc test đã rất cực.

 
kandk 2024-08-30

Thỉnh thoảng tôi cũng tự làm crawler khi mua vé để tìm giá thấp nhất, nên có vẻ ứng dụng này sẽ khá hữu ích haha.
Tôi có một điều thắc mắc: trên Skyscanner trước đây có nhiều chặng không hiện ra sao?

 
baeba 2024-08-30

Các trang tìm kiếm vé máy bay nước ngoài như skyscanner hỗ trợ tìm kiếm trên phạm vi toàn cầu.
Nghĩa là vì tập trung tối ưu giá rẻ nhất cho việc di chuyển giữa các quốc gia nên... với nhu cầu nội địa thì không được phù hợp lắm.

Với thị trường nội địa, ý tưởng phát triển ban đầu là chỉ cần làm sao để có thể xem thật dễ dàng hãng bay, ngày và giờ mình muốn trong một lần
...
Ban đầu tôi định tìm kiếm tự động (?) để ghép hãng bay, giờ bay và giá vào một ngày cụ thể
rồi gửi cảnh báo... nhưng tạm gác chức năng này lại...
Thay vào đó, tôi làm theo kiểu ứng dụng vé máy bay hiện có: tìm kiếm, lọc thật dễ, rồi chuyển ngay sang trang chủ của hãng hàng không
để đặt vé.

 
bncgood 2024-08-28

Bạn đã tạo ra một dịch vụ thật tuyệt vời.

  1. Thông tin giá vé máy bay nội địa có được xử lý bằng screen scraping không?
  2. Vấn đề tốc độ chắc chắn sẽ phát sinh, bạn có sử dụng cache không?
 
baeba 2024-08-28

Tôi không dùng screen scraping.
Không dùng cache.
Tôi đã tự parse thủ công từng thông tin mà hãng hàng không gửi tới trang web của người dùng
(-_-) trong nội bộ để chỉ lấy ra những thông tin cần thiết
và tạo thông tin giá...

Ban đầu định làm ở phía server..
nhưng vì chi phí server...
nên tôi xử lý tất cả ngay trong webview.

 
bncgood 2024-08-29

Wow, thật tuyệt. Bạn có kế hoạch cho iOS không?

 
baeba 2024-08-30

Tôi đã mua một chiếc Mac mini để làm bản cho iOS. ^^