With TeamViewer Software Development Kit (SDK) you can utilize full Assist AR functionality and provide the best AR remote support experience to your customers by embedding AR remote assistance capabilities within your own mobile apps.

The SDK enables you to have secure and GDPR compliant connections to your customer's devices.

This article applies to all TeamViewer Assist AR users.

3) Click the Create App button.

4) Activate Mobile SDK Token, enter a name, and (optional) add a short description.

5) Activate iOS.

6) Click Create.

Your token is displayed when opening the created app:

Copy this token into your clipboard and paste it to a secure place.

🚨IMPORTANT: Do not share this token with anyone!

Get the TeamViewer Mobile SDK

A. Install TeamViewer SDK as Swift Package Manager

Following are the steps to add the sdk as SPM package to any project:

1. Open the project and click on Package Dependencies

2. Click on the Plus icon in the bottom-left corner:

4. Click on Add Package.

5. Select the target to which this package will be added as dependency.

6. Confirm by clicking on Add Package.

7. TeamViewer SDK will be added as a dependency to the project.

8. The package will also be added to the target (selected in step 5):

9. If the package was not added to the target in step 5, you can do so by clickig the Plus icon as shown before, and selecting the Add Package Dependency to include the SPM package. 

This time, it will appear in the Recent list (shown in step 3):

B. Install Manually:

1) The SDK is available for customers with an Assist AR Professional license and is distributed by the TeamViewer Support team.

2) Download the .zip file, decompress and copy all the included xcframework folders inside of your project folder.

Note: The SDK is distributed as universal XCFramework containing both architectures, iOS arm64 and Simulator x86. We currently do not support Apple Silicon or Mac Catalyst architectures. Additionally, it is possible to distribute with Swift Package Manager (SPM).

3) Link the TVLocalizations and TeamViewerSDK frameworks to your project.

4) Make sure that the option Embed & Sign is selected.

5) You might also need to link against ARKit and CallKit, depending on your implementation.

6) Only if you plan to support CallKit: Link against CallKit.

Setting up your Xcode Project

The TeamViewer SDK uses the camera and microphone during a remote support session.

1) Add the following keys to the Info.Plist file:

  • NSMicrophoneUsageDescription
  • NSCameraUsageDescription

If you do not add those keys, iOS will terminate the application the moment the SDK tries to access the microphone or camera.

Using the TeamViewer SDK

IMPORTANT: The SDK is a single instance class. You cannot directly create one. You should access the shared instance.

1) Initialize the SDK instance with your API Key obtained in the section Prerequisites.

2) Set a delegate conforming to the protocol TeamViewerSDKDelegate.

This ensures you are able to react to events happening during the lifetime of your TeamViewer connection.

3) Connect to a session code

The shared SDK provides a method for establishing a connection to a session code. This session code can be of two types:

  • Remote Support or 
  • Assist AR

4) Create session codes in your TeamViewer client or via the TeamViewer REST API.

The method connectToSessionCode returns a TeamViewer session.

IMPORTANT: You are responsible for keeping this variable alive, and also responsible for freeing up this variable. Failing to do so might result in the session UI being kept alive even after the remote session has ended. 

IMPORTANT: Once the SDK connects to a session code, it enters a waiting state, you get notified about the state change via the delegate method handleSessionCodeOnline.

At this point, you should not allow the user to connect to a different session code. It is only allowed to allow the user to leave the current connection.

On the supporter side, the session code will appear as being online, allowing the client to establish a connection to that session code.

Reacting to incoming connections

The SDK provides delegate methods for reacting to incoming connection events.

Once the connection is initiated on the TeamViewer side, the SDK gets notified about this connection attempt via the delegate method handleConnectionRequestWithAuthenticationData.

On the authentication data parameter there is the name of the supporter, the type of incoming connection (ScreenShare or Assist AR) and a callback function to allow or reject the incoming connection.

If the incoming connection is accepted, the corresponding TeamViewer connection is established.

  • For the ScreenShare connection, a prompt for microphone and screen sharing is shown to the user.

The UI of your application is grabbed using the replay kit and there is bi-directional VoIP communication between the user and the supporter.

  • For the Assist AR connection, the system permissions for camera and microphone access are shown. If the user allows this, the AR session is started. There is bi-directional VoIP communication between the user and the supporter.
  • The delegate method handleConnectionRequestAbort should be implemented in order to be notified when the remote user cancels the connection request. You are responsible to clear any prompts that are shown to the user, or to cancel any CallKit incoming call notifications.

Reacting to optional SDK events

  • handleSupporterConnected: This method gets called when the supporter has ended the session, it also gets called when the user has locally ended the session.
  • handleSupporterDisconnected: This method gets called when the supporter has ended the session, it also gets called when the user has locally ended the session. 

Hint: You should clean the references to the session as the session is considered no longer valid at this point.

  • handleError: This method gets called if the session code or the API token used for establishing a connection are not valid. 

Hint: You should clean the resources used for the current session as the session itself is considered invalid.

Reacting to optional session events

  • handleSessionError: This gets called when an error has occurred during the session. For example, a feature was requested but the compatibility between client and server was not met.

Hint: This error is only informative. You can write it to a log file.

Note about CallKit support

If your application supports CallKit:

  • Provide the TeamViewer SDK with information about the unique identifier of your call.
  • TeamViewer asks the system if there is a running call and does not try to set up a VoIP connection if this is the case.
  • Tell TeamViewer that the current call is yours so we can take over the audio pipeline and start the VoIP transmission:
    1. Call the setupCallUUID method.
    2. Tell the SDK that your call has ended by calling the clearCallUUID method.

Enabling background modes

Ensure that you have at least one of these background modes enabled in your Info.plist file:

  • Audio,
  • AirPlay or
  • Voice over IP background mode. 

IMPORTANT: Failing to do so will cause the app to get suspended only a few seconds after being put in the background during an active TeamViewer session.

Audio setup

The mobile SDK works with the default AVAudioSession configuration values.

  • If you want to override these values to support Bluetooth, Airplay mix, use loudspeakers, etc., make sure to change this before a session is established. In case your application mutes other apps, the recommended point in time to configure the audio session is right before accepting the connection.
  • If your application audio mixes with other apps, you can configure the audio options at the application launch.

Disable VoIP

In case you want to use another means for establishing voice communication, you can disable the VoIP feature entirely by setting the options on the shared SDK instance prior to establishing a connection.

For more information refer to the TVSDKOptions documentation.

Class documentation

All public headers are documented. For detailed information about each class, please refer to the QuickHelp content generated by Xcode ('⌥ '+ click on constant or variable name).