Skip to main content
Prerequisites
  • You have installed OneSDK in your web app
  • Android/iOS development experience
  • Your Native App has Camera, Microphone, and Location permissions
  • Your Web App is live

Implementation Steps

1

Setup Web WebAppInterface

First, ensure your web app is properly configured with OneSDK:
<!-- Add our SDK to your web app -->
<script>
    // Initialize OneSDK
    const oneSdk = await OneSDK({
			session: {
				token: YOUR_TOKEN
			},
			// Additional configuration options
    });

		// rest of your OneSDK Implementation
</script>
2

Implement in Native

Permissions Setup

First, add required permissions to your AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Camera permissions -->
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-feature android:name="android.hardware.camera" />
    
    <!-- Microphone permissions -->
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    
    <!-- Location permissions -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
</manifest>

WebView Implementation

Add WebView support with device access permissions:
class WebViewActivity : AppCompatActivity() {
    private lateinit var webView: WebView
    private val PERMISSION_REQUEST_CODE = 1234

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_webview)

        // Request permissions
        requestPermissions()

        webView = findViewById(R.id.webView)
        
        // Enable JavaScript
        webView.settings.apply {
            javaScriptEnabled = true
            domStorageEnabled = true
            allowFileAccess = true
            allowContentAccess = true
            mediaPlaybackRequiresUserGesture = false  // Allow media autoplay
        }

        // Configure WebChromeClient for handling permissions
        webView.webChromeClient = object : WebChromeClient() {
            // Camera permission request
            override fun onPermissionRequest(request: PermissionRequest) {
                runOnUiThread {
                    request.grant(request.resources)
                }
            }

            // Geolocation permission request
            override fun onGeolocationPermissionsShowPrompt(
                origin: String,
                callback: GeolocationPermissions.Callback
            ) {
                callback.invoke(origin, true, false)
            }
        }

        // Load your web app
        webView.loadUrl("https://your-webapp-url.com")
    }

    private fun requestPermissions() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
            requestPermissions(
                arrayOf(
                    Manifest.permission.CAMERA,
                    Manifest.permission.RECORD_AUDIO,
                    Manifest.permission.ACCESS_FINE_LOCATION
                ),
                PERMISSION_REQUEST_CODE
            )
        }
    }

    override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)
        when (requestCode) {
            PERMISSION_REQUEST_CODE -> {
                if (grantResults.isNotEmpty() && 
                    grantResults.all { it == PackageManager.PERMISSION_GRANTED }) {
                    // All permissions granted, proceed with WebView setup
                } else {
                    // Handle permission denial
                }
            }
        }
    }
}

Establishing Communication Between Native and Web Layers

To enable communication from web to native:
class WebAppInterface(private val context: Context) {
    @JavascriptInterface
    fun onEvent(data: String) {
        // Handle events from web app
    }
}

// Add the interface to WebView
webView.addJavascriptInterface(WebAppInterface(this), "Android")