Skip to content

Commit d4daa99

Browse files
author
Joseph Kalash
committed
- Swizzling checks for all AppDelegate subclasses to find which proper class to inject to. SDK makes sure the subclass overrides the required method and does not simply inherit it from a superclass.
- SDK parses info.plist to find out if it should request location when in use or always, or log an error if neither description entries are in the property list file. - Changed CLLocationManagerDelegate from OneSignal’s private shared instance to the existing OneSignalLocation private singleton. - Time-based location tracking. SDK sends user’s initial location then assigns a refresh rate of 5 min (foreground) or 10min (background).
1 parent 86ad645 commit d4daa99

File tree

9 files changed

+309
-126
lines changed

9 files changed

+309
-126
lines changed

OneSignal.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Pod::Spec.new do |s|
22
s.name = "OneSignal"
3-
s.version = "2.0.9"
3+
s.version = "2.0.10"
44
s.summary = "OneSignal push notification library for mobile apps."
55
s.homepage = "https://onesignal.com"
66
s.license = { :type => 'MIT', :file => 'LICENSE' }
245 KB
Binary file not shown.
246 KB
Binary file not shown.

iOS_SDK/OneSignal/OneSignal.m

Lines changed: 11 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -57,17 +57,6 @@
5757
#pragma clang diagnostic push
5858
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
5959

60-
typedef struct os_location_coordinate {
61-
double latitude;
62-
double longitude;
63-
} os_location_coordinate;
64-
65-
typedef struct os_last_location {
66-
os_location_coordinate cords;
67-
double verticalAccuracy;
68-
double horizontalAccuracy;
69-
} os_last_location;
70-
7160
static ONE_S_LOG_LEVEL _nsLogLevel = ONE_S_LL_WARN;
7261
static ONE_S_LOG_LEVEL _visualLogLevel = ONE_S_LL_NONE;
7362

@@ -82,15 +71,13 @@
8271

8372
@implementation OneSignal
8473

85-
NSString* const ONESIGNAL_VERSION = @"020009";
74+
NSString* const ONESIGNAL_VERSION = @"020010";
8675

8776
static bool registeredWithApple = false; //Has attempted to register for push notifications with Apple.
8877
static OneSignalTrackIAP* trackIAPPurchase;
8978
static NSString* app_id;
9079
NSString* emailToSet;
9180
NSMutableDictionary* tagsToSend;
92-
os_last_location *lastLocation;
93-
BOOL location_event_fired;
9481
NSString* mUserId;
9582
NSString* mDeviceToken;
9683
OneSignalHTTPClient *httpClient;
@@ -132,7 +119,7 @@ + (id)initWithLaunchOptions:(NSDictionary*)launchOptions appId:(NSString*)appId
132119
if ([@"b2f7f966-d8cc-11eg-bed1-df8f05be55ba" isEqualToString:appId] || [@"5eb5a37e-b458-11e3-ac11-000c2940e62c" isEqualToString:appId])
133120
onesignal_Log(ONE_S_LL_WARN, @"OneSignal Example AppID detected, please update to your app's id found on OneSignal.com");
134121

135-
[OneSignalLocation getLocation:[OneSignalHelper sharedInstance] prompt:false];
122+
[OneSignalLocation getLocation:false];
136123

137124
if (self) {
138125

@@ -483,7 +470,7 @@ + (void)setSubscription:(BOOL)enable {
483470
}
484471

485472
+ (void) promptLocation {
486-
[OneSignalLocation getLocation:[OneSignalHelper sharedInstance] prompt:true];
473+
[OneSignalLocation getLocation:true];
487474
}
488475

489476
+ (void)registerDeviceToken:(id)inDeviceToken onSuccess:(OSResultSuccessBlock)successBlock onFailure:(OSFailureBlock)failureBlock {
@@ -642,12 +629,12 @@ + (void)registerUser {
642629
NSData* postData = [NSJSONSerialization dataWithJSONObject:dataDic options:0 error:nil];
643630
[request setHTTPBody:postData];
644631

645-
if (lastLocation) {
646-
dataDic[@"lat"] = [NSNumber numberWithDouble:lastLocation->cords.latitude];
647-
dataDic[@"long"] = [NSNumber numberWithDouble:lastLocation->cords.longitude];
648-
dataDic[@"loc_acc_vert"] = [NSNumber numberWithDouble:lastLocation->verticalAccuracy];
649-
dataDic[@"loc_acc"] = [NSNumber numberWithDouble:lastLocation->horizontalAccuracy];
650-
lastLocation = nil;
632+
if ([OneSignalLocation lastLocation]) {
633+
dataDic[@"lat"] = [NSNumber numberWithDouble:[OneSignalLocation lastLocation]->cords.latitude];
634+
dataDic[@"long"] = [NSNumber numberWithDouble:[OneSignalLocation lastLocation]->cords.longitude];
635+
dataDic[@"loc_acc_vert"] = [NSNumber numberWithDouble:[OneSignalLocation lastLocation]->verticalAccuracy];
636+
dataDic[@"loc_acc"] = [NSNumber numberWithDouble:[OneSignalLocation lastLocation]->horizontalAccuracy];
637+
[OneSignalLocation clearLastLocation];
651638
}
652639

653640
[OneSignalHelper enqueueRequest:request onSuccess:^(NSDictionary* results) {
@@ -672,10 +659,8 @@ + (void)registerUser {
672659
tagsToSend = nil;
673660
}
674661

675-
if (lastLocation) {
676-
[self sendLocation:lastLocation];
677-
lastLocation = nil;
678-
}
662+
//try to send location
663+
[OneSignalLocation sendLocation];
679664

680665
if (emailToSet) {
681666
[OneSignal syncHashedEmail:emailToSet];
@@ -1038,64 +1023,6 @@ + (void)processLocalActionBasedNotification:(UILocalNotification*) notification
10381023

10391024
}
10401025

1041-
1042-
- (void)locationManager:(id)manager didUpdateLocations:(NSArray *)locations {
1043-
1044-
#pragma clang diagnostic push
1045-
#pragma clang diagnostic ignored "-Wundeclared-selector"
1046-
[manager performSelector:@selector(stopUpdatingLocation)];
1047-
#pragma clang diagnostic pop
1048-
1049-
if (location_event_fired)
1050-
return;
1051-
1052-
location_event_fired = true;
1053-
1054-
id location = locations.lastObject;
1055-
1056-
SEL cord_selector = NSSelectorFromString(@"coordinate");
1057-
os_location_coordinate cords;
1058-
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[[location class] instanceMethodSignatureForSelector:cord_selector]];
1059-
1060-
[invocation setTarget:locations.lastObject];
1061-
[invocation setSelector:cord_selector];
1062-
[invocation invoke];
1063-
[invocation getReturnValue:&cords];
1064-
1065-
os_last_location *currentLocation = (os_last_location*)malloc(sizeof(os_last_location));
1066-
currentLocation->verticalAccuracy = [[location valueForKey:@"verticalAccuracy"] doubleValue];
1067-
currentLocation->horizontalAccuracy = [[location valueForKey:@"horizontalAccuracy"] doubleValue];
1068-
currentLocation->cords = cords;
1069-
1070-
if (mUserId == nil) {
1071-
lastLocation = currentLocation;
1072-
return;
1073-
}
1074-
1075-
[OneSignal sendLocation:currentLocation];
1076-
}
1077-
1078-
+ (void) sendLocation:(os_last_location*)location {
1079-
1080-
NSMutableURLRequest* request = [httpClient requestWithMethod:@"PUT" path:[NSString stringWithFormat:@"players/%@", mUserId]];
1081-
1082-
NSDictionary* dataDic = [NSDictionary dictionaryWithObjectsAndKeys:
1083-
app_id, @"app_id",
1084-
[NSNumber numberWithDouble:location->cords.latitude], @"lat",
1085-
[NSNumber numberWithDouble:location->cords.longitude], @"long",
1086-
[NSNumber numberWithDouble:location->verticalAccuracy], @"loc_acc_vert",
1087-
[NSNumber numberWithDouble:location->horizontalAccuracy], @"loc_acc",
1088-
[OneSignalHelper getNetType], @"net_type",
1089-
nil];
1090-
1091-
NSData* postData = [NSJSONSerialization dataWithJSONObject:dataDic options:0 error:nil];
1092-
[request setHTTPBody:postData];
1093-
1094-
[OneSignalHelper enqueueRequest:request
1095-
onSuccess:nil
1096-
onFailure:nil];
1097-
}
1098-
10991026
#if XC8_AVAILABLE
11001027

11011028
static id<OSUserNotificationCenterDelegate> notificationCenterDelegate;

iOS_SDK/OneSignal/OneSignalHelper.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,6 @@
3535
// - Web
3636
+ (void) displayWebView:(NSURL*)url;
3737

38-
// - Visible Shareds Instance
39-
+ (OneSignal*) sharedInstance;
40-
4138
// - Notification Opened
4239
+ (NSArray<NSString*>*)getPushTitleBody:(NSDictionary*)messageDict;
4340
+ (NSArray*)getActionButtons;

iOS_SDK/OneSignal/OneSignalHelper.m

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,6 @@ + (id)prepareUNNotificationRequest:(NSDictionary *)data :(NSDictionary *)userInf
500500
//Check if media attached
501501
//!! TEMP : Until Server implements Media Dict, use additional data dict as key val media
502502
NSMutableArray *attachments = [NSMutableArray new];
503-
504503
NSDictionary * att = userInfo[@"custom"][@"at"];
505504
if(!attachments)
506505
attachments = userInfo[@"os_data"][@"at"];

iOS_SDK/OneSignal/OneSignalLocation.h

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,25 @@
2828
#ifndef OneSignalLocation_h
2929
#define OneSignalLocation_h
3030

31+
typedef struct os_location_coordinate {
32+
double latitude;
33+
double longitude;
34+
} os_location_coordinate;
35+
36+
typedef struct os_last_location {
37+
os_location_coordinate cords;
38+
double verticalAccuracy;
39+
double horizontalAccuracy;
40+
} os_last_location;
41+
42+
3143
@interface OneSignalLocation : NSObject
32-
+ (void) getLocation:(id)delegate prompt:(bool)prompt;
44+
+ (void) getLocation:(bool)prompt;
45+
+ (void) sendLocation;
46+
+ (os_last_location*)lastLocation;
47+
+ (void)clearLastLocation;
48+
+ (void)onfocus:(BOOL)isActive;
49+
3350
@end
3451

3552
#endif /* OneSignalLocation_h */

0 commit comments

Comments
 (0)