Hướng dẫn dành cho nhà phát triển Cloud Anchors dành cho iOS

SDK ARCore dành cho giao diện iOS với ARKit để cung cấp các tính năng Cloud Anchor, cho phép bạn chia sẻ liên kết giữa các thiết bị iOS và Android trong cùng một môi trường.

Tìm hiểu cách sử dụng API ARCore Cloud Anchor hoặc dịch vụ ARCore Cloud Anchor trong ứng dụng của riêng bạn.

Điều kiện tiên quyết

  • Xcode phiên bản 13.0 trở lên
  • CocoaPs 1.4.0 trở lên nếu sử dụng CocoaPods
  • Thiết bị Apple tương thích với ARKit chạy iOS 12.0 trở lên (cần có mục tiêu triển khai iOS 12.0 trở lên)

Nếu bạn mới sử dụng Cloud Anchors:

Bật Cloud Anchors trong ứng dụng

Để sử dụng API Cloud Anchors, bạn phải tạo GARSessionConfiguration và đặt thuộc tính cloudAnchorMode cho API đó, như mô tả trong phần Định cấu hình phiên ARCore trong iOS. Sử dụng setConfiguration:error: (GARSession) để đặt cấu hình.

Bạn cũng phải bật API ARCore cho ứng dụng của mình.

Lưu trữ và phân giải thẻ liên kết

Bạn có thể lưu trữ và phân giải các neo trên đám mây bằng ARCore Cloud Anchor API. API này bao gồm các phương thức gọi lại cho các thao tác đã hoàn tất, cũng như các đối tượng Tương lai có thể thăm dò được.

Lưu trữ quảng cáo cố định cuối màn hình

Việc lưu trữ ARAnchor sẽ đặt neo trong một hệ toạ độ chung cho bất kỳ không gian thực tế nào.

Yêu cầu máy chủ gửi dữ liệu trực quan đến máy chủ của Google. Máy chủ này sẽ ánh xạ vị trí của ARAnchor trong một hệ toạ độ đại diện cho không gian thực tế hiện tại. Yêu cầu máy chủ thành công sẽ trả về một Mã nhận dạng neo trên đám mây mới. Mã này có thể được chia sẻ và dùng để phân giải đường liên kết sau này.

- (void)addAnchorWithTransform:(matrix_float4x4)transform {
  self.arAnchor = [[ARAnchor alloc] initWithTransform:transform];
  [self.sceneView.session addAnchor:self.arAnchor];

  __weak ExampleViewController *weakSelf = self;
  self.hostFuture = [self.cloudAnchorManager
      hostCloudAnchor:self.arAnchor
           completion:^(NSString *anchorId, GARCloudAnchorState cloudState) {
             [weakSelf handleHostAnchor:anchorId cloudState:cloudState];
           }
                error:nil];
  [self enterState:HelloARStateHosting];
}

Phân giải neo

Việc phân giải ARAnchor cho phép các thiết bị Android và iOS trong một không gian thực tế nhất định có thể thêm các quảng cáo cố định đã lưu trữ trước đó vào các cảnh mới.

Yêu cầu phân giải sẽ gửi tới máy chủ Google một mã nhận dạng neo trên đám mây cùng với dữ liệu hình ảnh từ khung hiện tại. Máy chủ sẽ cố gắng so khớp dữ liệu trực quan này với hình ảnh tại vị trí liên kết Cloud Anchors hiện được lưu trữ. Khi giải quyết thành công, một liên kết mới sẽ được thêm vào phiên và trả về.

- (void)resolveAnchorWithIdentifier:(NSString *)identifier {
  GARResolveCloudAnchorFuture *garFuture =
      [self.gSession resolveCloudAnchorWithIdentifier:identifier
                                    completionHandler:completion
                                                error:&error];
}

// Pass the ARFRame to the ARCore session every time there is a frame update.
// This returns a GARFrame that contains a list of updated anchors. If your
// anchor's pose or tracking state changed, your anchor will be in the list.
- (void)cloudAnchorManager:(CloudAnchorManager *)manager didUpdateFrame:(GARFrame *)garFrame {
  for (GARAnchor *garAnchor in garFrame.updatedAnchors) {
    if ([garAnchor isEqual:self.garAnchor] && self.resolvedAnchorNode) {
      self.resolvedAnchorNode.simdTransform = garAnchor.transform;
      self.resolvedAnchorNode.hidden = !garAnchor.hasValidTransform;
    }
  }
}

Mẫu thăm dò ý kiến GARSession không bắt buộc

Nếu bạn đang sử dụng Metal hoặc cần một chế độ thăm dò ý kiến ứng dụng của bạn chạy ở tốc độ tối thiểu là 30 khung hình/giây, hãy sử dụng mẫu sau để truyền ARFrame đến GARSession:

-(void)myOwnPersonalUpdateMethod {
  ARFrame *arFrame = arSession.currentFrame;
  NSError *error = nil;
  GARFrame *garFrame = [garSession update:arFrame error:&error];
  // your update code here
}

Hạn mức API

API ARCore có các hạn mức sau cho băng thông yêu cầu:

Loại hạn mức Tối đa Thời lượng Áp dụng cho
Số lượng neo Vé loại không giới hạn Không áp dụng Dự án
Yêu cầu liên kết máy chủ 30 phút Dự án và địa chỉ IP
Yêu cầu resolve liên kết 300 phút Dự án và địa chỉ IP

Các sự cố đã biết và cách giải quyết

Có một số vấn đề đã biết khi làm việc với SDK ARCore dành cho iOS.

Chế độ cài đặt lược đồ mặc định gây ra sự cố ứng dụng gián đoạn

Theo mặc định, các chế độ cài đặt của tính năng GPU Frame Capture (Chụp khung hình) và Metal API Validation (Xác thực API Kim loại) được bật. Điều này đôi khi có thể khiến ứng dụng gặp sự cố trong SDK.

Chẩn đoán sự cố ứng dụng

Bất cứ khi nào bạn nghi ngờ đã xảy ra sự cố, hãy xem lại dấu vết ngăn xếp. Nếu bạn thấy MTLDebugComputeCommandEncoder trong dấu vết ngăn xếp, thì đó có thể là do chế độ cài đặt giao thức mặc định.

Giải pháp

  1. Chuyển đến Product > Scheme > Edit Scheme….

  2. Mở thẻ Run.

  3. Nhấp vào Options để xem các chế độ cài đặt hiện tại.

  4. Đảm bảo cả GPU Frame CaptureMetal API Validation đều đã tắt.

  5. Tạo bản dựng và chạy ứng dụng của bạn.

Xem CocoaPods CHANGELOG để biết thêm các vấn đề đã biết.

Các điểm hạn chế

SDK ARCore dành cho iOS không hỗ trợ lệnh gọi phương thức ARKit setWorldOrigin(relativeTransform:).

Xem xét hiệu suất

Mức sử dụng bộ nhớ sẽ tăng khi bạn bật API ARCore. Dự kiến mức sử dụng pin của thiết bị sẽ tăng do mức sử dụng mạng và mức sử dụng CPU cao hơn.

Các bước tiếp theo