通过TeamViewer 软件开发工具包(SDK),你可以利用完整的Assist AR 功能,通过在你自己的移动应用程序中嵌入AR远程协助功能,为你的客户提供最好的AR远程支持体验。
该SDK使您能够与您客户的设备进行安全和符合GDPR的连接。
本文适用于所有TeamViewer Assist AR 用户。
如果你没有一个TeamViewer 帐户,请按照以下步骤创建一个。
3) 点击创建应用程序按钮。
4) 激活移动SDK令牌,输入名称,并(可选)添加一个简短的描述。
5) 激活安卓系统。
6) 点击创建。
在打开创建的应用程序时,会显示你的令牌。
将此令牌复制到你的剪贴板上并粘贴到一个安全的地方。
🚨重要提示:请勿与任何人分享此信物。
SDK可供拥有Assist AR专业许可证的客户使用,由TeamViewer 支持团队分发。
整合您的TeamViewer 移动SDK
1)TeamViewer Mobile SDK for Android包含以下文件。
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提供了一种方法来建立与会话代码的连接。这个会话代码可以是两种类型。
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提供了回调方法来对传入的连接事件做出反应。
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 连接。
一旦连接在TeamViewer ,SDK就会通过SessionCallback得到关于这个连接尝试的通知。
I) AssistARSession(辅助性会议)。
对于AssistAR会议,请确保->
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。