Android 에서의 구루미 OPEN API 사용 가이드 입니다.

👍

최소 요구 사항

  1. Android 21 이상 (SDK version 21)
  2. android.permission.CAMERA 허용 필수
  3. android.permission.RECORD_AUDIO 허용 필수
  4. android.permission.MODIFY_AUDIO_SETTINGS 허용 필수
1280

☁️ Manifest 설정 (필수)

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
1280

☁️ Manifest 설정 (옵션)

블루투스 기기 사용시 추가 권한 설정

<!-- Request legacy Bluetooth permissions on older devices. -->
<uses-permission android:name="android.permission.BLUETOOTH"
                 android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"
                 android:maxSdkVersion="30" />

<!-- Android 12 Permission -->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
1280

☁️ Webview 설정 (필수)

webView.settings.userAgentString += " BizAOSWebviewApp"
  
// Gooroomee Android Guide : User-agent
// 
// 1. 기본 User-agent 값에 "BizAOSWebviewApp" 를 추가
// 2. 위 설정이 없는 경우 앱내 웹뷰에서 정상동작하지 않음
//
private var chromeClient = object : WebChromeClient() {
    override fun onShowCustomView(view: View, callback: WebChromeClient.CustomViewCallback) {
        super.onShowCustomView(view, callback)
        if (view is FrameLayout) {
            if (view.focusedChild is VideoView) {
                val video = view.focusedChild as VideoView
                view.removeView(video)
                video.start()
            }
        }
    }

    @RequiresApi(Build.VERSION_CODES.M)
    override fun onPermissionRequest(request: PermissionRequest?) {
        Log.e( TAG,"onPermissionRequest")
        try {
            GlobalScope.launch(Dispatchers.Main){
                request?.grant(request.resources)
            }
        } catch (e: Exception) {
            Log.e(TAG, "permissionRequest: $e")
        }
    }
}
  
// Gooroomee Android Guide : WebChromeClient
// 
// 1. 크롬 웹 클라이언트를 사용
// 2. 웹뷰에서 카메라, 마이크 권한을 획득하도록 PermissionRequest 추가
//
var otpUrl = "https://biz.gooroomee.com/room/otp/biz_7cabdcc0806b4d189648420abed25a3926030ada2bf9418eb3580b48a2"
otpUrl = "$otpUrl?join=true"
webView.loadUrl(otpUrl)

// Gooroomee Android Guide : OTP URL Parameter
// 
// 1. API 통해 생성된 OTP URL 에 join=true 파라매터를 포함
// 2. 해당 파라매터가 없는 경우 정상 동작하지 않거나 에러 페이지로 리다이렉트됨
//

모바일앱 공통 메세지 가이드

webView.settings.javaScriptEnabled = true
webView.addJavascriptInterface(WebViewClientClass(), "aoscall")

// Gooroomee Android Guide : addJavascriptInterface
// 
// 1. "aoscall" 이라는 사전 정의 메세지를 통해 JavaScript Message 가 전달됨
// 2. 해당 설정을 하지 않는 경우 이벤트에 대한 스크립트 메세지를 수신하지 못함
//
@JavascriptInterface
fun sendAOS(msg: String) {
    Log.e("test", "sendAOS : $msg")
    if (msg.contains("/room/exit")) {
        Toast.makeText(context, "close called", Toast.LENGTH_SHORT).show()
    }
}

// Gooroomee Android Guide : @JavascriptInterface
// 
// 1. 웹페이지에서 이벤트발생시 sendAOS 가 호출됨
//
1280