TeamViewer ソフトウェア開発キット(SDK)を使えば、Assist AR の機能をフルに活用し、自社のモバイルアプリにAR遠隔支援機能を埋め込んで、顧客に最高のAR遠隔支援体験を提供することができます。

SDKを使用することで、お客様の端末に安全かつGDPRに準拠した接続を行うことができます。

この記事は、TeamViewer Assist AR 、すべてのユーザーに適用されます。

前提条件

  • Android 5.0以上
  • 既存のTeamViewer アカウント

TeamViewer のアカウントをお持ちでない方は、以下の手順でアカウントを作成してください。

  1. https://login.teamviewer.com/にアクセスし、サインアップをクリックします。
  2. アカウントを作成し、メールアドレスを確認するためのステップを完了します。

APIキーの生成

1)https://login.teamviewer.com/にアクセスし、TeamViewer アカウントでサインインします。

2)ページ下部の「アプリ」をクリックします。

3)「アプリを作成」ボタンをクリックします。

4) Mobile SDK Tokenを有効にし、名前・(オプションで)短い説明を追加します。

5)Androidを有効にします。

6)「Create(作成)」をクリックします。

作成したアプリを開くと、トークンが表示されます。

このトークンをクリップボードにコピーして、安全な場所に貼り付けてください。

🚨重要:このトークンを誰にも教えないでください。

TeamViewer モバイルソフトウェア開発キット入手する

SDKは、Assist AR Professionalライセンスをお持ちのお客様を対象に、TeamViewer サポートチームより配布しています。

TeamViewer モバイルSDKを統合する

1) Android用TeamViewer モバイルSDKには以下のファイルが含まれます:

  • TeamViewerSdk.aar (TeamViewer モバイルSDK)
  • AssistARSessionUI.aar (SDKを使用してAssistAR セッションを確立する場合のみ必要)
  • ScreenSharingSdk-docs (TeamViewerSdkのドキュメント)
  • AssistARSessionUI-docs (AssistARSessionUIのドキュメント)
  • デモアプリは、https://github.com/teamviewer/TravelApp/でご覧いただけます。

2) アプリディレクトリの下に libs フォルダを作成し、そこに *.aar ファイルをコピーします。

📌注意: 本 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" 
}

最新の依存関係リストを入手するには、TeamViewer から受け取る SDK パッケージの一部である AssistARSessionUI-docs/index.html を確認してください。

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は、セッションコードへの接続を確立するための方法を提供します。このセッションコードには、2つのタイプがあります。

  • Remote Supportまたは
  • Assist AR

6) TeamViewer クライアント (必要なセッションに基づいて Remote Support または AssistAR のタイプを選択) または TeamViewer REST API 経由でセッション コードを作成します。

teamViewerSdk.connectToSessionCode(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 セッションのマイク使用許可の確認は、SessionCallback でアプリ開発が実装する必要があります)。
  • Assist AR 接続の場合、カメラとマイクへのアクセスに関するシステム権限が表示されます。 ユーザーがこれを許可すると、AR セッションが開始されます。
  • クライアント/エキスパートがサーバーにファイルを送信した場合、セッションの終了後にファイルをダウンロード ディレクトリに移動するためのストレージ許可が求められます。
  • ユーザーとサポーターの間には、双方向のVoIP通信があります。マイクの初期状態はミュートされていませんが、sdk BuilderのメソッドwithMicInitiallyMuted(boolean muted)を使用して変更することが可能です。

2) SessionCallback

TeamViewer 側で接続が開始されると、SessionCallback を介してこの接続の試行について SDK に通知されます。

I) AssistARSession (AssistARSession)。

AssistARセッションの場合は、必ず以下の設定を確認してください。

  • AssistARSessionUI.currentSession = session in onSessionStarted()を設定します。
  • 以下のコードで説明されているように、AssistARSessionActivityを起動します。
  • onSessionEnded() で AssistARSessionUI.currentSession = null を設定します。
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を渡すのは必須です。これは、共有ドキュメントがダウンロード フォルダーに保存されるフォルダーの名前であるためです。詳細は AssistARSessionUI-docs/-pilot-session-u-i/com.teamviewer.sdk.assistarsessionui/-assist-a-r-session-u-i/create-intent-for-assist-a-r-session-activity.html をご確認ください。

II) ScreenSharingSession:

VOIP を使用する場合、ScreenSharingSession は OnSessionStarted() でマイクの許可を要求する必要があります。

Logging:

Builder メソッドwithLogger(Logger callback)は、TeamViewer Sdk からのすべてのログ出力が委譲される Logger コールバックを設定します。

このコールバックおよび Sdk ビルダーで利用可能なその他の追加のコールバックの詳細を確認するには、ScreenSharingSdk-docs/com/teamviewer/sdk/screensharing/TeamViewerSdk.Builder.html を参照してください。