Skip to content

Commit 8a4a1c9

Browse files
committed
.
1 parent 897c582 commit 8a4a1c9

File tree

1 file changed

+28
-46
lines changed

1 file changed

+28
-46
lines changed

package-dev/Runtime/SentryInitialization.cs

Lines changed: 28 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#endif
1616

1717
using System;
18+
using JetBrains.Annotations;
1819
using Sentry.Extensibility;
1920
#if UNITY_2020_3_OR_NEWER
2021
using System.Buffers;
@@ -55,13 +56,14 @@ public static class SentryInitialization
5556
#endif
5657
public static void Init()
5758
{
58-
RegisterAndroidCallbacks();
59-
6059
var unityInfo = new SentryUnityInfo();
6160
// Loading the options invokes the ScriptableOption`Configure` callback. Users can disable the SDK via code.
6261
var options = ScriptableSentryUnityOptions.LoadSentryUnityOptions(unityInfo);
6362
if (options != null && options.ShouldInitializeSdk())
6463
{
64+
// Register LifeCycle Callbacks so the SDK is aware of the app losing focus during startup
65+
RegisterAndroidCallbacks(options.DiagnosticLogger);
66+
6567
// Certain integrations require access to preprocessor directives so we provide them as `.cs` and
6668
// compile them with the game instead of precompiling them with the rest of the SDK.
6769
// i.e. SceneManagerAPI requires UNITY_2020_3_OR_NEWER
@@ -83,74 +85,54 @@ public static void Init()
8385
}
8486
}
8587

86-
private static void RegisterAndroidCallbacks()
88+
private static void RegisterAndroidCallbacks([CanBeNull] IDiagnosticLogger logger)
8789
{
8890
#if UNITY_ANDROID && !UNITY_EDITOR
91+
logger?.LogError("Registering Android LifeCycleCallbacks.");
92+
8993
try
9094
{
91-
using (var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
92-
using (var activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"))
93-
using (var application = activity.Call<AndroidJavaObject>("getApplication"))
94-
{
95-
AndroidJavaProxy lifecycleCallbacks = new AndroidLifecycleCallbacks();
96-
97-
// Properly register the callbacks with the application
98-
application.Call("registerActivityLifecycleCallbacks", lifecycleCallbacks);
95+
using var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
96+
using var activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
97+
using var application = activity.Call<AndroidJavaObject>("getApplication");
98+
AndroidJavaProxy lifecycleCallbacks = new AndroidLifecycleCallbacks(logger);
9999

100-
Debug.Log("Android lifecycle callbacks registered successfully");
101-
}
100+
application.Call("registerActivityLifecycleCallbacks", lifecycleCallbacks);
102101
}
103102
catch (Exception ex)
104103
{
105-
Debug.LogError($"Error setting up Android lifecycle callbacks: {ex}");
104+
logger?.LogError("Failed to register Android LifeCycleCallbacks.");
106105
}
107106
#endif
108107
}
109108

110109
private class AndroidLifecycleCallbacks : AndroidJavaProxy
111110
{
112-
public AndroidLifecycleCallbacks() : base("android.app.Application$ActivityLifecycleCallbacks") { }
111+
[CanBeNull] private IDiagnosticLogger _logger;
113112

114-
// Called when the activity is paused - app going to background
115-
public void onActivityPaused(AndroidJavaObject activity)
116-
{
117-
Debug.Log("Android: Application moved to background (onActivityPaused)");
118-
// You can add your background transition handling here
119-
}
120-
121-
// Called when the activity is resumed - app coming to foreground
122-
public void onActivityResumed(AndroidJavaObject activity)
113+
public AndroidLifecycleCallbacks([CanBeNull] IDiagnosticLogger logger) : base(
114+
"android.app.Application$ActivityLifecycleCallbacks")
123115
{
124-
Debug.Log("Android: Application moved to foreground (onActivityResumed)");
125-
// You can add your foreground transition handling here
116+
_logger = logger;
126117
}
127118

128-
// The following methods are required to implement the interface
129-
// but may not be needed for your background detection
130-
public void onActivityCreated(AndroidJavaObject activity, AndroidJavaObject savedInstanceState)
131-
{
132-
Debug.Log("Android: Activity created");
133-
}
134-
135-
public void onActivityStarted(AndroidJavaObject activity)
136-
{
137-
Debug.Log("Android: Activity started");
138-
}
139-
140-
public void onActivityStopped(AndroidJavaObject activity)
119+
// App going to background
120+
public void onActivityPaused(AndroidJavaObject activity)
141121
{
142-
Debug.Log("Android: Activity stopped");
122+
_logger?.LogInfo("Application move to background. Pausing session.");
143123
}
144124

145-
public void onActivitySaveInstanceState(AndroidJavaObject activity, AndroidJavaObject outState)
125+
// App coming to foreground
126+
public void onActivityResumed(AndroidJavaObject activity)
146127
{
147-
// No action needed
128+
_logger?.LogInfo("Application move to foreground. Resuming session.");
148129
}
149130

150-
public void onActivityDestroyed(AndroidJavaObject activity)
151-
{
152-
Debug.Log("Android: Activity destroyed");
153-
}
131+
public void onActivityCreated(AndroidJavaObject activity, AndroidJavaObject savedInstanceState) { }
132+
public void onActivityStarted(AndroidJavaObject activity) { }
133+
public void onActivityStopped(AndroidJavaObject activity) { }
134+
public void onActivitySaveInstanceState(AndroidJavaObject activity, AndroidJavaObject outState) { }
135+
public void onActivityDestroyed(AndroidJavaObject activity) { }
154136
}
155137

156138
private static void SetupNativeSdk(SentryUnityOptions options, SentryUnityInfo unityInfo)

0 commit comments

Comments
 (0)