Skip to content

Commit 2f2af82

Browse files
abdulraqeeb33jkasten2AR Abdul Azeezcursoragent
committed
feat: tel crash reporting (#2511)
Co-authored-by: Josh Kasten <[email protected]> Co-authored-by: AR Abdul Azeez <[email protected]> Co-authored-by: Cursor <[email protected]>
1 parent 62b6fdb commit 2f2af82

File tree

107 files changed

+7555
-132
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

107 files changed

+7555
-132
lines changed

OneSignalSDK/build.gradle

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ buildscript {
1414
huaweiAgconnectVersion = '1.9.1.304'
1515
huaweiHMSPushVersion = '6.3.0.304'
1616
huaweiHMSLocationVersion = '4.0.0.300'
17-
kotlinVersion = '1.9.25'
18-
dokkaVersion = '1.9.10' // Dokka version compatible with Kotlin 1.9.25
17+
kotlinVersion = '2.2.0'
18+
dokkaVersion = '1.9.10'
1919
coroutinesVersion = '1.7.3'
2020
kotestVersion = '5.8.0'
2121
ioMockVersion = '1.13.2'
@@ -25,6 +25,10 @@ buildscript {
2525
ktlintVersion = '0.50.0' // Used by Spotless for Kotlin formatting (compatible with Kotlin 1.7.10)
2626
spotlessVersion = '6.25.0'
2727
tdunningJsonForTest = '1.0' // DO NOT upgrade for tests, using an old version so it matches AOSP
28+
// OpenTelemetry versions
29+
opentelemetryBomVersion = '1.55.0'
30+
opentelemetrySemconvVersion = '1.37.0'
31+
opentelemetryDiskBufferingVersion = '1.51.0-alpha'
2832

2933
sharedRepos = {
3034
google()
@@ -45,11 +49,9 @@ buildscript {
4549
]
4650
}
4751

48-
buildscript {
49-
repositories sharedRepos
50-
dependencies {
51-
classpath sharedDeps
52-
}
52+
repositories sharedRepos
53+
dependencies {
54+
classpath sharedDeps
5355
}
5456
}
5557

OneSignalSDK/detekt/detekt-baseline-core.xml

Lines changed: 24 additions & 40 deletions
Large diffs are not rendered by default.

OneSignalSDK/detekt/detekt-config.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ comments:
9191
UndocumentedPublicFunction:
9292
active: true
9393
excludes: ['**/test/**', '**/androidTest/**', '**/testhelpers/**']
94-
94+
9595
EndOfSentenceFormat:
9696
active: false
9797
endOfSentenceFormat: ([.?!][ \t\n\r\f<])|([.?!:]$)

OneSignalSDK/onesignal/core/build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,8 @@ dependencies {
8282
}
8383
}
8484

85+
// Otel module dependency
86+
implementation(project(':OneSignal:otel'))
8587
testImplementation(project(':OneSignal:testhelpers'))
8688

8789
testImplementation("io.kotest:kotest-runner-junit5:$kotestVersion")

OneSignalSDK/onesignal/core/src/main/AndroidManifest.xml

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
1-
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
1+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
2+
xmlns:tools="http://schemas.android.com/tools">
3+
4+
<!-- Override otel module's minSdk requirement (26) since we have runtime checks -->
5+
<!-- The otel module is only used on SDK 26+, so this is safe -->
6+
<uses-sdk tools:overrideLibrary="com.onesignal.otel" />
27

38
<!-- Required so the device can access the internet. -->
49
<uses-permission android:name="android.permission.INTERNET" />

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/common/JSONUtils.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ object JSONUtils {
6161
try {
6262
val value = jsonObject.opt(key)
6363
if (value is JSONArray || value is JSONObject) {
64-
Logging.error("Omitting key '$key'! sendTags DO NOT supported nested values!")
64+
Logging.warn("Omitting key '$key'! sendTags DO NOT supported nested values!")
6565
} else if (jsonObject.isNull(key) || "" == value) {
6666
result[key] = ""
6767
} else {

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/core/CoreModule.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import com.onesignal.core.internal.purchases.impl.TrackGooglePurchase
3333
import com.onesignal.core.internal.startup.IStartableService
3434
import com.onesignal.core.internal.time.ITime
3535
import com.onesignal.core.internal.time.impl.Time
36+
import com.onesignal.debug.internal.crash.OneSignalCrashUploaderWrapper
3637
import com.onesignal.inAppMessages.IInAppMessagesManager
3738
import com.onesignal.inAppMessages.internal.MisconfiguredIAMManager
3839
import com.onesignal.location.ILocationManager
@@ -81,6 +82,9 @@ internal class CoreModule : IModule {
8182
// Purchase Tracking
8283
builder.register<TrackGooglePurchase>().provides<IStartableService>()
8384

85+
// Crash Uploader (crash handler is initialized directly in OneSignalImp for early initialization)
86+
builder.register<OneSignalCrashUploaderWrapper>().provides<IStartableService>()
87+
8488
// Register dummy services in the event they are not configured. These dummy services
8589
// will throw an error message if the associated functionality is attempted to be used.
8690
builder.register<MisconfiguredNotificationsManager>().provides<INotificationsManager>()

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/core/internal/backend/IParamsBackendService.kt

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ package com.onesignal.core.internal.backend
22

33
import org.json.JSONArray
44

5-
interface IParamsBackendService {
5+
internal interface IParamsBackendService {
66
/**
77
* Retrieve the configuration parameters for the [appId] and optional [subscriptionId].
88
*
@@ -20,7 +20,8 @@ interface IParamsBackendService {
2020
): ParamsObject
2121
}
2222

23-
class ParamsObject(
23+
@Suppress("LongParameterList")
24+
internal class ParamsObject(
2425
var googleProjectNumber: String? = null,
2526
var enterprise: Boolean? = null,
2627
var useIdentityVerification: Boolean? = null,
@@ -36,9 +37,10 @@ class ParamsObject(
3637
var opRepoExecutionInterval: Long? = null,
3738
var influenceParams: InfluenceParamsObject,
3839
var fcmParams: FCMParamsObject,
40+
val remoteLoggingParams: RemoteLoggingParamsObject,
3941
)
4042

41-
class InfluenceParamsObject(
43+
internal class InfluenceParamsObject(
4244
val indirectNotificationAttributionWindow: Int? = null,
4345
val notificationLimit: Int? = null,
4446
val indirectIAMAttributionWindow: Int? = null,
@@ -48,8 +50,13 @@ class InfluenceParamsObject(
4850
val isUnattributedEnabled: Boolean? = null,
4951
)
5052

51-
class FCMParamsObject(
53+
internal class FCMParamsObject(
5254
val projectId: String? = null,
5355
val appId: String? = null,
5456
val apiKey: String? = null,
5557
)
58+
59+
internal class RemoteLoggingParamsObject(
60+
val logLevel: com.onesignal.debug.LogLevel? = null,
61+
val isEnabled: Boolean = logLevel != null,
62+
)

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/core/internal/backend/impl/ParamsBackendService.kt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import com.onesignal.core.internal.backend.FCMParamsObject
1111
import com.onesignal.core.internal.backend.IParamsBackendService
1212
import com.onesignal.core.internal.backend.InfluenceParamsObject
1313
import com.onesignal.core.internal.backend.ParamsObject
14+
import com.onesignal.core.internal.backend.RemoteLoggingParamsObject
1415
import com.onesignal.core.internal.http.CacheKeys
1516
import com.onesignal.core.internal.http.IHttpClient
1617
import com.onesignal.core.internal.http.impl.OptionalHeaders
@@ -57,6 +58,16 @@ internal class ParamsBackendService(
5758
)
5859
}
5960

61+
// Process Remote Logging params
62+
var remoteLoggingParams: RemoteLoggingParamsObject? = null
63+
responseJson.expandJSONObject("logging_config") {
64+
val logLevel = LogLevel.fromString(it.safeString("log_level"))
65+
remoteLoggingParams =
66+
RemoteLoggingParamsObject(
67+
logLevel = logLevel,
68+
)
69+
}
70+
6071
return ParamsObject(
6172
googleProjectNumber = responseJson.safeString("android_sender_id"),
6273
enterprise = responseJson.safeBool("enterp"),
@@ -75,6 +86,7 @@ internal class ParamsBackendService(
7586
opRepoExecutionInterval = responseJson.safeLong("oprepo_execution_interval"),
7687
influenceParams = influenceParams ?: InfluenceParamsObject(),
7788
fcmParams = fcmParams ?: FCMParamsObject(),
89+
remoteLoggingParams = remoteLoggingParams ?: RemoteLoggingParamsObject(),
7890
)
7991
}
8092

OneSignalSDK/onesignal/core/src/main/java/com/onesignal/core/internal/background/impl/BackgroundManager.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ internal class BackgroundManager(
186186
} catch (e: NullPointerException) {
187187
// Catch for buggy Oppo devices
188188
// https://github.com/OneSignal/OneSignal-Android-SDK/issues/487
189-
Logging.error(
189+
Logging.info(
190190
"scheduleSyncServiceAsJob called JobScheduler.jobScheduler which " +
191191
"triggered an internal null Android error. Skipping job.",
192192
e,

0 commit comments

Comments
 (0)