diff --git a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/core/internal/preferences/IPreferencesService.kt b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/core/internal/preferences/IPreferencesService.kt index 23435d8977..f4d4b92a5d 100644 --- a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/core/internal/preferences/IPreferencesService.kt +++ b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/core/internal/preferences/IPreferencesService.kt @@ -177,6 +177,11 @@ object PreferencePlayerPurchasesKeys { object PreferenceOneSignalKeys { // Legacy + /** + * (String) The legacy app ID from SDKs prior to 5. + */ + const val PREFS_LEGACY_APP_ID = "GT_APP_ID" + /** * (String) The legacy player ID from SDKs prior to 5. */ diff --git a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/internal/OneSignalImp.kt b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/internal/OneSignalImp.kt index 7babf5067b..5e36f3be39 100644 --- a/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/internal/OneSignalImp.kt +++ b/OneSignalSDK/onesignal/core/src/main/java/com/onesignal/internal/OneSignalImp.kt @@ -211,15 +211,23 @@ internal class OneSignalImp : IOneSignal, IServiceProvider { sessionModel = services.getService().model operationRepo = services.getService() - // initWithContext is called by our internal services/receivers/activites but they do not provide + var forceCreateUser = false + + // initWithContext is called by our internal services/receivers/activities but they do not provide // an appId (they don't know it). If the app has never called the external initWithContext // prior to our services/receivers/activities we will blow up, as no appId has been established. if (appId == null && !configModel!!.hasProperty(ConfigModel::appId.name)) { - Logging.warn("initWithContext called without providing appId, and no appId has been established!") - return false + val legacyAppId = getLegacyAppId() + if (legacyAppId == null) { + Logging.warn("initWithContext called without providing appId, and no appId has been established!") + return false + } else { + Logging.debug("initWithContext: using cached legacy appId $legacyAppId") + forceCreateUser = true + configModel!!.appId = legacyAppId + } } - var forceCreateUser = false // if the app id was specified as input, update the config model with it if (appId != null) { if (!configModel!!.hasProperty(ConfigModel::appId.name) || configModel!!.appId != appId) { @@ -418,6 +426,16 @@ internal class OneSignalImp : IOneSignal, IServiceProvider { } } + /** + * Returns the cached app ID from v4 of the SDK, if available. + */ + private fun getLegacyAppId(): String? { + return preferencesService.getString( + PreferenceStores.ONESIGNAL, + PreferenceOneSignalKeys.PREFS_LEGACY_APP_ID, + ) + } + private fun createAndSwitchToNewUser( suppressBackendOperation: Boolean = false, modify: (