Tag: mobile app

  • Google Instant Apps

    Android Instant Apps – Trải nghiệm mới về Ứng dụng Android

    Mở đầu

    Tại sự kiện I/O 2016, Google đã công bố một khái niệm hoàn toàn mới về ứng dụng Android. Đó là Android Instant App. Đúng như tên gọi thì Instant Apps là những ứng dụng có thể được sử dụng ngay cả khi không cần cài đặt. Cũng giống như lúc đi chợ, khi "lựa hành" trên CH Play chúng ta đều muốn kiểm tra, "lật qua lật lại" "món hàng" mình định mua. Instant App hỗ trợ người dùng có thể "test nhanh" ứng dụng rồi mới quyết định có muốn tải về hay không, thay vì bị lừa bởi hình ảnh, video intro rồi tải về và xóa ngay lập tức vì thất vọng.

    Bài viết hôm nay chúng ta sẽ tìm hiểu về Android Instant Apps.

    Instant App là gì và sự khác biệt với Normal App như thế nào ?

    • Như phần giới thiệu, bạn cũng đoán được Instant App là gì. Hiểu một cách đơn giản, Instant App là một ứng dụng native giúp cho người dùng có thể ngay lập tức sử dụng ứng dụng của các nhà phát triển mà không cần cài đặt. Để xây dựng ứng dụng như vậy, các nhà phát triển cần tạo ra các module riêng và tích hợp với deep link, sau đó người dùng có thể nhấp vào URL để dùng thử ứng dụng.
    • Instant App vẫn được tải về như các app bình thường khác nhưng thay vì ở lại trên điện thoại của bạn, nó làm việc giống như bạn truy cập một website và sau đó thoát ra, nó chỉ lưu ứng dụng đó tạm thời và được xóa ngay khi không còn sử dụng.
    • Tiết kiệm thời gian và bộ nhớ sử dụng khi không chiếm dụng tài nguyên thiết bị cũng như mất thời gian download (những ngày nghỉ mà đứt cáp thì bạn sẽ càng hiểu rõ sự khác biệt này)
    • Một ví dụ ưu điểm nữa là khi bạn phát triển một ứng dụng như Instagram hoặc Youtube, muốn chia sẻ với bạn bè thì với Instant App thích hợp, chỉ cần đơn giản gửi 1 link là họ có thể dễ dàng và cực kỳ nhanh chóng xem được mà không cần phải cài đặt ứng dụng.

    Ưu điểm của Instant App (Góc nhìn của lập trình viên)

    1. Tăng khả năng khám phá Instant App đủ điều kiện để được giới thiệu trên trang chủ của Google Play Games, có khả năng tiếp cận với người dùng.
    2. Nhiều người chơi hơn Nếu người dùng không phải lo lắng về vấn đề cài đặt, họ có nhiều khả năng sẽ tham gia vào trò chơi của bạn.
    3. Khả năng kiếm tiền Các dịch vụ mua hàng trong ứng dụng và quảng cáo được hỗ trợ
    4. Trải nghiệm chất lượng cao Mọi thứ hoạt động ngay khi người dùng ấn vào "Instant Play"

    Làm thế nào để sử dụng Instant App ?

    Phần giới thiệu, ưu điểm có vẻ cực kỳ hoành tráng, thời gian ra mắt cũng được 5 năm nhưng nhiều bạn sẽ thắc mắc là lướt CH Play mấy năm trời có thấy cái Instant App nào đâu ?! Là do các bạn chưa kích hoạt nó mà thôi !

    • Vào Setting, tìm đến các cài đặt cho Google và tìm đến Google Play Instant. Tại đây bạn kích hoạt nó lên là có thể sử dụng Instant App của Google. (Tùy mỗi dòng điện thoại sẽ có những cách bố trí mục cài đặt khác nhau nên mình không thể chỉ rõ step-by-step được)

    Vậy làm thế nào để tạo ra một Instant App ?

    Cuối cùng thì phần mà các lập trình viên hóng nhất cũng đến. Cùng tìm hiểu cách tạo một Instant App đơn giản nào !

    I. Permission

    Vì sự nhỏ gọn, tiện lợi, Instant App không thể thực thi tất cả những tác vụ mà một App bình thường có thể làm. Cụ thể, nó chỉ có thể sử dụng các permissions sau:

    • ACCESS_COARSE_LOCATION
    • ACCESS_FINE_LOCATION
    • ACCESS_NETWORK_STATE
    • BILLINGDeprecated as of Play Billing Library 1.0.
    • CAMERA
    • INSTANT_APP_FOREGROUND_SERVICEOnly in Android 8.0 (API level 26) and higher.
    • INTERNET
    • READ_PHONE_NUMBERSOnly in Android 8.0 (API level 26) and higher.
    • RECORD_AUDIO
    • VIBRATE
    • WAKE_LOCK

    Thêm vào đó, các Instant App cũng không thể :

    • Sử dụng background services
    • Send notifications khi chạy trên background

    II. Kết nối với các ứng dụng đã được cài đặt

    Khi phát triển một Instant App, hãy nhớ rằng chỉ có thể tương tác với các ứng dụng đã cài đặt trên thiết bị nếu thỏa mãn một trong các điều kiện sau :

    • Một hoặc nhiều Activity trong các ứng dụng đó được cài đặt android:android:visibleToInstantApps=true – chỉ có sẵn cho Android 8.0 (API 26) trở lên.
    • Ứng dụng đã cài đặt chứa intent filter bao gồm CATEGORY_BROWSABLE
    • Instant App đang gửi một Intent bằng ACTION_SEND, ACTION_SENDTO hoặc ACTION_SEND_MULTIPLE

    III. Cấu hình Project

    1. Thêm khai báo sau vào app module build.gradle :

      implementation("com.google.android.gms:play-services-instantapps:17.0.0")
      
    2. Update targetSandboxVersion :

      <manifest
          xmlns:android="http://schemas.android.com/apk/res/android"
          ...
          android:targetSandboxVersion="2" ...>
      
    3. Khai báo các module hỗ trợ Instant App

      • View > Tool Windows > Project
      • Ấn chuột phải vào module, chọn Refactor > Enable Instant Apps Support
      • Chọn module tại dropdown menu
      • OK Android Studio thêm khai báo sau vào manifest của module:
      <manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">
          <dist:module dist:instant="true" />
          ...
      </manifest>
      
    4. Code bất cứ thứ gì có thể vào module bạn đã chọn

    5. Deploy Instant App

      • Nếu bạn đã cài đặt ứng dụng (với bất kỳ phiên bản nào) trên thiết bị, uninstall nó đi
      • Run > Run/Debug Configurations, kích hoạt Deploy as instant app
      • Run > Run hoặc ấn biểu tượng Run trên toolbar để chạy Instant App.

    Nếu bước 4 của bạn được "thuận buồm xuôi gió" một Instant App sẽ được hiển thị lên thiết bị của bạn. Hãy thử back ra home screen và tìm một vòng xem có app nào được cài đặt không nhé ! – Dĩ nhiên là không rồi.

    Kết thúc

    Trong tương lai gần, có thể nói Instant App là một bước tiến lớn đối với trải nghiệm người dùng. Khi mà tốc độ các kết nối ngày càng nhanh chóng và lưu trữ đám mây trở nên phổ biến; thì việc sử dụng một ứng dụng ngay lập tức và không cần cài đặt là một điều thực sự tuyệt vời.

    Trên đây là một vài giới thiệu tổng quan nhất về Instant App, cũng như tầm phát triển và ý nghĩa mà nó mang lại. Cảm ơn các bạn đã giành thời gian theo dõi.

    Bạn có thể tìm hiểu sâu hơn về Instant App, xây dựng một ứng dụng tại: Android Developer – Google Play Instant

  • Authorization and JWT

    Authorization and JWT

    Thực ra bài này chỉ muốn viết về JWT thôi, nhưng tiện thì sẽ nói về các loại Authorization luôn.

    Authorization và Authentication

    2 cái này cũng khác nhau:

    • Authentication
      • Được sử dụng bởi một Server khi mcần biết chính xác ai đang truy cập thông tin hoặc trang web của họ.
      • Được sử dụng bởi Client khi Client cần biết rằng máy chủ là hệ thống mà nó tuyên bố.
      • Trong Authentication, Client hoặc Machine phải chứng minh danh tính của mình với Server hoặc Client. Thông thường, xác thực bởi một máy chủ đòi hỏi phải sử dụng tên người dùng và mật khẩu. Các cách khác để xác thực có thể thông qua thẻ, quét võng mạc, nhận dạng giọng nói và dấu vân tay. Xác thực bởi khách hàng thường liên quan đến việc máy chủ cấp chứng chỉ cho khách hàng trong đó một bên thứ ba đáng tin cậy như Verisign hoặc Thawte nói rằng máy chủ đó thuộc về thực thể (như ngân hàng) mà khách hàng mong đợi. Xác thực không xác định những nhiệm vụ mà cá nhân có thể làm hoặc những tập tin cá nhân có thể nhìn thấy. Xác thực chỉ xác định và xác minh người hoặc hệ thống là ai.

    Xác thực, quá trình này xác định bạn là ai trong hệ thống. Ví dụ: login là một quá tình xác thực, bạn gửi username/password lên hệ thống, hệ thống sẽ thẩm tra nhận dạng của bạn (bằng username/password hoặc thêm một số factor nữa như trắc sinh học, token,… trong multi-factor authentication).

    • Authorization
      • Xác minh, cái này thường sau xác thực, để kiểm tra xem bạn có quyền truy cập tài nguyên không, ví dụ bạn nói với server tôi là A tôi cần truy cập tài nguyên B bằng một request:
      GET /b HTTP/1.1
      Host: example.com
      Authorization: Bearer i_am_A
      
      Như vậy server cần xác định Bearer i_am_A có phải là Authorization hợp lệ hay không và có quyền truy cập GET /b hay không.
      • Gần như 2 quá trình trên sẽ không khác nhau với các website hay application, vì vậy việc hiểu rõ khá là hữu ích.
      • Authorization cũng thường lấy kết quả của Authentication (hoặc một dẫn xuất từ việc Authentication) để xác nhận. Ví dụ sau khi đăng nhập bạn sẽ được Server gán cho một giá trị nào đó vào Session để xác nhận bạn đã đăng nhập, và dùng giá trị đó cho việc Authorization. Có một vài trường hợp khác như Basic Authentication bạn sẽ gửi Base64 của chuỗi username:password trong Authorization header, thì gần như sẽ ko thấy Authentication đâu cả.

    Vì vậy cũng có vài loại Authorization khác nhau:

    • Basic (RFC 7617, base64-encoded credentials. Đơn giản là truyền chuỗi Base64 của chuỗi username:password)
    • Bearer (RFC 6750, bearer tokens để access các resource được bảo vệ bởi OAuth 2.0)
    • Digest (RFC 7616)
    • HOBA (RFC 7486, HTTP Origin-Bound Authentication, digital-signature-based),
    • Mutual (RFC 8120,
    • AWS4-HMAC-SHA256 dùng cho AWS SDK và AWS API.

    Hiện tại thì OAuth 2.0 rất phổ biến hơn nữa nảy sinh ra nhu cầu chống làm giả token được tạo ra bởi server, đến đây thì mới xuất hiện JWT.

    JWT

    Thôi đi copy định nghĩa vậy: JSON Web Tokens are an open, industry standard RFC 7519 method for representing claims securely between two parties. JWT.IO allows you to decode, verify and generate JWT.

    Hình dung như này, khi bạn vào một trang web như TIKI chẳng hạn, bạn đăng nhập với Facebook hoặc tài khoản cá nhân. Vậy khi bạn đăng nhập với Facebook, TIKI sẽ kết nối đến Facebook GraphAPI với Facebook token mà bạn vừa đưa cho TIKI để verify. Khi đó bạn sẽ nhận được token từ TIKI để truy cập các resource.

    Structure

    JWT gồm 3 phần:

    • Header: Hay còn gọi là JOSE header, đề cập đến loại JWT (JWEJWS)và kiểu mã hóa hay thuật toán mã hóa, ở hình trên là dùng RSA Signature with SHA-256
    • Payload: hay còn gọi là claims, là một đoạn data public có trong JWT, JWT thường có một vài data có thể public như
      • sub: Username hoặc UserId
      • iat: issue at, token được tạo ra lúc nào
      • exp: expire at, token hết hạn khi nào
      • iss: issuer, ai là người tạo token này ra. Ngoài ra còn có jti(JWT ID), aud(Audience), nbf(Not before), mấy cái tên này thì có thể tìm thấy ở đây này, cái này được gọi là Public Claims. Private Claims thì những cái bạn define thôi : ).
    • Signature: là phần quan trọng nhất, thì cái này lại phụ thuộc vào JOSE Header để mã hóa, tức là dùng cái thuật toán ở trên ấy, mã hóa dùng security factor như nào thì lại phụ thuộc vào JWE hay JWS.

    Xong xuôi, chúng ta sẽ dùng process base64url encode cả 3 phần rồi nối với nhau bằng dấu chấm (.).

    JWT vs Thế giới

    So với các web token khác như SWT hoặc SAML, JWT đơn giản hơn nhiều vì nó dựa trên JSON nên dễ hiểu hơn XML. Nếu chúng ta mã hóa JSON, nó sẽ trở nên nhỏ hơn kích thước so với SAML, giúp việc chuyển qua môi trường HTML và HTTP dễ dàng hơn. Về bảo mật, SWT sử dụng một khóa duy nhất, trong khi cả JWT và SAML đều sử dụng cặp khóa chung và khóa riêng để xác thực tốt hơn. Nhìn chung, JWT được sử dụng ở quy mô Internet. Điều này có nghĩa là việc xử lý trên các thiết bị của người dùng dễ dàng hơn, có thể là máy tính xách tay hoặc thiết bị di động. Ngoài khả năng tự động hóa, Mã thông báo Web JSON là một cách tuyệt vời và an toàn để truyền dữ liệu giữa nhiều bên. Việc JWT có chữ ký giúp mọi người dễ dàng xác định người gửi thông tin hơn. Tất cả bạn cần là chìa khóa chính xác.

    Một bài viết khác sẽ nói về một loại JWT của Auth0. Hãy đón chờ : )

  • Cách upload 1 App iOS lên Deploygate

    Cách upload 1 App iOS lên Deploygate

    Xin chào mọi người, hôm nay mình sẽ hướng dẫn các bạn cách upload 1 app lên Deploygate

    Thông thường việc cài đặt ứng dụng sẽ được thực hiện thông qua App Store, tuy nhiên sẽ có một số trường hợp sẽ ta không cần phải đưa app lên App Store mà thiết bị vẫn có thể cài đặt được. đa số sẽ thuộc vào một trong hai trường hợp sau :

    • Testing: Trước khi release app, ta cần test ứng dụng, vì vậy việc cung cấp bản build để tester có thể test trước khi release là một điều cần thiết
    • In-house Applications: Là những ứng dụng chỉ được sử dụng internal trong một công ty hay tổ chức nào đó ( đối với những ứng dụng In-house application, ta cần có tài khoản Apple Developer Enterprise Program)

    Những điều bắt buộc

    1. Valid Apple developer program account (not the Apple Developer Enterprise Program)
    2. Máy tính chạy Mac OS X
    3. Đã cài Xcode

    Tổng quát

    Bên dưới là danh sách các bước bắt buộc để submit 1 app

    1. Tạo 1 record của app trên iTunes Connect
    2. Cấu hình XCode project cho việc distribution
    3. Export ipa file from xcode
    4. Upload app lên deploygate

    1. Tạo 1 record của app trên iTunes Connect Bạn phải tạo 1 record của app trên iTunes Connect trước khi bạn upload app lên App Store. Nó sẽ chứa tất cả thông tin cần thiết để có thể quản lý để xử lý và hiển thị app trên App Store. Xem thông tin chi tiết tại đây

    2. Cấu hình XCode project cho việc distribution Bạn phải nhập các thông tin để chứng thực app: Identity, Team, Bundle ID, import provisioning file, set version number,… Tạo 1 provisiong profile Xem thông tin chi tiết tại đây

    3. Export ipa file from xcode

    – Achieve app: bước đầu tiên bạn tạo 1 bản lưu trữ của app để build và lưu trữ thông tin app.

    • Chọn scheme hiện tại của app: Ở mục Build only device -> Generic iOS Device
    • Sau đó, trên thanh status bar trên cùng, chọn Product -> Archive Rồi đợi Xcode nó archive app, khi xong thì vô Window -> Organizer để xem cái bản mình vừa mới archive được, bạn cũng có thể xem các bản archive trước đó

    – tiếp theo chúng ta export ra file ipa Xem thông tin chi tiết ở đây

    4. Upload app lên deploygate

    bước 1: đăng ký tài khoản deploygate link đăng ký ở đây

    bước 2: sau khi đăng ký xong ta chọn account -> Organizations -> Create

    • tiếp theo ta điền đầy đủ các thông tin ở trong hình -> Create -> Finish

    bước 3 : Sau khi ấn Finish thành công thì việc còn lại của chúng ta là upload file ipa mà chúng ta export từ xcode lên đây

    • chọn upload App -> tìm tới folder lưu file ipa -> open -> upload
    • việc tiếp theo là chờ đợi tới khi việc upload thành công -> sẽ hiển thị ra một màn hình như bên dưới, tới được bước này thì xin chúc mừng các bạn đã upload thành công app của mình lên deploygate rồi đấy ^^
    • muốn lấy link để tải app của mình cho mọi người, ta chọn vào Add a link for sharing -> hệ thống sẽ tự sinh ra cho mình một link để tải app 😀

    Chúc Các bạn thành công ^^