0

Giới thiệu CallKit cho iOS

Mở đầu

Trong quá trình phát triển các ứng dụng iOS, các developer gặp rất nhiều khó khăn trong việc xây dựng các ứng dụng về lĩnh vực VoIPVoIP. Việc gửi thông báo thực sự rất khó khăn, điển hình nhất là khi ứng dụng chạy ở chế độ nền (background) thì hầu hết là nhận message thông qua notification, rất dễ bị miss. Và rồi, với việc update iOS lên version 10, Apple giới thiệu cho chúng ta CallKit, framework thay đổi mọi thứ trước đó 😃.

CallKit

Đúng như tên gọi của nó, CallKit là một framework nhắm đến việc cải thiện việc trải nghiệm VoIP cho phép ứng dụng tích hợp chặt chẽ với giao diện Phone mặc định của device. Bằng cách ứng dụng CallKit, ứng dụng của bạn sẽ: - Sử dụng màn hình cuộc gọi đến của device ở cả trạng thái bị khoá và mở khoá. - Bắt đầu cuộc gọi trong các màn hình Contacts, Favorites and Recents của device. - Tương tác với các cuộc gọi khác trong cuộc sống

Đây là sơ đồ hoạt động cơ bản cảu CallKit. Trong đó t sẽ thấy, có 2 class mà t cần quan tâm đó là CXProvider và CXCallController.

1. CXProvider Ứng dụng sẽ sử dụng CXProvider để report bất kỳ notification ngoài băng tần đến hệ thống. Thường là một cuộc gọi đến. Khi có một sự kiện như vậy xảy ra, thì CXProvider sẽ tạo một bản call update để thông báo đến cho hệ thống. Tức là đóng gọi thông tin liên quan đến cuộc gọi hoặc những thay đổi có liên quan đến thông tin của cuộc gọi. Chúng được lưu trong lớp CXCallUpdate , có thể chứa tên người gọi, chỉ gọi audio hoặc gọi video, ... Ngược lại, khi hệ thống có bất kỳ notify nào đến cho ứng dụng với những sự kiện nào đó, thì nó dùng một thể hiện của lớp CXAction, là một lớp trừu tượng, đại diện cho telephony cations. Với mỗi action, CallKit sẽ implement các CXAction khác nhau. Ví dụ; gọi đi thì dùng CXStartCallAction, gọi đến thì dùng CXAnswerCallAction,... Những actions này được định danh bởi UUID có thể fail, hoặc fulfill

Ứng dụng có thể giao tiếp với CXProvider thông qua CXProviderDelegate protocol

2. CXCallController

Ứng dụng sẽ sử dụng CXCallController để cho hệ thống biết về bất kỳ mà người dùng request, ví dụ như Start call. Đây là sự khác biệt chính giữa CXProvider và CXCallController: trong khi công việc của provider là report đến hệ thống, thì controller là gửi request từ hệ thống. Call controller sử dụng trấnctions để làm những request này. Transactions, đại diện bởi CXTransaction chưa một hoặc nhiều thể hiện của CXAction. Call controller sẽ gửi những transactions đến hệ thống, và nếu mọi thứ đều đúng, thfi hệ thống sẽ response thích hợp đến provider.

Thực tiễn

1. Cuộc gọi đến (Incoming Calls):

Nhìn sơ đồ ta thấy được: - Bất cứ khi nào có cuộc gọi đến, ứng dụng sẽ tạo ra một thể hiện cuae CXCallUpdate và sử dụng provider để gửi đến hệ thống. - Ở thời điểm này hệ thống sẽ publish cái này như là một cuộc gọi đến đến tất cả service của nó. - Khi người dùng trả lời cuộc gọi, hệ thống sẽ gửi một CXAnswerCallAction đến provider - Ứng dụng cũng có thể trả lời cuộc gọi bằng cách phương thức của CXProviderDelegate Đây là hình ảnh thực tế cuộc gọi đến

2.Kết thúc cuộc gọi Có 2 cách để kết thúc cuộc gọi, đó là: từ màn hình gọi của device hoặc trong ứng dụng. Mô hình:

Cần lưu ý sự khác biệt. Khi kết thúc từu màn hình gọi (1a) thì hệ thống tự động gửi một CXEndCallAction đến provider. Còn nếu muốn kết thúc cuộc gọi sử dụng Hotline (1b), thì phải đưa hành động đó và một transaction và request đến hệ thống. Và khi hệ thống xử lý yêu cầu, nó sẽ gửi CXEndCallAction về lại provider.

Cuối bài

Trên đây là giới thiệu sơ cho mọi người biết về CallKit, framwork lên quan đến Calling, không đào sâu nghiên cứu, áo dụng vào code vì nó quá nhiều và mất thời gian. Nếu ai đó muốn sử dụng nó cho việc phát triển ứng dụng thì mới nên search kỹ và áp dụng thực tế. Bài viết trên có một sự nghâm cứu hoàn toàn nghiêm túc và kỹ càng trên website https://www.raywenderlich.com/150015/callkit-tutorial-ios và iOS Developer Docs. 😃 Xin cảm ơn.


All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.