Di chuyển ứng dụng dành cho người gửi iOS từ Cast SDK v2 sang Khung ứng dụng truyền (CAF)

Quy trình sau đây cho phép bạn chuyển đổi ứng dụng người gửi iOS từ Cast SDK v2 sang CAF Sender, dựa trên singleton GCKCastContext.

Giới thiệu

  • CAF Sender vẫn được phân phối trên trang web dành cho nhà phát triển Google CastCocoaPods như phiên bản 2.
  • Các lớp mới đã được thêm vào chịu trách nhiệm tuân thủ danh sách kiểm tra thiết kế Google Cast.
  • Người gửi CAF cung cấp các tiện ích tuân thủ các yêu cầu về Trải nghiệm người dùng truyền; phiên bản 2 không cung cấp bất kỳ thành phần giao diện người dùng nào và yêu cầu bạn triển khai các tiện ích này.
  • Thiết kế người gửi CAF nhất quán với thiết kế SDK Android truyền.
  • Người gửi CAF hỗ trợ Bitcode, như v2.
  • Tính năng phụ đề trong CAF cũng tương tự như v2.

Phần phụ thuộc

Người gửi CAF hỗ trợ iOS phiên bản 8 trở lên.

Khởi chạy

Trong CAF, cần có một bước khởi động rõ ràng cho khung Truyền. Việc này liên quan đến việc khởi chạy singleton GCKCastContext, sử dụng GCKCastOptions thích hợp để chỉ định ID ứng dụng Bộ thu web và mọi tuỳ chọn chung khác. Việc này thường được thực hiện trong phương thức AppDelegate -[application:didFinishLaunchingWithOptions:]:

GCKCastOptions *options = [[GCKCastOptions alloc]
    initWithReceiverApplicationID:applicationID];
[GCKCastContext setSharedInstanceWithOptions:options];

Bước này không cần thiết trong phiên bản 2.

Khám phá thiết bị

Trong CAF, quá trình khám phá bắt đầu và dừng tự động bằng khung khi ứng dụng chạy ở nền trước và chuyển sang nền tương ứng. Các lớp GCKDeviceScannerGCKFilterCriteria từ phiên bản 2 đã ngừng hoạt động và không nên dùng.

Nút Truyền và hộp thoại Truyền

Trong CAF, nút Truyền và hộp thoại do khung cung cấp. Bạn có thể khởi tạo và thêm nút Truyền vào thanh điều hướng như sau:

GCKUICastButton *castButton =
    [[GCKUICastButton alloc] initWithFrame:CGRectMake(0, 0, 24, 24)];
castButton.tintColor = [UIColor whiteColor];
self.navigationItem.rightBarButtonItem =
    [[UIBarButtonItem alloc] initWithCustomView:castButton];

Bạn cũng có thể thêm nút Truyền vào bảng phân cảnh.

Khi người dùng nhấn vào nút, hộp thoại Truyền sẽ tự động hiện ra.

Điều khiển thiết bị

Trong CAF, việc kiểm soát thiết bị phần lớn là do khung xử lý. Ứng dụng của người gửi không cần xử lý việc kết nối với thiết bị và khởi chạy ứng dụng Bộ thu web. Lớp v2 GCKDeviceManager không được dùng nữa và bạn không nên sử dụng. Sự tương tác giữa người gửi và Người nhận trên web hiện được biểu thị dưới dạng "phiên". Lớp CAF GCKSessionManager sẽ xử lý vòng đời của phiên và tự động bắt đầu và dừng các phiên để phản hồi cử chỉ của người dùng: một phiên bắt đầu khi người dùng chọn một Thiết bị truyền trong hộp thoại Truyền và kết thúc khi người dùng nhấn vào nút "Dừng truyền" trong hộp thoại Truyền hoặc khi chính ứng dụng người gửi chấm dứt. Ứng dụng của người gửi có thể được thông báo về các sự kiện trong vòng đời của phiên bằng cách đăng ký GCKSessionManagerListener với GCKSessionManager. Giao thức GCKSessionManagerListener xác định các phương thức gọi lại cho tất cả sự kiện trong vòng đời của phiên hoạt động.

Lớp GCKCastSession biểu thị một phiên bằng Thiết bị truyền. Lớp này có các phương thức để kiểm soát âm lượng thiết bị và tắt tiếng trạng thái, điều này đã được thực hiện trước đó trong phiên bản 2 bằng các phương thức trên GCKDeviceManager.

Trong phiên bản 2, giao thức GCKDeviceManagerDelegate đã cung cấp thông báo về các thay đổi đối với trạng thái của thiết bị, bao gồm cả âm lượng, trạng thái tắt tiếng, trạng thái chờ, v.v. Trong CAF, thông báo thay đổi âm lượng/tắt tiếng được phân phối qua phương thức gọi lại trong giao thức GCKSessionManagerListener; các trình nghe này được đăng ký với GCKSessionManager. Tất cả các thông báo trạng thái thiết bị còn lại sẽ được gửi qua giao thức GCKCastDeviceStatusListener; các trình nghe này được đăng ký với GCKCastSession.

Logic kết nối lại

Giống như phiên bản 2, CAF cố gắng thiết lập lại các kết nối mạng bị mất do mất tín hiệu Wi-Fi tạm thời hoặc lỗi mạng khác. Việc này hiện được thực hiện ở cấp phiên hoạt động; một phiên hoạt động có thể chuyển sang trạng thái "bị tạm ngưng" khi mất kết nối và sẽ chuyển về trạng thái "đã kết nối" khi kết nối được khôi phục. Khung này đảm nhận việc kết nối lại với ứng dụng Bộ thu dữ liệu web và kết nối lại bất kỳ kênh Truyền nào trong quá trình này.

Ngoài ra, CAF cũng thêm tính năng tiếp tục phiên tự động. Nếu ứng dụng của người gửi được gửi ở chế độ nền hoặc bị chấm dứt (bằng cách vuốt ra hoặc do sự cố) trong khi phiên Truyền đang diễn ra, thì khung sẽ cố gắng tiếp tục phiên đó khi ứng dụng của người gửi quay lại nền trước hoặc được chạy lại; việc này sẽ được GCKSessionManager tự động xử lý, sẽ thực hiện lệnh gọi lại thích hợp trên mọi bản sao GCKSessionManagerListener đã đăng ký.

Đăng ký kênh tuỳ chỉnh

Trong phiên bản 2, các kênh tuỳ chỉnh (được triển khai bằng lớp con GCKCastChannel hoặc GCKGenericChannel và được uỷ quyền) đã được đăng ký với GCKDeviceManager. Trong CAF, các kênh tuỳ chỉnh sẽ được đăng ký với phiên bản GCKCastSession. Bạn có thể đăng ký trong phương thức gọi lại GCKSessionManagerListener -[sessionManager:didStartCastSession:]. Đối với các ứng dụng đa phương tiện, bạn không cần đăng ký GCKMediaControlChannel một cách rõ ràng; hãy xem phần sau để biết thêm thông tin chi tiết.

Điều khiển phương tiện

Lớp v2 GCKMediaControlChannel không được dùng nữa và bạn không nên sử dụng lớp này. Trong CAF, API này được thay thế bằng lớp GCKRemoteMediaClient mới. Lớp này cung cấp chức năng tương đương trong một API thuận tiện hơn. Bạn không cần phải khởi tạo hoặc đăng ký đối tượng này một cách rõ ràng; khung sẽ tự động khởi tạo đối tượng và đăng ký kênh nội dung đa phương tiện cơ bản tại thời điểm bắt đầu phiên nếu ứng dụng Bộ thu web đang được kết nối để hỗ trợ vùng chứa tên phương tiện.

Bạn có thể truy cập vào GCKRemoteMediaClient bằng thuộc tính -[remoteMediaClient] của đối tượng GCKCastSession.

Trong phiên bản 2, tất cả các yêu cầu nội dung phương tiện đưa ra trên GCKMediaControlChannel sẽ trả về mã yêu cầu dạng số, và các phương thức trên GCKMediaControlChannelDelegate sẽ cung cấp mã nhận dạng này khi gửi thông báo về việc hoàn tất hoặc lỗi yêu cầu.

Trong CAF, tất cả yêu cầu nội dung đa phương tiện đưa ra trên GCKRemoteMediaClient sẽ trả về đối tượng GCKRequest; đối tượng này có một giao thức GCKRequestDelegate liên kết có thể được dùng để theo dõi tiến trình và kết quả cuối cùng của yêu cầu.

Phiên bản 2 GCKMediaControlChannel sẽ gửi thông báo về các thay đổi trong trạng thái trình phát nội dung đa phương tiện trên Bộ thu web thông qua GCKMediaControlChannelDelegate. Trong CAF, GCKRemoteMediaClient cung cấp các lệnh gọi lại tương đương thông qua giao thức GCKRemoteMediaClientListener. Bạn có thể đăng ký số lượng trình nghe bằng GCKRemoteMediaClient, cho phép nhiều thành phần người gửi chia sẻ một bản sao của GCKRemoteMediaClient được liên kết với phiên hoạt động đó.

Trong phiên bản 2, ứng dụng gửi phải chịu gánh nặng của việc giữ cho giao diện người dùng đồng bộ hoá với trạng thái trình phát nội dung đa phương tiện trên Bộ thu web. Trong CAF, lớpGCKUIMediaController thực hiện hầu hết trách nhiệm này; hãy xem tài liệu hướng dẫn về lớp học lập trình để biết ví dụ về cách sử dụng thành phần này.

Lớp phủ giới thiệu

Phiên bản 2 không cung cấp giao diện người dùng lớp phủ giới thiệu.

CAF thêm lớp GCKCastContext bằng một phương thức -[presentCastInstructionsViewControllerOnce] mà ứng dụng của người gửi có thể sử dụng để làm nổi bật nút Truyền khi nút này hiển thị cho người dùng lần đầu tiên.

Bộ điều khiển nhỏ

Trong phiên bản 2, bạn cần triển khai một bộ điều khiển nhỏ từ đầu trong ứng dụng của người gửi.

Trong CAF, khung này cung cấp một thanh điều khiển, GCKUIMiniMediaControlsViewController, mà bạn có thể thêm vào các cảnh mà bạn muốn hiển thị các nút điều khiển cố định. Có hai cách để thêm bộ điều khiển nhỏ vào ứng dụng của người gửi:

Mở rộng bộ điều khiển

Trong phiên bản 2, bạn cần triển khai một bộ điều khiển mở rộng từ đầu trong ứng dụng của người gửi.

CAF thêm GCKUIMediaController mà bạn có thể sử dụng để triển khai bộ điều khiển mở rộng dễ dàng hơn.

CAF thêm một tiện ích tay điều khiển mở rộng được tạo sẵn GCKUIExpandedMediaControlsViewController mà bạn có thể chỉ cần thêm vào ứng dụng của mình. Bạn không cần triển khai tay điều khiển mở rộng tuỳ chỉnh bằng GCKUIMediaController nữa.

Ghi nhật ký gỡ lỗi

Các lớp GCKLoggerGCKLoggerDelegate từ phiên bản 2 được chuyển vào CAF, với một số thay đổi và cải tiến.

Chúng tôi đã ngừng sử dụng phương thức GCKLoggerDelegate -[logFromFunction:message:] và thay bằng -[logMessage:fromFunction:].

Hiện tại, bạn có thể lọc thông điệp nhật ký theo khung bằng cách tạo một bản sao GCKLoggerFilter phù hợp và chỉ định bản sao đó bằng cách đặt thuộc tính -[filter] của singleton GCKLogger.

Ứng dụng mẫu

Bạn nên xem các lớp học lập trìnhứng dụng mẫu đã viết cho CAF.