diff --git a/com.onesignal.unity.android/Runtime/OneSignalAndroid.cs b/com.onesignal.unity.android/Runtime/OneSignalAndroid.cs index 925569cca..430e52b3a 100644 --- a/com.onesignal.unity.android/Runtime/OneSignalAndroid.cs +++ b/com.onesignal.unity.android/Runtime/OneSignalAndroid.cs @@ -133,6 +133,8 @@ public override void Initialize(string appId) var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); var activity = unityPlayer.GetStatic("currentActivity"); + _enableHardwareAcceleration(activity); + _sdkWrapperClass.CallStatic("setSdkType", "unity"); _sdkWrapperClass.CallStatic("setSdkVersion", VersionHeader); @@ -174,6 +176,24 @@ public override void Initialize(string appId) _completedInit(appId); } + /// + /// Unity sets android:hardwareAccelerated="false" on its Activity which + /// prevents WebView transparent backgrounds from rendering. The native SDK + /// displays in-app messages via a PopupWindow whose window inherits this + /// setting, causing the IAM to render with an opaque white background. + /// Enabling the flag at the window level restores transparency without + /// affecting Unity's own GL/Vulkan rendering surface. + /// + private static void _enableHardwareAcceleration(AndroidJavaObject activity) + { + activity.Call("runOnUiThread", new AndroidJavaRunnable(() => + { + const int FLAG_HARDWARE_ACCELERATED = 0x01000000; + using var window = activity.Call("getWindow"); + window.Call("setFlags", FLAG_HARDWARE_ACCELERATED, FLAG_HARDWARE_ACCELERATED); + })); + } + public override void Login(string externalId, string jwtBearerToken = null) { _sdkClass.CallStatic("login", externalId, jwtBearerToken);