Skip to content

Commit 64a4989

Browse files
committed
fix ANRs for callbacks and when backgrounding app
Update to the OneSignal-Android-SDK 4.8.6 which includes both a fix for ANRs the can happen when backgrounding the app and also provides a new API to control which thread is used for fire callbacks. By default the OneSignal-Android-SDK continues to fire callbacks on the Main UI thread, however this SDK update introduces a new API CallbackThreadManager to allow configuring these to a background thread
1 parent 4c765d7 commit 64a4989

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

com.onesignal.unity.android/Editor/OneSignalAndroidDependencies.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@
33
<repositories>
44
<repository>https://repo.maven.apache.org/maven2</repository>
55
</repositories>
6-
<androidPackage spec="com.onesignal:OneSignal:[4.8.5]" />
6+
<androidPackage spec="com.onesignal:OneSignal:[4.8.6]" />
77
</androidPackages>
88
</dependencies>

com.onesignal.unity.android/Runtime/OneSignalAndroid.cs

100755100644
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,8 @@ public override void SetLaunchURLsInApp(bool launchInApp)
111111
=> SDKDebug.Warn("This feature is only available for iOS.");
112112

113113
public override void Initialize(string appId) {
114+
SetOneSignalCallbacksToBackgroundThread();
115+
114116
var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
115117
var activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
116118

@@ -137,6 +139,19 @@ public override void Initialize(string appId) {
137139
_completedInit(appId);
138140
}
139141

142+
// Change all OneSignal callbacks, observers, and events to fire on a background thread.
143+
// This prevents cases where the main thread could hang waiting on Unity to bridge from Java back to C#.
144+
private void SetOneSignalCallbacksToBackgroundThread() {
145+
var callbackThreadManagerStr = SDKPackage + "." + "CallbackThreadManager";
146+
var callbackThreadManagerClass = new AndroidJavaClass(callbackThreadManagerStr);
147+
var callbackThreadManagerCompanionClass = callbackThreadManagerClass.GetStatic<AndroidJavaObject>("Companion");
148+
149+
var useThreadClass = new AndroidJavaClass(callbackThreadManagerStr + "$UseThread");
150+
var useThreadBackgroundEnumValue = useThreadClass.GetStatic<AndroidJavaObject>("Background");
151+
152+
callbackThreadManagerCompanionClass.Call("setPreference", useThreadBackgroundEnumValue);
153+
}
154+
140155
public override async Task<NotificationPermission> PromptForPushNotificationsWithUserResponse() {
141156
var proxy = new PromptForPushNotificationPermissionResponseHandler();
142157
_sdkClass.CallStatic("promptForPushNotifications", true, proxy);

0 commit comments

Comments
 (0)