Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion UnitTests/MParticle+PrivateMethods.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,5 +50,6 @@
@property (nonatomic, strong, nonnull) id<MPListenerControllerProtocol> listenerController;
@property (nonatomic, strong) id<MPStateMachineProtocol> stateMachine;
@property (nonatomic, strong) id<MPPersistenceControllerProtocol> persistenceController;
@property (nonatomic, strong, nullable) id<MPNotificationControllerProtocol> notificationController;
@property (nonatomic, strong, nonnull) id<AppEnvironmentProviderProtocol> appEnvironmentProvider;
@end

12 changes: 12 additions & 0 deletions mParticle-Apple-SDK.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -506,6 +506,10 @@
53E20DC82CBFFCD200146A97 /* NSArray+MPCaseInsensitiveTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53E20DC62CBFFCD200146A97 /* NSArray+MPCaseInsensitiveTests.swift */; };
53FDD1BD2AE871AF003D5FA1 /* MPIHasher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53FDD1BC2AE871AF003D5FA1 /* MPIHasher.swift */; };
53FDD1BE2AE871AF003D5FA1 /* MPIHasher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53FDD1BC2AE871AF003D5FA1 /* MPIHasher.swift */; };
729721762EAC2AD60045E55C /* AppEnvironmentProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 729721752EAC2AD60045E55C /* AppEnvironmentProvider.h */; };
729721772EAC2AD60045E55C /* AppEnvironmentProvider.h in Headers */ = {isa = PBXBuildFile; fileRef = 729721752EAC2AD60045E55C /* AppEnvironmentProvider.h */; };
729721792EAC2B750045E55C /* AppEnvironmentProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 729721782EAC2B750045E55C /* AppEnvironmentProvider.m */; };
7297217A2EAC2B750045E55C /* AppEnvironmentProvider.m in Sources */ = {isa = PBXBuildFile; fileRef = 729721782EAC2B750045E55C /* AppEnvironmentProvider.m */; };
72D356532E84601A0012A0C2 /* MPEventTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72D356522E8460020012A0C2 /* MPEventTests.swift */; };
72D356542E84601A0012A0C2 /* MPEventTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72D356522E8460020012A0C2 /* MPEventTests.swift */; };
72FEBD172E86FE3B00B8341F /* MPIdentityTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72FEBD162E86FE2D00B8341F /* MPIdentityTests.swift */; };
Expand Down Expand Up @@ -843,6 +847,8 @@
53B33E892A4606CD00CC8A19 /* MPSideloadedKit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPSideloadedKit.swift; sourceTree = "<group>"; };
53E20DC62CBFFCD200146A97 /* NSArray+MPCaseInsensitiveTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "NSArray+MPCaseInsensitiveTests.swift"; sourceTree = "<group>"; };
53FDD1BC2AE871AF003D5FA1 /* MPIHasher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPIHasher.swift; sourceTree = "<group>"; };
729721752EAC2AD60045E55C /* AppEnvironmentProvider.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppEnvironmentProvider.h; sourceTree = "<group>"; };
729721782EAC2B750045E55C /* AppEnvironmentProvider.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppEnvironmentProvider.m; sourceTree = "<group>"; };
72D356522E8460020012A0C2 /* MPEventTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPEventTests.swift; sourceTree = "<group>"; };
72FEBD162E86FE2D00B8341F /* MPIdentityTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MPIdentityTests.swift; sourceTree = "<group>"; };
7E03877F2DB913D2003B7D5E /* MPRokt.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPRokt.h; sourceTree = "<group>"; };
Expand Down Expand Up @@ -951,6 +957,8 @@
isa = PBXGroup;
children = (
3513083F2E6B28F5002A3AD6 /* Executor.h */,
729721752EAC2AD60045E55C /* AppEnvironmentProvider.h */,
729721782EAC2B750045E55C /* AppEnvironmentProvider.m */,
351308402E6B28F5002A3AD6 /* Executor.m */,
53A79C2229CDFB4800E7489F /* Include */,
53A79B3629CDFB1F00E7489F /* mParticle.m */,
Expand Down Expand Up @@ -1479,6 +1487,7 @@
53A79C1E29CDFB2100E7489F /* MPKitFilter.h in Headers */,
53A79C1529CDFB2100E7489F /* MPDataPlanFilter.h in Headers */,
531BCF342B28A23400F5C573 /* MPIdentityCaching.h in Headers */,
729721772EAC2AD60045E55C /* AppEnvironmentProvider.h in Headers */,
53A79C0029CDFB2100E7489F /* MPPromotion+Dictionary.h in Headers */,
53A79B9229CDFB2000E7489F /* MPBreadcrumb.h in Headers */,
53A79B7B29CDFB2000E7489F /* MPConnectorProtocol.h in Headers */,
Expand Down Expand Up @@ -1575,6 +1584,7 @@
53A79D4C29CE23F700E7489F /* MPDataPlanFilter.h in Headers */,
531BCF352B28A23400F5C573 /* MPIdentityCaching.h in Headers */,
53A79D4D29CE23F700E7489F /* MPPromotion+Dictionary.h in Headers */,
729721762EAC2AD60045E55C /* AppEnvironmentProvider.h in Headers */,
53A79D4E29CE23F700E7489F /* MPBreadcrumb.h in Headers */,
53A79D4F29CE23F700E7489F /* MPConnectorProtocol.h in Headers */,
53A79D5029CE23F700E7489F /* MPBracket.h in Headers */,
Expand Down Expand Up @@ -1906,6 +1916,7 @@
53A79BC029CDFB2000E7489F /* MPConsentKitFilter.m in Sources */,
53A79C0A29CDFB2100E7489F /* MPKitRegister.m in Sources */,
35E3FCD02E54978C00DB5B18 /* MParticleSession+MParticlePrivate.m in Sources */,
7297217A2EAC2B750045E55C /* AppEnvironmentProvider.m in Sources */,
534C11B42D08A73700466F71 /* MParticleWebView.swift in Sources */,
53A79B9429CDFB2000E7489F /* MPForwardRecord.m in Sources */,
D3BE919B2D5B96700038C87A /* MPLaunchInfo.swift in Sources */,
Expand Down Expand Up @@ -2101,6 +2112,7 @@
53A79D9029CE23F700E7489F /* MPDatabaseMigrationController.m in Sources */,
53A79D9129CE23F700E7489F /* MPConsentKitFilter.m in Sources */,
35E3FCCF2E54978C00DB5B18 /* MParticleSession+MParticlePrivate.m in Sources */,
729721792EAC2B750045E55C /* AppEnvironmentProvider.m in Sources */,
534C11B32D08A73700466F71 /* MParticleWebView.swift in Sources */,
53A79D9229CE23F700E7489F /* MPKitRegister.m in Sources */,
D3BE919C2D5B96700038C87A /* MPLaunchInfo.swift in Sources */,
Expand Down
9 changes: 9 additions & 0 deletions mParticle-Apple-SDK/AppEnvironmentProvider.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#import <Foundation/Foundation.h>

@protocol AppEnvironmentProviderProtocol
- (BOOL)isAppExtension;
@end

@interface AppEnvironmentProvider : NSObject<AppEnvironmentProviderProtocol>
- (BOOL)isAppExtension;
@end
12 changes: 12 additions & 0 deletions mParticle-Apple-SDK/AppEnvironmentProvider.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
#import "AppEnvironmentProvider.h"

@implementation AppEnvironmentProvider

- (BOOL)isAppExtension {
#if TARGET_OS_IOS == 1
return [[NSBundle mainBundle].bundlePath hasSuffix:@".appex"];
#else
return NO;
#endif
}
@end
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,8 @@ - (void)didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
}

if (![MPStateMachine_PRIVATE isAppExtension]) {
[MPNotificationController_PRIVATE setDeviceToken:nil];
MPNotificationController_PRIVATE *notificationController = [[MPNotificationController_PRIVATE alloc] init];
[notificationController setDeviceToken:nil];
}

SEL failedRegistrationSelector = @selector(failedToRegisterForUserNotifications:);
Expand Down Expand Up @@ -89,7 +90,8 @@ - (void)didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
}

if (![MPStateMachine_PRIVATE isAppExtension]) {
[MPNotificationController_PRIVATE setDeviceToken:deviceToken];
MPNotificationController_PRIVATE *notificationController = [[MPNotificationController_PRIVATE alloc] init];
[notificationController setDeviceToken:deviceToken];
}

SEL deviceTokenSelector = @selector(setDeviceToken:);
Expand Down
3 changes: 2 additions & 1 deletion mParticle-Apple-SDK/Identity/MPIdentityDTO.m
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,8 @@ - (instancetype)initWithIdentityApiRequest:(MPIdentityApiRequest *)apiRequest {

#if TARGET_OS_IOS == 1
if (![MPStateMachine_PRIVATE isAppExtension]) {
NSData *deviceTokenData = [MPNotificationController_PRIVATE deviceToken];
MPNotificationController_PRIVATE *notificationController = [[MPNotificationController_PRIVATE alloc] init];
NSData *deviceTokenData = [notificationController deviceToken];
if (deviceTokenData) {
NSString *deviceTokenString = [MPUserDefaults stringFromDeviceToken:deviceTokenData];
if (deviceTokenString && [deviceTokenString length] > 0) {
Expand Down
15 changes: 12 additions & 3 deletions mParticle-Apple-SDK/Include/MPNotificationController.h
Original file line number Diff line number Diff line change
@@ -1,11 +1,20 @@
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>

@interface MPNotificationController_PRIVATE : NSObject
@protocol MPNotificationControllerProtocol

#if TARGET_OS_IOS == 1
+ (nullable NSData *)deviceToken;
+ (void)setDeviceToken:(nullable NSData *)devToken;
- (nullable NSData *)deviceToken;
- (void)setDeviceToken:(nullable NSData *)devToken;
#endif

@end

@interface MPNotificationController_PRIVATE : NSObject <MPNotificationControllerProtocol>

#if TARGET_OS_IOS == 1
- (nullable NSData *)deviceToken;
- (void)setDeviceToken:(nullable NSData *)devToken;
#endif

@end
2 changes: 1 addition & 1 deletion mParticle-Apple-SDK/MPBackendController.m
Original file line number Diff line number Diff line change
Expand Up @@ -1959,7 +1959,7 @@ - (void)logUserNotification:(MParticleUserNotification *)userNotification {
kMPPushMessageTypeKey:userNotification.type}
mutableCopy];

NSString *tokenString = [MPUserDefaults stringFromDeviceToken:[MPNotificationController_PRIVATE deviceToken]];
NSString *tokenString = [MPUserDefaults stringFromDeviceToken:[self.notificationController deviceToken]];
if (tokenString) {
messageInfo[kMPDeviceTokenKey] = tokenString;
}
Expand Down
11 changes: 3 additions & 8 deletions mParticle-Apple-SDK/Notifications/MPNotificationController.m
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,6 @@
#import "MPNetworkCommunication.h"
#import "MParticleSwift.h"

@interface MPNotificationController_PRIVATE() {
}

@end

@interface MParticle ()

+ (dispatch_queue_t)messageQueue;
Expand All @@ -36,7 +31,7 @@ - (instancetype)init {
}

#pragma mark Public static methods
+ (NSData *)deviceToken {
- (NSData *)deviceToken {
#ifndef MP_UNIT_TESTING
MPUserDefaults *userDefaults = [MPUserDefaults standardUserDefaultsWithStateMachine:[MParticle sharedInstance].stateMachine backendController:[MParticle sharedInstance].backendController identity:[MParticle sharedInstance].identity];
deviceToken = userDefaults[kMPDeviceTokenKey];
Expand All @@ -47,8 +42,8 @@ + (NSData *)deviceToken {
return deviceToken;
}

+ (void)setDeviceToken:(NSData *)devToken {
if ([MPNotificationController_PRIVATE deviceToken] && [[MPNotificationController_PRIVATE deviceToken] isEqualToData:devToken]) {
- (void)setDeviceToken:(NSData *)devToken {
if ([deviceToken isEqualToData:devToken]) {
return;
}

Expand Down
3 changes: 2 additions & 1 deletion mParticle-Apple-SDK/Utils/MPDevice.swift
Original file line number Diff line number Diff line change
Expand Up @@ -362,7 +362,8 @@ public class MPDevice: NSObject, NSCopying {
#if os(iOS) && !MPARTICLE_LOCATION_DISABLE
deviceDictionary[Device.kMPDeviceRadioKey] = radioAccessTechnology

if let pushNotificationToken = MPNotificationController_PRIVATE.deviceToken() {
let notificationController = MPNotificationController_PRIVATE()
if let pushNotificationToken = notificationController.deviceToken() {
if let tokenString = MPUserDefaults.stringFromDeviceToken(pushNotificationToken) {
deviceDictionary[PushNotifications.kMPDeviceTokenKey] = tokenString
}
Expand Down
25 changes: 14 additions & 11 deletions mParticle-Apple-SDK/mParticle.m
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#import "MParticleOptions+MParticlePrivate.h"
#import "SettingsProvider.h"
#import "Executor.h"
#import "AppEnvironmentProvider.h"

static NSArray *eventTypeStrings = nil;
static MParticle *_sharedInstance = nil;
Expand Down Expand Up @@ -68,10 +69,10 @@ @interface MParticle() <MPBackendControllerDelegate

@property (nonatomic, strong) id<SettingsProviderProtocol> settingsProvider;
@property (nonatomic, strong, nonnull) id<MPListenerControllerProtocol> listenerController;

@property (nonatomic, strong, nonnull) id<AppEnvironmentProviderProtocol> appEnvironmentProvider;
@property (nonatomic, strong, nonnull) id<MPNotificationControllerProtocol> notificationController;
@end


@implementation MPDataPlanOptions
@end

Expand Down Expand Up @@ -152,6 +153,8 @@ - (instancetype)init {
_stateMachine = [[MPStateMachine_PRIVATE alloc] init];
_webView = [[MParticleWebView_PRIVATE alloc] initWithMessageQueue:executor.messageQueue];
_listenerController = MPListenerController.sharedInstance;
_appEnvironmentProvider = [[AppEnvironmentProvider alloc] init];
_notificationController = [[MPNotificationController_PRIVATE alloc] init];
logger = [[MPLog alloc] initWithLogLevel:_stateMachine.logLevel];

return self;
Expand Down Expand Up @@ -606,16 +609,16 @@ - (void)switchWorkspaceWithOptions:(MParticleOptions *)options {
#pragma mark Application notifications
#if TARGET_OS_IOS == 1
- (NSData *)pushNotificationToken {
if (![MPStateMachine_PRIVATE isAppExtension]) {
return [MPNotificationController_PRIVATE deviceToken];
if (![self.appEnvironmentProvider isAppExtension]) {
return [self.notificationController deviceToken];
} else {
return nil;
}
}

- (void)setPushNotificationToken:(NSData *)pushNotificationToken {
if (![MPStateMachine_PRIVATE isAppExtension]) {
[MPNotificationController_PRIVATE setDeviceToken:pushNotificationToken];
if (![self.appEnvironmentProvider isAppExtension]) {
[self.notificationController setDeviceToken:pushNotificationToken];
}
}

Expand All @@ -624,7 +627,7 @@ - (void)didReceiveRemoteNotification:(NSDictionary *)userInfo {
return;
}

if (![MPStateMachine_PRIVATE isAppExtension]) {
if (![self.appEnvironmentProvider isAppExtension]) {
[[MParticle sharedInstance].appNotificationHandler didReceiveRemoteNotification:userInfo];
}
}
Expand All @@ -634,7 +637,7 @@ - (void)didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
return;
}

if (![MPStateMachine_PRIVATE isAppExtension]) {
if (![self.appEnvironmentProvider isAppExtension]) {
[[MParticle sharedInstance].appNotificationHandler didFailToRegisterForRemoteNotificationsWithError:error];
}
}
Expand All @@ -644,7 +647,7 @@ - (void)didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
return;
}

if (![MPStateMachine_PRIVATE isAppExtension]) {
if (![self.appEnvironmentProvider isAppExtension]) {
[[MParticle sharedInstance].appNotificationHandler didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
}
}
Expand All @@ -654,7 +657,7 @@ - (void)handleActionWithIdentifier:(NSString *)identifier forRemoteNotification:
return;
}

if (![MPStateMachine_PRIVATE isAppExtension]) {
if (![self.appEnvironmentProvider isAppExtension]) {
[[MParticle sharedInstance].appNotificationHandler handleActionWithIdentifier:identifier forRemoteNotification:userInfo];
}
}
Expand All @@ -664,7 +667,7 @@ - (void)handleActionWithIdentifier:(nullable NSString *)identifier forRemoteNoti
return;
}

if (![MPStateMachine_PRIVATE isAppExtension]) {
if (![self.appEnvironmentProvider isAppExtension]) {
[[MParticle sharedInstance].appNotificationHandler handleActionWithIdentifier:identifier forRemoteNotification:userInfo withResponseInfo:responseInfo];
}
}
Expand Down
Loading