From 5aa610c654977dfd071c15e95cf722c0d74c9835 Mon Sep 17 00:00:00 2001 From: Josh Kasten Date: Wed, 6 Mar 2024 16:32:51 -0500 Subject: [PATCH] call initWithContext on all entry points We call OneSignal.initWithContext on most entry points but some were missed. Consistency is important as differences can lead to edge case bugs that are hard to reproduce and debug. One recent example of this was with ReceiveReceiptWorker, its inconsistency lead to a hard to debug issue that was uncovered by commit 893381b05fbd55eef74dbfc663dd27cceb098901. In this commit an issue was discovered in NotificationGenerationWorker. It almost always runs after receiving a push, but not guaranteed. It was checking for OneSignal.isInitialized but instead should always call initWithContext as it can be an entry point to the app process. The ADMMessageHandlerJob may or may not have had an issue, but we matched up the initWithContext behavior to be safe. --- .../impl/NotificationGenerationWorkManager.kt | 4 ++-- .../receivereceipt/impl/ReceiveReceiptWorkManager.kt | 9 ++++++--- .../notifications/services/ADMMessageHandler.kt | 4 ++++ .../notifications/services/ADMMessageHandlerJob.kt | 10 ++++++++-- 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/generation/impl/NotificationGenerationWorkManager.kt b/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/generation/impl/NotificationGenerationWorkManager.kt index cf60d362ac..0e93dbc185 100644 --- a/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/generation/impl/NotificationGenerationWorkManager.kt +++ b/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/generation/impl/NotificationGenerationWorkManager.kt @@ -63,8 +63,8 @@ internal class NotificationGenerationWorkManager : INotificationGenerationWorkMa class NotificationGenerationWorker(context: Context, workerParams: WorkerParameters) : CoroutineWorker(context, workerParams) { override suspend fun doWork(): Result { - if (!OneSignal.isInitialized) { - return Result.failure() + if (!OneSignal.initWithContext(applicationContext)) { + return Result.success() } val notificationProcessor: INotificationGenerationProcessor = OneSignal.getService() diff --git a/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/receivereceipt/impl/ReceiveReceiptWorkManager.kt b/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/receivereceipt/impl/ReceiveReceiptWorkManager.kt index cd281463c5..494519ed1f 100644 --- a/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/receivereceipt/impl/ReceiveReceiptWorkManager.kt +++ b/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/internal/receivereceipt/impl/ReceiveReceiptWorkManager.kt @@ -72,13 +72,16 @@ internal class ReceiveReceiptWorkManager( } class ReceiveReceiptWorker(context: Context, workerParams: WorkerParameters) : CoroutineWorker(context, workerParams) { - private var receiveReceiptProcessor: IReceiveReceiptProcessor = OneSignal.getService() - override suspend fun doWork(): Result { - val inputData = inputData + if (!OneSignal.initWithContext(applicationContext)) { + return Result.success() + } + val notificationId = inputData.getString(OS_NOTIFICATION_ID)!! val appId = inputData.getString(OS_APP_ID)!! val subscriptionId = inputData.getString(OS_SUBSCRIPTION_ID)!! + + val receiveReceiptProcessor = OneSignal.getService() receiveReceiptProcessor.sendReceiveReceipt(appId, subscriptionId, notificationId) return Result.success() } diff --git a/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/services/ADMMessageHandler.kt b/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/services/ADMMessageHandler.kt index e53f87eb15..cc8d9c2e2e 100644 --- a/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/services/ADMMessageHandler.kt +++ b/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/services/ADMMessageHandler.kt @@ -13,6 +13,10 @@ import com.onesignal.notifications.internal.registration.impl.IPushRegistratorCa class ADMMessageHandler : ADMMessageHandlerBase("ADMMessageHandler") { override fun onMessage(intent: Intent) { val context = applicationContext + if (!OneSignal.initWithContext(context)) { + return + } + val bundle = intent.extras val bundleProcessor = OneSignal.getService() diff --git a/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/services/ADMMessageHandlerJob.kt b/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/services/ADMMessageHandlerJob.kt index ec96fd793b..c707333743 100644 --- a/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/services/ADMMessageHandlerJob.kt +++ b/OneSignalSDK/onesignal/notifications/src/main/java/com/onesignal/notifications/services/ADMMessageHandlerJob.kt @@ -14,10 +14,16 @@ class ADMMessageHandlerJob : ADMMessageHandlerJobBase() { context: Context?, intent: Intent?, ) { - val bundle = intent?.extras - + if (context == null) { + return + } + if (!OneSignal.initWithContext(context.applicationContext)) { + return + } val bundleProcessor = OneSignal.getService() + val bundle = intent?.extras + bundleProcessor.processBundleFromReceiver(context!!, bundle!!) }