Interfejsy ARCore SDK na iOS z ARKit do obsługi usługi Cloud Anchor umożliwia udostępnianie zakotwiczonych elementów między urządzeniami z iOS i Androidem w tym samym środowisku.
Dowiedz się, jak używać ARCore Cloud Anchor API lub ARCore Cloud Anchor we własnych aplikacjach.
Wymagania wstępne
- Xcode w wersji 13.0 lub nowszej,
- Cocoapods w wersji 1.4.0 lub nowszej, jeśli używasz Cocoapods,
- urządzenie Apple z systemem iOS 12.0 lub nowszym zgodne z ARKit, (wymagane jest miejsce docelowe wdrożenia na iOS w wersji 12.0 lub nowszej)
Jeśli dopiero zaczynasz korzystać z Cloud Anchors:
Upewnij się, że znasz proces służący do hostowania i rozwiązywania problemów w chmurze Reklama zakotwiczona.
Zapoznaj się z krótkim wprowadzeniem dotyczącym wymagań systemowych. instalacji i instalacji.
Zapoznaj się z jednym z przykładów usługi Cloud Anchor.
Włączanie Cloud Anchors w swojej aplikacji
Aby użyć interfejsu API Cloud Anchors, musisz utworzyć
GARSessionConfiguration
.
i ustawić dla niej właściwość cloudAnchorMode
, jak opisano w
Skonfiguruj sesję ARCore w iOS. Używaj
setConfiguration:error: (GARSession)
aby ustawić konfigurację.
Musisz też włączyć ARCore API dla Twojej aplikacji.
Hostowanie i rozwiązywanie reklam zakotwiczonych
Możesz hostować i rozwiązywać kotwice w chmurze za pomocą interfejsu ARCore Cloud Anchor API. Interfejs API obejmuje metody wywołań zwrotnych dla zakończonych operacji oraz obiekty przyszłe które mogą być ankietowane.
Hostowanie kotwicy
Hostowanie elementu ARAnchor
powoduje umieszczenie reklamy zakotwiczonej we wspólnym układzie współrzędnych dla
w przestrzeni fizycznej.
Żądanie hosta wysyła dane wizualne do serwera Google, który mapuje interfejs ARAnchor
położenie w układzie współrzędnych, który reprezentuje bieżącą przestrzeń fizyczną. O
pomyślne żądanie hosta zwraca nowy identyfikator Cloud Anchor ID, który można udostępnić oraz
i służą do późniejszego rozpoznania kotwicy.
- (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];
}
Rozwiązywanie kotwicy
Rozwiązanie problemu ARAnchor
pozwala urządzeniom z Androidem i iOS w danej przestrzeni fizycznej
aby dodać wcześniej hostowane reklamy zakotwiczone do nowych scen.
Żądanie rozwiązania wysyła do serwera Google identyfikator kotwicy w chmurze wraz z danymi wizualnymi od bieżącej klatki. Serwer spróbuje dopasować te dane wizualne wraz ze zdjęciami miejsc, w których są mapowane aktualnie hostowane elementy zakotwiczone Cloud Anchor. Kiedy zostanie rozwiązany, do sesji zostanie dodana nowa kotwica, która zostanie zwrócona.
- (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;
}
}
}
Opcjonalny wzorzec odpytywania GARSession
Jeśli używasz metalu lub potrzebujesz opcji ankiet i Twoja aplikacja działa na
minimalnie 30 kl./s, użyj poniższego wzoru, aby przekazać ARFrame
w
GARSession
:
-(void)myOwnPersonalUpdateMethod {
ARFrame *arFrame = arSession.currentFrame;
NSError *error = nil;
GARFrame *garFrame = [garSession update:arFrame error:&error];
// your update code here
}
Limity interfejsu API
Interfejs ARCore API ma następujące limity przepustowości żądań:
Typ limitu | Maksimum | Czas trwania | Dotyczy: |
---|---|---|---|
Liczba reklam zakotwiczonych | Bez ograniczeń | Nie dotyczy | Projekt |
Żądania hosta kotwicy | 30 | minuta | Adres IP i projekt |
Rozwiązywanie żądań zakotwiczenia | 300 | minuta | Adres IP i projekt |
Znane problemy i sposoby ich obejścia
Podczas pracy z pakietem ARCore SDK na iOS występuje kilka znanych problemów.
Ustawienia schematu domyślnego powodują sporadyczną awarię aplikacji
Ustawienia schematu GPU Frame Capture i Metal weryfikacji API są włączone przez co może czasami powodować awarię aplikacji z poziomu pakietu SDK.
Diagnozowanie awarii aplikacji
Gdy podejrzewasz, że wystąpiła awaria, sprawdź zrzut stosu.
Jeśli w zrzucie stosu widzisz stan MTLDebugComputeCommandEncoder
, prawdopodobnie jest to spowodowane
do domyślnych ustawień schematu.
Obejście
Jedź do: Product > Scheme > Edit Scheme….
Otwórz kartę Run.
Kliknij Options, aby wyświetlić bieżące ustawienia.
Upewnij się, że funkcje GPU Frame Capture i Metal API Validation są wyłączone.
Utworzyć i uruchomić aplikację.
Dodatkowe znane problemy znajdziesz w artykule CHANGELOG
Cocoapods.
Ograniczenia
Pakiet ARCore SDK na iOS nie obsługuje wywołania metody ARKit setWorldOrigin(relativeTransform:)
.
Możliwe spowolnienie działania witryny
Wykorzystanie pamięci zwiększy się po włączeniu interfejsu ARCore API. Oczekuj wykorzystanie baterii przez urządzenie wzrośnie z powodu większego wykorzystania sieci i CPU.