Skip to content

Commit

Permalink
Use property model's language in IAMs
Browse files Browse the repository at this point in the history
* 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
  • Loading branch information
nan-li committed Jan 30, 2023
1 parent 2e2ec42 commit 5a331d3
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
17 changes: 7 additions & 10 deletions iOS_SDK/OneSignalSDK/Source/OSInAppMessageController.m
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@

#import "OSInAppMessageController.h"
#import <OneSignalCore/OneSignalCore.h>
#import <OneSignalUser/OneSignalUser.h>
#import "OSInAppMessagingDefines.h"
#import "OSInAppMessagingRequests.h"

Expand All @@ -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;
}
Expand All @@ -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"]) {
Expand Down
3 changes: 1 addition & 2 deletions iOS_SDK/OneSignalSDK/Source/OSMessagingController.m
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
#import "UIApplication+OneSignal.h" // Previously imported via "OneSignalHelper.h"
#import "NSDateFormatter+OneSignal.h" // Previously imported via "OneSignalHelper.h"
#import <OneSignalCore/OneSignalCore.h>
#import "OneSignalInternal.h"
#import "OSInAppMessageAction.h"
#import "OSInAppMessageController.h"
#import "OSInAppMessagePrompt.h"
Expand Down Expand Up @@ -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;
}
Expand Down

0 comments on commit 5a331d3

Please sign in to comment.