SDK ARCore cho iOS giao tiếp với ARKit để cung cấp các tính năng của Điểm neo trên đám mây, cho phép bạn chia sẻ điểm neo 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 ARCore Cloud Anchor API hoặc dịch vụ ARCore Cloud Anchor, trong các ứ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
- Cocoapods 1.4.0 trở lên nếu bạn sử dụng Cocoapods
- Một thiết bị Apple tương thích với ARKit chạy iOS 12.0 trở lên (mục tiêu triển khai bắt buộc đối với iOS 12.0 trở lên)
Nếu bạn mới sử dụng Cloud Anchors:
Hãy đảm bảo rằng bạn hiểu rõ quy trình dùng để lưu trữ và phân giải một Điểm liên kết trên đám mây.
Đọc kỹ hướng dẫn bắt đầu nhanh để biết các yêu cầu về hệ thống, hướng dẫn thiết lập và cài đặt.
Xem một trong các mẫu về Điểm neo trên đám mây
Bật tính năng Điểm neo trên đám mây trong ứng dụng
Để sử dụng API Cloud Anchors, bạn phải tạo một 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 ARCore API cho ứng dụng của bạn.
Lưu trữ và phân giải quảng cáo cố định
Bạn có thể lưu trữ và phân giải các neo trên đám mây bằng API 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 Future có thể được thăm dò ý kiến.
Tổ chức một nút neo
Việc lưu trữ ARAnchor
sẽ đặt neo trong một hệ toạ độ chung cho bất kỳ không gian thực nào.
Yêu cầu của máy chủ gửi dữ liệu hình ảnh đến máy chủ của Google. Máy chủ này sẽ liên kết vị trí của ARAnchor
trong hệ toạ độ biểu thị không gian thực tế hiện tại. Đáp
khi yêu cầu lưu trữ thành công, sẽ trả về một mã Cloud Anchor mới có thể được chia sẻ và
dùng để phân giải quảng cáo cố định 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];
}
Giải quyết một neo
Việc giải quyết ARAnchor
cho phép các thiết bị Android và iOS ở trong một không gian thực tế nhất định
để thêm quảng cáo cố định được lưu trữ trước đó vào cảnh mới.
Yêu cầu phân giải sẽ gửi cho máy chủ Google một mã neo trên đám mây cùng với dữ liệu trực quan khỏi khung hiện tại. Máy chủ sẽ cố gắng so khớp dữ liệu hình ảnh này với hình ảnh của vị trí được liên kết với Điểm neo trên đám mây hiện đang được lưu trữ. Khi giải quyết thành công, một neo mới sẽ được thêm vào phiên và được 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 có tuỳ chọn thăm dò ý kiến, và ứng dụng của bạn chạy ở
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 đây đối với 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 quảng cáo cố định | Vé loại không giới hạn | Không áp dụng | Dự án |
Yêu cầu máy chủ cố định | 30 | phút | Địa chỉ IP và dự án |
Yêu cầu giải quyết liên kết cố định | 300 | phút | Địa chỉ IP và dự án |
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 không liên tục
Chế độ cài đặt lược đồ Chụp GPU và Xác thực API kim loại được bật bằng mặc định, đ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ờ có sự cố đã xảy ra, hãy xem dấu vết ngăn xếp của bạn.
Nếu bạn thấy MTLDebugComputeCommandEncoder
trong dấu vết ngăn xếp, thì có thể là do
thành chế độ cài đặt giao thức mặc định.
Giải pháp
Chuyển đến Product > Scheme > Edit Scheme….
Mở thẻ Run.
Nhấp vào Options để xem chế độ cài đặt hiện tại.
Hãy đảm bảo rằng cả GPU Frame Capture và Metal API Validation đều tắt.
Tạo bản dựng và chạy ứng dụng của bạn.
Hãy xem CHANGELOG
của Cocoapods để 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 setWorldOrigin(relativeTransform:)
của ARKit.
Xem xét hiệu suất
Mức sử dụng bộ nhớ tăng lên khi bạn bật API ARCore. Dự kiến mức sử dụng pin của thiết bị tăng lên do mức sử dụng mạng và mức sử dụng CPU cao hơn.