From 5a331d37bf9470cb082ab7c69a0cb8ad747fe70f Mon Sep 17 00:00:00 2001 From: Nan Date: Sun, 29 Jan 2023 19:58:57 -0800 Subject: [PATCH] Use property model's language in IAMs * IAMs were never updated to use the app defined setLanguage feature previously. * Now use the language from the user's property model to get variantId for an IAM. If this is null on the user, the IAM will still recover by going to the `default` variant. * Tested with different IAMs with different variants --- .../Source/OneSignalUserManagerImpl.swift | 4 ++++ .../Source/OSInAppMessageController.m | 17 +++++++---------- .../OneSignalSDK/Source/OSMessagingController.m | 3 +-- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/iOS_SDK/OneSignalSDK/OneSignalUser/Source/OneSignalUserManagerImpl.swift b/iOS_SDK/OneSignalSDK/OneSignalUser/Source/OneSignalUserManagerImpl.swift index 40d11d845..be2cf1b9b 100644 --- a/iOS_SDK/OneSignalSDK/OneSignalUser/Source/OneSignalUserManagerImpl.swift +++ b/iOS_SDK/OneSignalSDK/OneSignalUser/Source/OneSignalUserManagerImpl.swift @@ -97,6 +97,10 @@ public class OneSignalUserManagerImpl: NSObject, OneSignalUserManager { @objc public var pushSubscriptionId: String? { return _user?.pushSubscriptionModel.subscriptionId } + + @objc public var language: String? { + return _user?.propertiesModel.language + } private var hasCalledStart = false diff --git a/iOS_SDK/OneSignalSDK/Source/OSInAppMessageController.m b/iOS_SDK/OneSignalSDK/Source/OSInAppMessageController.m index 281b36c00..5aa037244 100644 --- a/iOS_SDK/OneSignalSDK/Source/OSInAppMessageController.m +++ b/iOS_SDK/OneSignalSDK/Source/OSInAppMessageController.m @@ -27,6 +27,7 @@ #import "OSInAppMessageController.h" #import +#import #import "OSInAppMessagingDefines.h" #import "OSInAppMessagingRequests.h" @@ -38,7 +39,7 @@ - (void)loadMessageHTMLContentWithResult:(OSResultSuccessBlock _Nullable)success if (!variantId) { if (failureBlock) - failureBlock([NSError errorWithDomain:@"onesignal" code:0 userInfo:@{@"error" : [NSString stringWithFormat:@"Unable to find variant ID for languages (%@) for message ID: %@", NSLocale.preferredLanguages, self.messageId]}]); + failureBlock([NSError errorWithDomain:@"onesignal" code:0 userInfo:@{@"error" : [NSString stringWithFormat:@"Unable to find variant ID for languages (%@) for message ID: %@", OneSignalUserManagerImpl.sharedInstance.language, self.messageId]}]); return; } @@ -62,20 +63,16 @@ variant over lower platforms (ie. 'all') even if they have a matching language. */ - (NSString * _Nullable)variantId { - let isoLanguageCodes = [NSLocale preferredLanguages]; + // we only want the first two characters, ie. "en-US" we want "en" + NSString *userLanguageCode = [OneSignalUserManagerImpl.sharedInstance.language substringToIndex:2]; NSString *variantId; for (NSString *type in PREFERRED_VARIANT_ORDER) { if (self.variants[type]) { - for (NSString *code in isoLanguageCodes) { - // we only want the first two characters, ie. "en-US" we want "en" - let isoLanguageCode = [code substringToIndex:2]; - - if (self.variants[type][isoLanguageCode]) { - variantId = self.variants[type][isoLanguageCode]; - break; - } + if (self.variants[type][userLanguageCode]) { + variantId = self.variants[type][userLanguageCode]; + break; } if (!variantId && self.variants[type][@"default"]) { diff --git a/iOS_SDK/OneSignalSDK/Source/OSMessagingController.m b/iOS_SDK/OneSignalSDK/Source/OSMessagingController.m index dd8626782..b3f96b69f 100644 --- a/iOS_SDK/OneSignalSDK/Source/OSMessagingController.m +++ b/iOS_SDK/OneSignalSDK/Source/OSMessagingController.m @@ -30,7 +30,6 @@ #import "UIApplication+OneSignal.h" // Previously imported via "OneSignalHelper.h" #import "NSDateFormatter+OneSignal.h" // Previously imported via "OneSignalHelper.h" #import -#import "OneSignalInternal.h" #import "OSInAppMessageAction.h" #import "OSInAppMessageController.h" #import "OSInAppMessagePrompt.h" @@ -317,7 +316,7 @@ - (void)onDidDismissInAppMessage:(OSInAppMessageInternal *)message { - (void)presentInAppMessage:(OSInAppMessageInternal *)message { if (!message.variantId) { - let errorMessage = [NSString stringWithFormat:@"Attempted to display a message with a nil variantId. Current preferred language is %@, supported message variants are %@", NSLocale.preferredLanguages, message.variants]; + let errorMessage = [NSString stringWithFormat:@"Attempted to display a message with a nil variantId. Current preferred language is %@, supported message variants are %@", OneSignalUserManagerImpl.sharedInstance.language, message.variants]; [OneSignalLog onesignalLog:ONE_S_LL_ERROR message:errorMessage]; return; }