L'SDK ARCore per iOS si interfaccia con ARKit per fornire funzionalità di Cloud Anchor, consentendoti di condividere ancore tra dispositivi iOS e Android nello stesso ambiente.
Scopri come utilizzare l'API ARCore Cloud Anchor o il servizio ARCore Cloud Anchor nelle tue app.
Prerequisiti
- Xcode versione 13.0 o successive
- Cocoapods 1.4.0 o versione successiva se utilizzi Cocoapods
- Un dispositivo Apple compatibile con ARKit con iOS 12.0 o versioni successive (è necessario un target di deployment di iOS 12.0 o versioni successive)
Se non hai mai utilizzato Cloud Anchors:
Assicurati di comprendere il processo utilizzato per ospitare e risolvere un account Cloud Effettua ancoraggio.
Leggi la guida introduttiva per i requisiti di sistema, la configurazione e le istruzioni di installazione.
Dai un'occhiata a uno degli esempi di anchor Cloud
Abilita gli ancoraggi Cloud nella tua app
Per utilizzare l'API Cloud Anchors, devi creare una
GARSessionConfiguration
:
e imposta la proprietà cloudAnchorMode
, come descritto in
Configura una sessione ARCore in iOS. Utilizza le funzionalità di
setConfiguration:error: (GARSession)
per impostare la configurazione.
Devi anche abilitare l'API ARCore. per la tua applicazione.
Gestire e risolvere gli ancoraggi
Puoi ospitare e risolvere gli ancoraggi cloud con l'API ARCore Cloud Anchor. L'API include metodi di callback per le operazioni completate, nonché gli oggetti futuri che possono essere intervistati.
Ospita un ancoraggio
L'hosting di un ARAnchor
inserisce l'ancora in un sistema di coordinate comune per qualsiasi spazio fisico.
Una richiesta di host invia dati visivi a un server Google, che mappa il server ARAnchor
posizione in un sistema di coordinate che rappresenta lo spazio fisico attuale. R
una richiesta host completata restituisce un nuovo ID di ancoraggio Cloud, che può essere condiviso
per risolvere l'anchor in un secondo momento.
- (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];
}
Risolvere un'ancora
La risoluzione di un ARAnchor
consente ai dispositivi Android e iOS in un determinato spazio fisico di aggiungere ancore ospitate in precedenza a nuove scene.
Una richiesta di risoluzione invia a un server Google un ID Cloud anchor insieme a dati visivi dal frame corrente. Il server tenterà di abbinare questi dati visivi alle immagini della posizione in cui sono mappati gli ancoraggi cloud attualmente ospitati. Se la risoluzione va a buon fine, viene aggiunto e restituito un nuovo ancora alla sessione.
- (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;
}
}
}
Pattern di polling GARSession
facoltativo
Se usi Metal o ti serve un'opzione di polling e la tua app viene eseguita a un
almeno 30 f/s, usa il seguente pattern per passare ARFrame
s alla
GARSession
:
-(void)myOwnPersonalUpdateMethod {
ARFrame *arFrame = arSession.currentFrame;
NSError *error = nil;
GARFrame *garFrame = [garSession update:arFrame error:&error];
// your update code here
}
Quote API
L'API ARCore ha le seguenti quote per la larghezza di banda delle richieste:
Tipo di quota | Massimo | Durata | Si applica a |
---|---|---|---|
Numero di ancoraggi | Illimitato | N/D | Progetto |
Richieste di hosting dell'ancora | 30 | minuto | Indirizzo IP e progetto |
Richieste di risoluzione dell'ancora | 300 | minuto | Indirizzo IP e progetto |
Problemi noti e soluzioni alternative
Esistono alcuni problemi noti relativi all'utilizzo dell'SDK ARCore per iOS.
Le impostazioni predefinite dello schema causano arresti anomali intermittenti dell'app
Le impostazioni dello schema di convalida dell'API Metal e della funzionalità di acquisizione frame della GPU sono attivate per impostazione predefinita, il che a volte può causare l'arresto anomalo dell'app all'interno dell'SDK.
Diagnosticare un arresto anomalo dell'app
Ogni volta che sospetti che si sia verificato un arresto anomalo, dai un'occhiata alla traccia dello stack.
Se vedi MTLDebugComputeCommandEncoder
nell'analisi dello stack, probabilmente la causa è
alle impostazioni predefinite dello schema.
Soluzione
Vai a Product > Scheme > Edit Scheme….
Apri la scheda Run.
Fai clic su Options per visualizzare le impostazioni correnti.
Assicurati che GPU Frame Capture e Metal API Validation siano disattivati.
Crea ed esegui la tua app.
Per altri problemi noti, consulta la pagina CHANGELOG
di Cocoapods.
Limitazioni
L'SDK ARCore per iOS non supporta la chiamata al metodo ARKit setWorldOrigin(relativeTransform:)
.
Considerazioni sulle prestazioni
L'utilizzo della memoria aumenta quando attivi l'API ARCore. L'utilizzo della batteria del dispositivo dovrebbe aumentare a causa di un maggiore utilizzo della rete e della CPU.