通过TeamViewer 软件开发工具包(SDK),你可以利用完整的Assist AR 功能,通过在你自己的移动应用程序中嵌入AR远程协助功能,为你的客户提供最好的AR远程支持体验。

该SDK使您能够与您客户的设备进行安全和符合GDPR的连接。

本文适用于所有TeamViewer Assist AR 用户。

先决条件

  • 安卓5.0及以上版本
  • 一个现有的TeamViewer 账户

如果你没有一个TeamViewer 帐户,请按照以下步骤创建一个。

  1. 进入https://login.teamviewer.com/并点击注册
  2. 完成创建账户的步骤,并验证您的电子邮件地址。

生成一个API密钥

1) 进入https://login.teamviewer.com/,用你的TeamViewer 账户登录。

2) 在页面的底部,点击应用程序

3) 点击创建应用程序按钮。

4) 激活移动SDK令牌,输入名称,并(可选)添加一个简短的描述。

5) 激活安卓系统

6) 点击创建

在打开创建的应用程序时,会显示你的令牌。

将此令牌复制到你的剪贴板上并粘贴到一个安全的地方。

🚨重要提示请勿与任何人分享此信物。

获取TeamViewer 移动SDK

SDK可供拥有Assist AR专业许可证的客户使用,由TeamViewer 支持团队分发。

整合您的TeamViewer 移动SDK

1)TeamViewer Mobile SDK for Android包含以下文件。

  1. TeamViewerSdk.aar (TeamViewer Mobile SDK)
  2. AssistARSessionUI.aar(只有当你想使用SDK建立AssistAR会话时才需要)。
  3. ScreenSharingSdk-docs (TeamViewerSdk文档)
  4. AssistARSessionUI-docs(AssistARSessionUI文档)。
  5. 该演示应用程序可在https://github.com/teamviewer/TravelApp/下获得。

2) 在你的应用程序目录下创建一个libs文件夹,并将*.ar文件复制到那里。

📌注意:SDK支持以下架构:armeabi-v7a, arm64-v8a, x86, x86_64。

3) 启用ViewBinding,并在你的应用程序的build.gradle中添加以下依赖项。

android { 
 
   buildFeatures { 
      viewBinding true 
   } 
} 
 
dependencies { 
   implementation files('libs/TeamViewerSdk.aar') 
   implementation files('libs/AssistARSessionUI.aar') //(Add only if you plan to use AssistAR(AssistAR) Session 
    
// Add dependencies of AssistARSessionUI.aar(Add only if you plan to use AssistAR Session): 
   runtimeOnly "androidx.camera:camera-camera2:1.0.2" 
   runtimeOnly "androidx.camera:camera-lifecycle:1.0.2" 
   runtimeOnly "androidx.constraintlayout:constraintlayout:2.0.4" 
   runtimeOnly "androidx.fragment:fragment-ktx:1.3.6" 
   runtimeOnly "androidx.lifecycle:lifecycle-livedata-ktx:2.3.1" 
   runtimeOnly "androidx.work:work-runtime-ktx:2.5.0" 
   runtimeOnly "com.google.android.material:material:1.4.0" 
   runtimeOnly "de.javagl:obj:0.3.0" 
   runtimeOnly "org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.5.31" 
   runtimeOnly "com.google.android.gms:play-services-mlkit-text-recognition:17.0.0" 
   runtimeOnly "com.squareup.picasso:picasso:2.8" 
}

要获得最新的依赖性列表,请查看AssistARSessionUI-docs/index.html,这将是你从TeamViewer 收到的SDK包的一部分。

4) 建立TeamViewerSdk对象。

    teamViewerSdk = TeamViewerSdk.Builder(context) 
        .withToken(SDK_TOKEN) 
        .withAuthenticationCallback(sdkAuthenticationCallback) 
        .withSessionCallback(sdkSessionCallback) 
        .withErrorCallback(sdkErrorCallback) 
        .withOnlineStateCallback(onlineStateCallback) 
        .withMicInitiallyMuted(true) 
        .build() 
} 

上面的例子显示了使用SDK_TOKEN创建teamViewerSdk对象使用上面 "生成API密钥部分 "第7步中创建的 SDK_TOKEN )。

请访问ScreenSharingSdk-docs/com/teamviewer/sdk/screensharing/TeamViewerSdk.Builder.html以了解更多关于这些构建方法的细节。 该文档将是你从TeamViewer 收到的SDK包的一部分。

5) 连接到一个会话代码

共享SDK提供了一种方法来建立与会话代码的连接。这个会话代码可以是两种类型。

  • 远程支持或
  • Assist AR

6) 在你的TeamViewer 客户端(根据你想要的会话选择远程支持AssistAR类型)或通过TeamViewer REST API创建会话代码。

teamViewerSdk.connectToSessionCode(sessionCode)

一旦sessionCode在线,就可以从TeamViewer 客户端启动连接。

可以使用OnlineStateCallback

(ScreenSharingSdk-docs/com/teamviewer/sdk/screensharing/TeamViewerSdk.Builder.html#withOnlineStateCallback
(com.teamviewer.sdk.screensharing.OnlineStateCallback)

检查会话代码状态。

OnlineStateCallback对于获得SDK在线/离线/连接状态的通知非常有用。

private val onlineStateCallback = OnlineStateCallback { onlineState -> 
    val isSdkOnline = OnlineStateCallback.OnlineState.OFFLINE 
    val isSdkOffline = OnlineStateCallback.OnlineState.ONLINE 
    val isSessionCodeConnected = OnlineStateCallback.OnlineState.CONNECTED 
}

ErrorCallback对于处理SDK在会话代码无效、过期或关闭时发送的错误代码很有用。

( ScreenSharingSdk-docs/com/teamviewer/sdk/screensharing/TeamViewerSdk.Builder.html#withErrorCallback
(com.teamviewer.sdk.screensharing.ErrorCallback) )
private val sdkErrorCallback = ErrorCallback { errorCode -> 
    val invalid = errorCode == ErrorCallback.ErrorCode.SESSION_CODE_INVALID 
    val expired = errorCode == ErrorCallback.ErrorCode.SESSION_CODE_EXPIRED 
    val closed = errorCode == ErrorCallback.ErrorCode.SESSION_CODE_CLOSED 
}

对进入的连接作出反应

SDK提供了回调方法来对传入的连接事件做出反应。

1) AuthenticationCallback

AuthenticationCallback对于处理传入的连接很有用。

AuthenticationData参数包含支持者的名字和一个回调函数,允许或拒绝传入的连接。

private val sdkAuthenticationCallback = object : AuthenticationCallback { 
    override fun onAuthentication(data: AuthenticationData?) { 
	//set true to accept call, set false to reject call 
        data?.callback?.onAuthenticationResult(true) 
        Logging.info(TAG, "TeamViewer connected to ${data?.partnerName}") 
    } 
 
    override fun onAuthenticationCanceled() { 
        // Is called when TeamViewer Authentication was cancelled from TeamViewer client/expert side 
    } 
}

如果接收到的连接被接受,就会建立相应的TeamViewer 连接。

  • 对于ScreenShare连接,会向用户显示一个麦克风权限的提示。(要求ScreenShare会话的麦克风许可应该由App开发者在SessionCallback中实现)。
  • 对于Assist AR 连接,显示了摄像头和麦克风访问的系统权限。如果用户允许,AR会话就开始了。
  • 如果客户/专家向服务器发送文件,在会话结束后会要求存储权限将文件移动到下载目录。
  • 用户和支持者之间有双向的VoIP通信。最初的麦克风状态是无声的,但可以使用sdk Builder方法withMicInitiallyMuted(boolean muted)来改变。

2) SessionCallback

一旦连接在TeamViewer ,SDK就会通过SessionCallback得到关于这个连接尝试的通知。

I) AssistARSession(辅助性会议)。

对于AssistAR会议,请确保->

  • 设置AssistARSessionUI.currentSession = session in onSessionStarted()
  • 启动AssistARSessionActivity,如下面的代码中所述。
  • 设置AssistARSessionUI.currentSession = null in onSessionEnded()
private val sdkSessionCallback = object : SessionCallback { 
    override fun onSessionStarted(session: TeamViewerSession?) { 
        if (session is AssistARSession) { 
            AssistARSessionUI.currentSession = session 
            val intent = AssistARSessionUI.createIntentForAssistARSessionActivity(context, "StorageFolderName") 
            intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK 
            context.startActivity(intent) 
        } 
  	if (session is ScreenSharingSession) { 
//Request microphone permission if you intend to use VOIP with ScreenShare Session 
       } 
    } 
 
    override fun onSessionEnded() { 
        Logging.info(TAG, "TeamViewer Session ended") 
        AssistARSessionUI.currentSession = null 
    } 
} 

在这里向createIntentForAssistARSessionActivity方法传递storageFolderName是必须的,因为这是共享文档将被存储在Download文件夹下的文件夹的名称。详情请查看AssistARSessionUI-docs/-pilot-session-u-i/com.teamviewer.sdk.assistarsessionui/-assist-a-r-session-u-i/create-intentfor-assist-a-r-session-activity.html

II)ScreenSharingSession。

如果你打算使用VOIP,ScreenSharingSession需要在OnSessionStarted()中申请麦克风权限。

记录

Builder方法withLogger(Logger callback)设置一个Logger回调,来自TeamViewer Sdk的所有日志输出都被委托给该回调。

要查看这个回调的细节以及Sdk builder提供的其他回调,请访问ScreenSharingSdk-docs/com/teamviewer/sdk/screensharing/TeamViewerSdk.Builder.html。