常规
本文适用于所有TeamViewer Assist AR 用户。
通过TeamViewer 软件开发工具包(SDK),你可以利用完整的Assist AR 功能,通过在你自己的移动应用程序中嵌入AR远程协助功能,为你的客户提供最好的AR远程支持体验。
该SDK使您能够与您客户的设备进行安全和符合GDPR的连接。
先决条件
- 安卓5.0及以上版本
- 一个现有的TeamViewer 账户
如果你没有一个TeamViewer 帐户,请按照以下步骤创建一个。
- 进入https://login.teamviewer.com/并点击注册。
- 完成创建账户的步骤,并验证您的电子邮件地址。
生成一个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包含以下文件。
- TeamViewerSdk.aar (TeamViewer Mobile SDK)
- AssistARSessionUI.aar(只有当你想使用SDK建立AssistAR会话时才需要)。
- ScreenSharingSdk-docs (TeamViewerSdk文档)
- AssistARSessionUI-docs(AssistARSessionUI文档)。
- 该演示应用程序可在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提供了一种方法来建立与会话代码的连接。这个会话代码可以是两种类型。
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。