diff --git a/CHANGELOG.md b/CHANGELOG.md index 1780d9cf..ae62b5e3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ The changelog for `Superwall`. Also see the [releases](https://github.com/superwall/Superwall-Android/releases) on GitHub. +## 1.5.2 + +### Fixes +- Fix chromium crashes caused by race conditions in webview's implementation + ## 1.5.1 ### Enhancements diff --git a/superwall/build.gradle.kts b/superwall/build.gradle.kts index 50b84d98..aaf01eba 100644 --- a/superwall/build.gradle.kts +++ b/superwall/build.gradle.kts @@ -23,7 +23,7 @@ plugins { id("signing") } -version = "1.5.1" +version = "1.5.2" android { compileSdk = 34 diff --git a/superwall/src/main/java/com/superwall/sdk/dependencies/DependencyContainer.kt b/superwall/src/main/java/com/superwall/sdk/dependencies/DependencyContainer.kt index 5dc49901..0368723e 100644 --- a/superwall/src/main/java/com/superwall/sdk/dependencies/DependencyContainer.kt +++ b/superwall/src/main/java/com/superwall/sdk/dependencies/DependencyContainer.kt @@ -372,7 +372,16 @@ class DependencyContainer( */ ioScope.launch { if (webViewExists()) { - WebSettings.getDefaultUserAgent(context) + // Due to issues with webview's internals approach to loading, + // We need to catch this and in case of failure, retry + // as failure is random and time-based + runCatching { + WebSettings.getDefaultUserAgent(context) + }.onFailure { + runCatching { + WebSettings.getDefaultUserAgent(context) + } + } } } } diff --git a/superwall/src/main/java/com/superwall/sdk/paywall/vc/PaywallView.kt b/superwall/src/main/java/com/superwall/sdk/paywall/vc/PaywallView.kt index 93463a17..b6132fe1 100644 --- a/superwall/src/main/java/com/superwall/sdk/paywall/vc/PaywallView.kt +++ b/superwall/src/main/java/com/superwall/sdk/paywall/vc/PaywallView.kt @@ -312,7 +312,12 @@ class PaywallView( Superwall.instance.dependencyContainer.delegateAdapter .willPresentPaywall(info) - webView.setRendererPriorityPolicy(RENDERER_PRIORITY_IMPORTANT, true) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + runCatching { + // This call might fail sometimes due to webview inter + webView.setRendererPriorityPolicy(RENDERER_PRIORITY_IMPORTANT, true) + } + } webView.scrollTo(0, 0) if (loadingState is PaywallLoadingState.Ready) { webView.messageHandler.handle(PaywallMessage.TemplateParamsAndUserAttributes)