- vừa được xem lúc

Một số lưu ý quan trọng để tránh bug khi triển khai Sign In With Apple

0 0 16

Người đăng: Nguyen The Trinh

Theo Viblo Asia

Trong phần trước, mình đã hướng dẫn các bạn implement chức năng Sign In With Apple trong ứng dụng iOS, tuy nhiên để triển khai một cách nhanh chóng và chính xác nhất thì có một vài lưu ý quan trọng cần phải nắm được trước khi bắt tay vào thực hiện.

Design chỉ có nút Sign In, không có Sign Up ở iOS version thấp

Thông thường các ứng dụng triển khai chức năng này thì đa số là main tain, có nghĩa là thêm button Sign In With Apple vào màn hình sign in hoặc sign up có sẵn. Điều này cũng đã được đề cập từ trước, khiến design bị hạn chế và chúng ta phải chọn phù hợp nhất có thể với thiết kế có sẵn sao cho hài hoà. Tuy nhiên, có một điểm khá là "khó chịu" mà dev sẽ gặp phải nếu ứng dụng có phần đăng kí. Đó là: từ iOS 13.0 đến iOS 13.2, apple chỉ hỗ trợ button "Sign In With Apple" mà không có "Sign Up With Apple". Chỉ i0S 13.2 trở lên, chúng ta mới có nút "Sign Up With Apple". Điều đó có nghĩa là bạn phải sử dụng button có title "Sign In With Apple" với mục đích Sign Up

Cách khắc phục:

Do đó chúng ta phải buộc chấp nhận chỉ sử dụng 1 nút cho 2 chức năng, hoặc tạo custom 1 button mới.

Button không thể tap

Đây có thể nói là 1 bug của SDK này, buton mà Apple cung cấp là ASAuthorizationAppleIDButton(), thực ra là 1 UIControl, tuy nhiên chúng ta có thể setTarget với loại .touchUpInside cho nó để bắt sự kiện. Nhưng khi chạy thì nó không thực sự mượt, đôi khi phải long press thì mới chạy (botay). Trường hợp này rất nhiều developer đã gặp phải https://stackoverflow.com/questions/58114826/asauthorizationappleidbutton-not-responding-to-touchupinside-events

Cách khắc phục:

Vấn đề này có thể khắc phục khá đơn giản, bằng cách gán UITapGestureRecognizer() cho button là xong.

Thông tin User chỉ trả về 1 lần đầu

ASAuthorizationControllerDelegate() được sử dụng để lấy thông tin của user bao gồm có thể là email, full name, userIdentifier, ...., thông qua hàm

func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization)

Những thông tin này sẽ được sử dụng để đưa lên server tạo tài khoản hoặc đăng nhập. Tuy nhiên có 1 sự thật là khi bấm nút sign in with apple, thông tin email và name chỉ được trả về đối với lần đầu tiên khi người dùng sử dụng chức năng này, từ những lần sau sẽ chỉ còn trả về userIdentifier mà thôi, các trường còn lại sẽ là nil. Đây có thể là cơ chế để bảo mật. Vì vậy các thông tin về mail sẽ cần phải lưu lại vào keychain (apple cũng có hướng dẫn điều này)

Cách khắc phục:

Điều này sẽ khiến việc Dev test khó khăn 1 chút, tuy nhiên nếu chúng ta hiểu được cơ chế thì có thể dễ dàng khắc phục: Apple sẽ lưu lại Bundle ID của app, sau đó nếu đã request thông tin rồi thì sẽ không trả về từ các lần sau nữa. Vì vậy chúng ta có thể xoá app đã dùng Sign In With Apple trong mục Setting của máy iPhone

iPhone Settings > Apple Id > Password & Security > Apple ID logins > {YOUR APP} > Stop using Apple ID

Account Enterprise của Apple không thể tạo certificate có chứa Sign In With Apple

Đây là điều khá phiền toái mà mình đã gặp phải, nếu trong project đã được chia môi trường staging hoặc development, tạo certificate bằng tài khoản enterprise thì sẽ không thể add được chức năng sign in with apple. Mà phải tạo bằng account Apple Programing thì mới có. Kéo theo hàng loạt các thay đổi config khác rất bất tiện

Cách khắc phục

Các bạn có thể tham khảo Chắc chắn là phải dùng certificate có thể tạo được capacity Sign In With apple thì chúng ta mới làm được, tuy nhiên bạn vẫn có thể trick bằng cách dùng trên certificate production, rồi sau đó config API về môi trường staging hoặc dev là được

Tổng kết

Trên đây là một vài kinh nghiệm "để đời" của mình khi triển khai chức năng này, tuy không nhiều nhưng lại rất quan trọng cho những bạn chưa biết. CHúc các bạn áp dụng thành công !

Bình luận

Bài viết tương tự

- vừa được xem lúc

Học Flutter từ cơ bản đến nâng cao. Phần 1: Làm quen cô nàng Flutter

Lời mở đầu. Gần đây, Flutter nổi lên và được Google PR như một xu thế của lập trình di động vậy.

0 0 281

- vừa được xem lúc

Học Flutter từ cơ bản đến nâng cao. Phần 3: Lột trần cô nàng Flutter, BuildContext là gì?

Lời mở đầu. Màn làm quen cô nàng FLutter ở Phần 1 đã gieo rắc vào đầu chúng ta quá nhiều điều bí ẩn về nàng Flutter.

0 0 207

- vừa được xem lúc

Swift: Tạo custom phép toán tử (Operator) của riêng bạn!

Swift cho phép bạn tạo các toán tử có thể tùy chỉnh của riêng bạn. Điều này đặc biệt hữu ích khi bạn xử lý các loại dữ liệu của riêng mình. Operator Types in Swift. Có năm loại toán tử chính trong Swift.

0 0 56

- vừa được xem lúc

Chương 6 Protocol oriented programming.

Cuốn sách này là về lập trình hướng protocol. Khi Apple thông báo swift 2 ở WWDC 2015.

0 0 48

- vừa được xem lúc

Ví dụ về UIActivityViewController

Trên iOS, UIActivityViewController cung cấp giao diện thống nhất để người dùng chia sẻ và thực hiện các hành động trên văn bản, hình ảnh, URL và các mục khác trong ứng dụng. let string = "Hello, world!". let url = URL(string: "https://nshipster.com").

0 0 58

- vừa được xem lúc

Quản lý self và cancellable trong Combine.

. . Công việc quản lý bộ nhớ memory management thường trở nên phức tạp khi chúng ta thực hiện các tác vụ bất đồng bộ asynchronous vì chúng ta thường phải lưu giữ một số object nằm ngoài scope mà object được define trong khi vẫn phải đảm bảo được việc giải phóng object đó được thực hiện đúng quy trìn

0 0 41