GARSession(CloudAnchors)

Category adding Cloud Anchor functionality to GARSession.

Summary

Public methods

estimateFeatureMapQualityForHosting:error:
Estimates the quality of the visual features seen by ARCore in the preceding few seconds and visible from the provided camera transform.
hostCloudAnchor:TTLDays:completionHandler:error:
Uses the transform and other data from anchor to host a new Cloud Anchor.
hostCloudAnchor:TTLDays:error:
nullable GARAnchor *
This will create a new Cloud Anchor with a given lifetime in days, using the transform of the provided anchor.
hostCloudAnchor:error:
nullable GARAnchor *
Hosts a new Cloud Anchor based on an ARAnchor.
resolveCloudAnchorWithIdentifier:completionHandler:error:
Attempts to resolve a Cloud Anchor using the provided identifier.
resolveCloudAnchorWithIdentifier:error:
nullable GARAnchor *
Resolves a Cloud Anchor with a given identifier.

Public methods

estimateFeatureMapQualityForHosting:error:

- (GARFeatureMapQuality)estimateFeatureMapQualityForHosting:
(simd_float4x4) transform
error:
(NSError **) error

Estimates the quality of the visual features seen by ARCore in the preceding few seconds and visible from the provided camera transform.

Cloud Anchors hosted using higher quality features will generally result in easier and more accurately resolved Cloud Anchor transforms.

Details
Parameters
transform
The camera transform to use in estimating the quality.
error
Out parameter for an NSError. Possible errors:
Returns
The estimated quality of the visual features seen by ARCore in the preceding few seconds and visible from the provided camera transform.
Extends class GARSession.

hostCloudAnchor:TTLDays:completionHandler:error:

- (nullable GARHostCloudAnchorFuture *)hostCloudAnchor:
(ARAnchor *) anchor
TTLDays:
(NSInteger) TTLDays
completionHandler:
(void(^)(NSString *_Nullable cloudIdentifier, GARCloudAnchorState cloudState)) completionHandler
error:
(NSError **) error

Uses the transform and other data from anchor to host a new Cloud Anchor.

A Cloud Anchor is assigned an identifier that can be used to create an GARAnchor in the same position in subsequent sessions across devices using resolveCloudAnchorWithIdentifier:completionHandler:error:. See the Cloud Anchors developer guide for more information.

The duration that a Cloud Anchor can be resolved for is specified by TTLDays. When using Token authorization, the maximum allowed value is 365 days. When using an API Key to authenticate with the ARCore API, the maximum allowed value is 1 day.

This launches an asynchronous operation used to query the Google Cloud ARCore API. See GARFuture for information on obtaining results and cancelling the operation.

Cloud Anchors requires a GARSessionConfiguration with GARCloudAnchorModeEnabled set on this session. Use GARSessionConfiguration.cloudAnchorMode to set the Cloud Anchor API mode and setConfiguration:error: (GARSession) to configure the session.

Hosting a Cloud Anchor works best when ARCore is able to create a good feature map around the ARAnchor. Use estimateFeatureMapQualityForHosting:error: to determine the quality of visual features seen by ARCore in the preceding few seconds. Cloud Anchors hosted using higher quality features will generally result in quicker and more accurately resolved Cloud Anchor transforms.

ARCore can have up to 40 simultaneous Cloud Anchor operations, including resolved anchors and active hosting operations.

Details
Parameters
anchor
The ARAnchor with the desired transform to be used to create a hosted Cloud Anchor.
TTLDays
The lifetime of the anchor in days. Must be positive.
completionHandler
The completion block to execute on the Main thread when the operation is complete, unless the operation is cancelled.
error
Out parameter for an NSError. Possible errors:
Returns
A handle to the async operation that can be polled or cancelled.
Extends class GARSession.

hostCloudAnchor:TTLDays:error:

- (nullable GARAnchor *)hostCloudAnchor:
(ARAnchor *) anchor
TTLDays:
(NSInteger) TTLDays
error:
(NSError **) error

This will create a new Cloud Anchor with a given lifetime in days, using the transform of the provided anchor.

The cloud state of the returned anchor will be set to GARCloudAnchorStateTaskInProgress and the initial transform will be set to the transform of the provided anchor. However, the returned anchor is completely independent of the original anchor, and the two transforms might diverge over time.

Hosting requires an active session for which the tracking state is ARTrackingStateNormal, as well as a working internet connection. ARCore will continue to retry silently in the background if it is unable to establish a connection to the ARCore API service.

Details
Parameters
anchor
The ARAnchor with the desired transform to be used to create a hosted Cloud Anchor.
TTLDays
The lifetime of the anchor in days. Must be positive. The maximum allowed value is 1 if using an API Key to authenticate with the ARCore API service, otherwise the maximum allowed value is 365.
error
Out parameter for an NSError. Possible errors:
Returns
The new GARAnchor, or nil if there is an error.
Extends class GARSession.

hostCloudAnchor:error:

- (nullable GARAnchor *)hostCloudAnchor:
(ARAnchor *) anchor
error:
(NSError **) error

Hosts a new Cloud Anchor based on an ARAnchor.

The new anchor will have a cloud state of GARCloudAnchorStateTaskInProgress and its initial transform will be set to that of the passed-in anchor. However, the two transforms may differ over time.

Details
Parameters
anchor
The ARAnchor to host.
error
Out parameter for an NSError. Possible errors:
Returns
The new GARAnchor, or nil if there is an error.
Extends class GARSession.

resolveCloudAnchorWithIdentifier:completionHandler:error:

- (nullable GARResolveCloudAnchorFuture *)resolveCloudAnchorWithIdentifier:
(NSString *) identifier
completionHandler:
(void(^)(GARAnchor *_Nullable anchor, GARCloudAnchorState cloudState)) completionHandler
error:
(NSError **) error

Attempts to resolve a Cloud Anchor using the provided identifier.

The Cloud Anchor must previously have been hosted by hostCloudAnchor:TTLDays:completionHandler:error: or another Cloud Anchor hosting method within the allotted TTLDays. See the Cloud Anchors developer guide for more information.

This launches an asynchronous operation used to query the Google Cloud ARCore API. See GARFuture for information on obtaining results and cancelling the operation.

When resolving a Cloud Anchor, the ARCore API periodically compares visual features from the scene against the anchor's 3D feature map to pinpoint the user's position and orientation relative to the anchor. When it finds a match, the task completes.

Cloud Anchors requires a GARSessionConfiguration with GARCloudAnchorModeEnabled set on this session. Use GARSessionConfiguration.cloudAnchorMode to set the Cloud Anchor API mode and setConfiguration:error: (GARSession) to configure the session.

ARCore can have up to 40 simultaneous Cloud Anchor operations, including resolved anchors and active hosting operations.

Details
Parameters
identifier
The Cloud Anchor identifier for the anchor.
completionHandler
Completion handler to be invoked on the Main thread, if not nil.
error
Out parameter for an NSError. Possible errors:
Returns
A handle to the async operation that can be polled or cancelled.
Extends class GARSession.

resolveCloudAnchorWithIdentifier:error:

- (nullable GARAnchor *)resolveCloudAnchorWithIdentifier:
(NSString *) identifier
error:
(NSError **) error

Resolves a Cloud Anchor with a given identifier.

The new anchor is immediately added to the session and returned, but without a valid transform. You don’t need to wait for a call to resolve a Cloud Anchor to complete before initiating another call. A session can be resolving up to 40 Cloud Anchors at a given time. If resolving fails, the anchor will be automatically removed from the session.

Details
Parameters
identifier
The Cloud Anchor identifier for the anchor.
error
Out parameter for an NSError. Possible errors:
Returns
The new GARAnchor, or nil if there is an error.
Extends class GARSession.