Showing
5 changed files
with
277 additions
and
23 deletions
1 | /* | 1 | /* |
2 | Copyright 2010-2016 Warply Inc. All rights reserved. | 2 | Copyright 2010-2016 Warply Inc. All rights reserved. |
3 | 3 | ||
4 | - Redistribution and use in source and binary forms, without modification, | 4 | + Redistribution and use in source and binary forms, without modification, |
5 | are permitted provided that the following conditions are met: | 5 | are permitted provided that the following conditions are met: |
6 | 6 | ||
7 | 1. Redistributions of source code must retain the above copyright notice, this | 7 | 1. Redistributions of source code must retain the above copyright notice, this |
... | @@ -137,8 +137,8 @@ typedef enum { | ... | @@ -137,8 +137,8 @@ typedef enum { |
137 | */ | 137 | */ |
138 | /*! | 138 | /*! |
139 | @abstract Launching the Warply service. | 139 | @abstract Launching the Warply service. |
140 | - @discussion This class method initialises the shared instance of WLAppService, | 140 | + @discussion This class method initialises the shared instance of WLAppService, |
141 | - passes the launch options (if any) to managers in order to handle them and | 141 | + passes the launch options (if any) to managers in order to handle them and |
142 | launches the communication with Warply service using the provided unique app identification. | 142 | launches the communication with Warply service using the provided unique app identification. |
143 | @param appUUID A string with the unique app identification. | 143 | @param appUUID A string with the unique app identification. |
144 | @param launchOptions A dictionary with the application launch options. May be | 144 | @param launchOptions A dictionary with the application launch options. May be |
... | @@ -264,7 +264,7 @@ WL_VERSION_INTERFACE() | ... | @@ -264,7 +264,7 @@ WL_VERSION_INTERFACE() |
264 | */ | 264 | */ |
265 | /*! | 265 | /*! |
266 | @abstract Send an event. | 266 | @abstract Send an event. |
267 | - @discussion This method sends an event. This event is stored into a local DB | 267 | + @discussion This method sends an event. This event is stored into a local DB |
268 | and is sent over to Warply service when a threshold of stored events is exceeded or immediately if the priority parameter is YES | 268 | and is sent over to Warply service when a threshold of stored events is exceeded or immediately if the priority parameter is YES |
269 | @param event A WLEvent object. | 269 | @param event A WLEvent object. |
270 | @param priority A BOOL value indicating if the event should be sent immediately or not. | 270 | @param priority A BOOL value indicating if the event should be sent immediately or not. |
... | @@ -284,10 +284,8 @@ WL_VERSION_INTERFACE() | ... | @@ -284,10 +284,8 @@ WL_VERSION_INTERFACE() |
284 | */ | 284 | */ |
285 | - (BOOL)getInboxWithSuccessBlock:(void (^)(NSArray *list))success failureBlock:(void (^)(NSError *error))failure; | 285 | - (BOOL)getInboxWithSuccessBlock:(void (^)(NSArray *list))success failureBlock:(void (^)(NSError *error))failure; |
286 | 286 | ||
287 | - | ||
288 | - (BOOL)getInbox2WithSuccessBlock:(void (^)(NSArray *list))success failureBlock:(void (^)(NSError *error))failure; | 287 | - (BOOL)getInbox2WithSuccessBlock:(void (^)(NSArray *list))success failureBlock:(void (^)(NSError *error))failure; |
289 | 288 | ||
290 | - | ||
291 | - (void)getProductsWithSuccessBlock:(NSString*)filter :(void(^)(NSMutableArray *params))success failureBlock:(void(^)(NSError *error))failure; | 289 | - (void)getProductsWithSuccessBlock:(NSString*)filter :(void(^)(NSMutableArray *params))success failureBlock:(void(^)(NSError *error))failure; |
292 | 290 | ||
293 | - (void)sendContactWithSuccessBlock:(NSString *)name andEmail:(NSString *)email andMsisdn:msisdn andMessage:message :(void(^)(NSMutableArray *params)) success failureBlock:(void(^)(NSError *error))failure; | 291 | - (void)sendContactWithSuccessBlock:(NSString *)name andEmail:(NSString *)email andMsisdn:msisdn andMessage:message :(void(^)(NSMutableArray *params)) success failureBlock:(void(^)(NSError *error))failure; |
... | @@ -363,6 +361,7 @@ WL_VERSION_INTERFACE() | ... | @@ -363,6 +361,7 @@ WL_VERSION_INTERFACE() |
363 | 361 | ||
364 | - (void) validateCouponWithSuccessBlock:(NSString*) coupon :(void(^)(NSDictionary *response))success failureBlock:(void(^)(NSError *error))failure; | 362 | - (void) validateCouponWithSuccessBlock:(NSString*) coupon :(void(^)(NSDictionary *response))success failureBlock:(void(^)(NSError *error))failure; |
365 | 363 | ||
364 | +- (void)loginCosmoteWithSuccessBlock:(NSString*)guid andAppUuid:(NSString*)appUuid andTicket:(NSString*)ticket :(void(^)(NSDictionary *response))success failureBlock:(void(^)(NSError *error))failure; | ||
366 | /*! | 365 | /*! |
367 | @abstract Get the full page add accordint to the display_type of a campaign. | 366 | @abstract Get the full page add accordint to the display_type of a campaign. |
368 | @attributeblock successBlock This block is called when getInbox is sucessful and allOffers is empty or nil and returns an array with the available WLInboxItem items. Otherwise, the allOffers array is filtered. | 367 | @attributeblock successBlock This block is called when getInbox is sucessful and allOffers is empty or nil and returns an array with the available WLInboxItem items. Otherwise, the allOffers array is filtered. |
... | @@ -425,7 +424,7 @@ WL_VERSION_INTERFACE() | ... | @@ -425,7 +424,7 @@ WL_VERSION_INTERFACE() |
425 | @return Returns YES if the app is registered with Warply and thus the success or failure block will definitely be called and NO otherwise. In the latter case, the call is queued and will be called as soon as / if the app registers with Warply. | 424 | @return Returns YES if the app is registered with Warply and thus the success or failure block will definitely be called and NO otherwise. In the latter case, the call is queued and will be called as soon as / if the app registers with Warply. |
426 | @discussion This method gets the context for the specified path. The success block has a parameter of type | 425 | @discussion This method gets the context for the specified path. The success block has a parameter of type |
427 | id as the type of the data returned value may differ in each case depending on the specified | 426 | id as the type of the data returned value may differ in each case depending on the specified |
428 | - path. The caller will probably want to use the return parameter and a timer to update the UI or do any other operation after a certain amount of time that the app remains unregistered and thus, cannot make the call. | 427 | + path. The caller will probably want to use the return parameter and a timer to update the UI or do any other operation after a certain amount of time that the app remains unregistered and thus, cannot make the call. |
429 | */ | 428 | */ |
430 | - (BOOL)getContextWithPath:(NSString *)path | 429 | - (BOOL)getContextWithPath:(NSString *)path |
431 | successBlock:(void (^)(id contextResponse))successBlock | 430 | successBlock:(void (^)(id contextResponse))successBlock |
... | @@ -441,7 +440,7 @@ WL_VERSION_INTERFACE() | ... | @@ -441,7 +440,7 @@ WL_VERSION_INTERFACE() |
441 | @discussion This method post the context for the specified path. Make sure that | 440 | @discussion This method post the context for the specified path. Make sure that |
442 | the path, you are trying to access, has write and not only read permissions. If | 441 | the path, you are trying to access, has write and not only read permissions. If |
443 | it has only read permsissions the post will fail with WLResultCodesReadOnly error | 442 | it has only read permsissions the post will fail with WLResultCodesReadOnly error |
444 | - code. The caller will probably want to use the return parameter and a timer to update the UI or do any other operation after a certain amount of time that the app remains unregistered and thus, cannot make the call. | 443 | + code. The caller will probably want to use the return parameter and a timer to update the UI or do any other operation after a certain amount of time that the app remains unregistered and thus, cannot make the call. |
445 | */ | 444 | */ |
446 | - (BOOL)sendContext:(NSData*)context | 445 | - (BOOL)sendContext:(NSData*)context |
447 | successBlock:(void (^)(NSDictionary *contextResponse))successBlock | 446 | successBlock:(void (^)(NSDictionary *contextResponse))successBlock |
... | @@ -449,11 +448,11 @@ WL_VERSION_INTERFACE() | ... | @@ -449,11 +448,11 @@ WL_VERSION_INTERFACE() |
449 | 448 | ||
450 | /*! | 449 | /*! |
451 | @abstract Send all localy stored events to Warply service. | 450 | @abstract Send all localy stored events to Warply service. |
452 | - @discussion This method flags and sends all the locally stored events to Warply | 451 | + @discussion This method flags and sends all the locally stored events to Warply |
453 | - service. This happend independent if number of locally stored event threshold | 452 | + service. This happend independent if number of locally stored event threshold |
454 | - has be reached or not. The events are deleted from local DB only when the call is | 453 | + has be reached or not. The events are deleted from local DB only when the call is |
455 | - sucesful. Otherwise, the events remain stored until either the threshold of stored | 454 | + sucesful. Otherwise, the events remain stored until either the threshold of stored |
456 | - events is excited and they automatically send to Warply service or this method is | 455 | + events is excited and they automatically send to Warply service or this method is |
457 | called again. | 456 | called again. |
458 | @attributeblock completionBlock This block is called when sendAllEvents is sucessful. | 457 | @attributeblock completionBlock This block is called when sendAllEvents is sucessful. |
459 | @attributeblock failureBlock This block is called when sendAllEvents fails and returns an error object with failure code and description. | 458 | @attributeblock failureBlock This block is called when sendAllEvents fails and returns an error object with failure code and description. | ... | ... |
... | @@ -430,6 +430,29 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) | ... | @@ -430,6 +430,29 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) |
430 | return [self isRegistrationValid]; | 430 | return [self isRegistrationValid]; |
431 | } | 431 | } |
432 | 432 | ||
433 | +- (BOOL)getInbox2WithSuccessBlock:(void (^)(NSArray *list))success failureBlock:(void (^)(NSError *error))failure | ||
434 | +{ | ||
435 | + if (self.allOffers.count > 0) { | ||
436 | + success(self.allOffers); | ||
437 | + } else { | ||
438 | + NSDictionary *postDictionary = @{@"offers": @{@"action": @"get_inbox"}}; | ||
439 | + NSData *jsonData = [NSJSONSerialization dataWithJSONObject:postDictionary options:0 error:NULL]; | ||
440 | + | ||
441 | + [self sendContext:jsonData successBlock:^(NSDictionary *contextResponse) { | ||
442 | + if (success) { | ||
443 | + success([contextResponse valueForKey:@"MAPP_OFFER"]); | ||
444 | + } | ||
445 | + } failureBlock:^(NSError *error) { | ||
446 | + if (failure) { | ||
447 | + failure(error); | ||
448 | + } | ||
449 | + }]; | ||
450 | + } | ||
451 | + | ||
452 | + | ||
453 | + return [self isRegistrationValid]; | ||
454 | +} | ||
455 | + | ||
433 | - (void)getProductsWithSuccessBlock:(NSString*)filter :(void(^)(NSMutableArray *params)) success failureBlock:(void(^)(NSError *error))failure | 456 | - (void)getProductsWithSuccessBlock:(NSString*)filter :(void(^)(NSMutableArray *params)) success failureBlock:(void(^)(NSError *error))failure |
434 | { | 457 | { |
435 | if (filter == nil) { | 458 | if (filter == nil) { |
... | @@ -556,6 +579,41 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) | ... | @@ -556,6 +579,41 @@ WL_VERSION_IMPLEMENTATION(WL_VERSION) |
556 | }]; | 579 | }]; |
557 | } | 580 | } |
558 | 581 | ||
582 | +- (void)loginCosmoteWithSuccessBlock:(NSString*)guid andAppUuid:(NSString*)appUuid andTicket:(NSString*)ticket :(void(^)(NSDictionary *response))success failureBlock:(void(^)(NSError *error))failure | ||
583 | +{ | ||
584 | + NSDictionary *postDictionary = @{@"guid": guid, @"app_uuid": appUuid, @"ticket": ticket }; | ||
585 | + NSData *jsonData = [NSJSONSerialization dataWithJSONObject:postDictionary options:0 error:NULL]; | ||
586 | + [self sendContextCosmote:jsonData successBlock:^(NSDictionary *contextResponse) { | ||
587 | + if (success) { | ||
588 | + NSString* clientId = [NSString alloc]; | ||
589 | + clientId = [contextResponse objectForKey:@"client_id"]; | ||
590 | + NSString* clientSecret = [NSString alloc]; | ||
591 | + clientSecret = [contextResponse objectForKey:@"client_secret"]; | ||
592 | + NSString* refreshToken = [NSString alloc]; | ||
593 | + refreshToken = [contextResponse objectForKey:@"refresh_token"]; | ||
594 | + NSString* accessToken = [NSString alloc]; | ||
595 | + accessToken = [contextResponse objectForKey:@"access_oken"]; | ||
596 | + [_db executeUpdate:@"DROP TABLE requestVariables"]; | ||
597 | + if ([_db tableExists:@"requestVariables"] == NO) { | ||
598 | + [_db executeUpdate:@"CREATE TABLE requestVariables (id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, client_id INTEGER, client_secret VARCHAR(255), access_token VARCHAR(255), refresh_token VARCHAR(255))"]; | ||
599 | + WL_FMDBLogError | ||
600 | + | ||
601 | + [_db executeUpdate:@"INSERT INTO requestVariables (id, client_id, client_secret, refresh_token, access_token) VALUES (1, ?, ?, ?, ?)", clientId, clientSecret, refreshToken, accessToken]; | ||
602 | + } else { | ||
603 | + [_db executeUpdate:@"UPDATE requestVariables SET client_id = ? , client_secret = ?, refresh_token = ?, access_token = ? WHERE id = 1", clientId, clientSecret, refreshToken, accessToken]; | ||
604 | + } | ||
605 | + success(contextResponse); | ||
606 | + } | ||
607 | + } failureBlock:^(NSError *error) { | ||
608 | + if (failure) { | ||
609 | + failure(error); | ||
610 | + } | ||
611 | + NSLog(@"Error at fetching tags categories %@", error ); | ||
612 | + }]; | ||
613 | + | ||
614 | +} | ||
615 | + | ||
616 | + | ||
559 | - (void)loginWithSuccessBlock:(NSString*)id andPassword:(NSString*)password andLoginType:(NSString*)loginType :(void(^)(NSDictionary *response))success failureBlock:(void(^)(NSError *error))failure | 617 | - (void)loginWithSuccessBlock:(NSString*)id andPassword:(NSString*)password andLoginType:(NSString*)loginType :(void(^)(NSDictionary *response))success failureBlock:(void(^)(NSError *error))failure |
560 | { | 618 | { |
561 | NSString* webId = [NSString alloc]; | 619 | NSString* webId = [NSString alloc]; |
... | @@ -2199,6 +2257,34 @@ return appIsRegisteredWithWarply; | ... | @@ -2199,6 +2257,34 @@ return appIsRegisteredWithWarply; |
2199 | return appIsRegisteredWithWarply; | 2257 | return appIsRegisteredWithWarply; |
2200 | } | 2258 | } |
2201 | 2259 | ||
2260 | +- (BOOL)sendContextCosmote:(NSData*)context | ||
2261 | + successBlock:(void (^)(NSDictionary *contextResponse))successBlock | ||
2262 | + failureBlock:(void (^)(NSError *error))failureBlock | ||
2263 | +{ | ||
2264 | + BOOL appIsRegisteredWithWarply = [self isRegistrationValid]; | ||
2265 | + | ||
2266 | + if (WL_FEATURE_IS_DISABLED_WITH_KEY(WL_WARPLY_ENABLED)) | ||
2267 | + return appIsRegisteredWithWarply; | ||
2268 | + | ||
2269 | + if (appIsRegisteredWithWarply == NO) { | ||
2270 | + [_pendingOperationsQueue setSuspended:YES]; | ||
2271 | + [self registration]; | ||
2272 | + } | ||
2273 | + NSString *path = nil; | ||
2274 | + | ||
2275 | + NSInvocation *invocation = [self contextRequestInvocationWithTypeCosmote:WLContextRequestTypePost | ||
2276 | + data:context | ||
2277 | + path:path | ||
2278 | + successBlock:[successBlock copy] | ||
2279 | + failureBlock:[failureBlock copy]]; | ||
2280 | + | ||
2281 | + | ||
2282 | + NSInvocationOperation *operation = [[NSInvocationOperation alloc] initWithInvocation:invocation]; | ||
2283 | + [_pendingOperationsQueue addOperation:operation]; | ||
2284 | + | ||
2285 | + return appIsRegisteredWithWarply; | ||
2286 | +} | ||
2287 | + | ||
2202 | #pragma - Events | 2288 | #pragma - Events |
2203 | /////////////////////////////////////////////////////////////////////////////// | 2289 | /////////////////////////////////////////////////////////////////////////////// |
2204 | - (void)addEvent:(WLEvent *)event priority:(BOOL)priority | 2290 | - (void)addEvent:(WLEvent *)event priority:(BOOL)priority |
... | @@ -3726,6 +3812,29 @@ CGFloat DistanceBetweenTwoPoints(CGPoint point1,CGPoint point2) | ... | @@ -3726,6 +3812,29 @@ CGFloat DistanceBetweenTwoPoints(CGPoint point1,CGPoint point2) |
3726 | return invocation; | 3812 | return invocation; |
3727 | } | 3813 | } |
3728 | 3814 | ||
3815 | +- (NSInvocation *)contextRequestInvocationWithTypeCosmote:(WLContextRequestType)type | ||
3816 | + data:(NSData *)context | ||
3817 | + path:(NSString *)path | ||
3818 | + successBlock:(void (^)(NSDictionary *contextResponse))successBlock | ||
3819 | + failureBlock:(void (^)(NSError *error))failureBlock | ||
3820 | +{ | ||
3821 | + void (^ successBlockCopy)(void) = [successBlock copy]; | ||
3822 | + void (^ failureBlockCopy)(void) = [failureBlock copy]; | ||
3823 | + | ||
3824 | + NSMethodSignature *sgn = [self methodSignatureForSelector:@selector(runContextRequestWithTypeCosmote:data:path:successBlock:failureBlock:)]; | ||
3825 | + NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:sgn]; | ||
3826 | + [invocation setTarget:self]; | ||
3827 | + [invocation setSelector:@selector(runContextRequestWithTypeCosmote:data:path:successBlock:failureBlock:)]; | ||
3828 | + [invocation setArgument:&type atIndex:2]; | ||
3829 | + [invocation setArgument:&context atIndex:3]; | ||
3830 | + [invocation setArgument:&path atIndex:4]; | ||
3831 | + [invocation setArgument:&successBlockCopy atIndex:5]; | ||
3832 | + [invocation setArgument:&failureBlockCopy atIndex:6]; | ||
3833 | + [invocation retainArguments]; | ||
3834 | + return invocation; | ||
3835 | +} | ||
3836 | + | ||
3837 | + | ||
3729 | - (void)runVerifyTicketRequestWithType:(WLContextRequestType)requestType | 3838 | - (void)runVerifyTicketRequestWithType:(WLContextRequestType)requestType |
3730 | data:(NSData*)context | 3839 | data:(NSData*)context |
3731 | path:(NSString *)path | 3840 | path:(NSString *)path |
... | @@ -3958,6 +4067,133 @@ CGFloat DistanceBetweenTwoPoints(CGPoint point1,CGPoint point2) | ... | @@ -3958,6 +4067,133 @@ CGFloat DistanceBetweenTwoPoints(CGPoint point1,CGPoint point2) |
3958 | } | 4067 | } |
3959 | } | 4068 | } |
3960 | 4069 | ||
4070 | +- (void)runContextRequestWithTypeCosmote:(WLContextRequestType)requestType | ||
4071 | + data:(NSData*)context | ||
4072 | + path:(NSString *)path | ||
4073 | + successBlock:(void (^)(id contextResponse))successBlock | ||
4074 | + failureBlock:(void (^)(NSError *error))failureBlock | ||
4075 | +{ | ||
4076 | + //Create REQUEST | ||
4077 | + NSMutableString *urlString = [NSMutableString stringWithFormat:@"partners/gapp/verify"]; | ||
4078 | + | ||
4079 | + WLLOG(@"[WARP Trace] HTTP URL: %@", urlString); | ||
4080 | + | ||
4081 | + NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:100]; | ||
4082 | + | ||
4083 | + NSDictionary *parameters; | ||
4084 | + | ||
4085 | + if (context != nil) { | ||
4086 | + parameters = [NSJSONSerialization JSONObjectWithData:context options:NSJSONReadingAllowFragments error:NULL]; | ||
4087 | + } | ||
4088 | + | ||
4089 | + SuccessResponse successResponse = ^(NSURLSessionDataTask * _Nonnull task, id _Nullable JSON) { | ||
4090 | + if (JSON == nil) { | ||
4091 | + successBlock(@{@"status": @"0"}); | ||
4092 | + } | ||
4093 | + else { | ||
4094 | + | ||
4095 | +// NSData *responseData = [NSJSONSerialization dataWithJSONObject:JSON options:NSJSONWritingPrettyPrinted error:NULL]; | ||
4096 | +// NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]; | ||
4097 | + // WLLOG(@"[WARP Trace] HTTP %@ Response:%@", request.HTTPMethod, responseString); | ||
4098 | + WLLOG(@"************ WARP %@ CONTEXT ******************", request.HTTPMethod); | ||
4099 | + WLLOG(@"[WARP Trace] HTTP Web Id: %@", _webId); | ||
4100 | + WLLOG(@"[WARP Trace] HTTP API Key: %@", _apiKey); | ||
4101 | + WLLOG(@"[WARP Trace] HTTP %@ Request URL: %@", request.HTTPMethod, request.URL.absoluteString); | ||
4102 | + NSString *contextString = [[NSString alloc] initWithData:context encoding:NSUTF8StringEncoding]; | ||
4103 | + WLLOG(@"[WARP Trace] HTTP %@ Request Body: %@", request.HTTPMethod, contextString); | ||
4104 | + WLLOG(@"*************************************************"); | ||
4105 | + NSDictionary *contextResponse=[JSON valueForKey:@"context"]; | ||
4106 | + | ||
4107 | + | ||
4108 | + | ||
4109 | + if ([JSON objectForKey:@"status"]) { | ||
4110 | + | ||
4111 | + int status = [[JSON valueForKey:@"status"] intValue]; | ||
4112 | + | ||
4113 | + if (status != WLResultCodesSuccess) | ||
4114 | + { | ||
4115 | + if ((status == WLResultCodesInvalidWebID) || (status == WLResultCodesDeviceRegistrationFailed)) | ||
4116 | + { | ||
4117 | + self.webId = nil; | ||
4118 | + self.apiKey = nil; | ||
4119 | + | ||
4120 | + [_pendingOperationsQueue setSuspended:YES]; | ||
4121 | + } | ||
4122 | + | ||
4123 | + NSString *errorDescrition = (status <= [WLResultCodesDescriptions count]) && status > 0 ? (WLResultCodesDescriptions[(status-1)]) : ([NSString stringWithFormat:@"Internal WARP Server error %d", status]); | ||
4124 | + | ||
4125 | + NSDictionary *eDict = @{NSLocalizedDescriptionKey: errorDescrition}; | ||
4126 | + NSError *error = [NSError errorWithDomain:WARP_ERROR_DOMAIN code:status userInfo:eDict]; | ||
4127 | + | ||
4128 | + if (failureBlock) | ||
4129 | + failureBlock(error); | ||
4130 | + | ||
4131 | + return; | ||
4132 | + } | ||
4133 | + | ||
4134 | + if (successBlock) | ||
4135 | + { | ||
4136 | + if ([path length]!=0) | ||
4137 | + { | ||
4138 | + successBlock([contextResponse valueForKey:path]); | ||
4139 | + return; | ||
4140 | + } | ||
4141 | + successBlock(contextResponse); | ||
4142 | + } | ||
4143 | + | ||
4144 | + | ||
4145 | + }else{ | ||
4146 | + NSError *error = [NSError errorWithDomain:WARP_ERROR_DOMAIN code:1026 userInfo:@{NSLocalizedDescriptionKey: NSLocalizedString(@"Empty response", @"Warply")}]; | ||
4147 | + if (failureBlock) | ||
4148 | + failureBlock(error); | ||
4149 | + | ||
4150 | + } | ||
4151 | + | ||
4152 | + } | ||
4153 | + }; | ||
4154 | + | ||
4155 | + FailureResponse faliureResponse = ^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { | ||
4156 | + WLLOG(@"************ WARP %@ CONTEXT ******************", request.HTTPMethod); | ||
4157 | + WLLOG(@"[WARP Trace] HTTP Web Id: %@", _webId); | ||
4158 | + WLLOG(@"[WARP Trace] HTTP API Key: %@", _apiKey); | ||
4159 | + WLLOG(@"[WARP Trace] HTTP %@ Request URL: %@", request.HTTPMethod, request.URL.absoluteString); | ||
4160 | + NSString *contextString = [[NSString alloc] initWithData:context encoding:NSUTF8StringEncoding]; | ||
4161 | + | ||
4162 | + | ||
4163 | + WLLOG(@"[WARP Trace] HTTP %@ Request Body: %@", request.HTTPMethod, contextString); | ||
4164 | + WLLOG(@"[WARP Trace] Error: %@", [error description]); | ||
4165 | + WLLOG(@"*************************************************"); | ||
4166 | + if (failureBlock) | ||
4167 | + failureBlock(error); | ||
4168 | + }; | ||
4169 | + | ||
4170 | + _httpClient.responseSerializer = [AFJSONResponseSerializer serializer]; | ||
4171 | + _httpClient.requestSerializer = [AFJSONRequestSerializer serializer]; | ||
4172 | + | ||
4173 | + //Set HTTP Headers | ||
4174 | + time_t timestamp = (time_t) [[NSDate date] timeIntervalSince1970]; | ||
4175 | + [_httpClient.requestSerializer setValue:_webId forHTTPHeaderField:@"loyalty-web-id"]; | ||
4176 | + [_httpClient.requestSerializer setValue:[NSString stringWithFormat:@"%lu", timestamp] forHTTPHeaderField:@"loyalty-date"]; | ||
4177 | + [_httpClient.requestSerializer setValue:[[NSString stringWithFormat:@"%@%lu", _apiKey, timestamp] SHA256Sum] forHTTPHeaderField:@"loyalty-signature"]; | ||
4178 | + [_httpClient.requestSerializer setValue:@"gzip" forHTTPHeaderField:@"Accept-Encoding"]; | ||
4179 | + [_httpClient.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"]; | ||
4180 | + [_httpClient.requestSerializer setValue:@"gzip" forHTTPHeaderField:@"User-Agent"]; | ||
4181 | + [_httpClient.requestSerializer setValue:[NSString stringWithFormat:@"ios:%@", [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleIdentifier"]] forHTTPHeaderField:@"loyalty-bundle-id"]; | ||
4182 | + [_httpClient.requestSerializer setValue:[[[UIDevice currentDevice] identifierForVendor] UUIDString] forHTTPHeaderField:@"unique-device-id"]; | ||
4183 | + [_httpClient.requestSerializer setValue:@"apple" forHTTPHeaderField:@"vendor"]; | ||
4184 | + [_httpClient.requestSerializer setValue:@"platform" forHTTPHeaderField:@"ios"]; | ||
4185 | + [_httpClient.requestSerializer setValue:@"os_version" forHTTPHeaderField:[[UIDevice currentDevice] systemVersion]]; | ||
4186 | + [_httpClient.requestSerializer setValue:@"mobile" forHTTPHeaderField:@"channel"]; | ||
4187 | + if (requestType == WLContextRequestTypePost) { | ||
4188 | +// NSDictionary *parameters = [NSJSONSerialization JSONObjectWithData:context options:NSJSONReadingAllowFragments error:NULL]; | ||
4189 | + | ||
4190 | + [_httpClient POST:urlString parameters:parameters progress:nil success:successResponse failure:faliureResponse]; | ||
4191 | + } | ||
4192 | + else { | ||
4193 | + [_httpClient GET:urlString parameters:parameters progress:nil success:successResponse failure:faliureResponse]; | ||
4194 | + } | ||
4195 | +} | ||
4196 | + | ||
3961 | - (void)runContextRequestWithType2:(WLContextRequestType)requestType | 4197 | - (void)runContextRequestWithType2:(WLContextRequestType)requestType |
3962 | data:(NSData*)context | 4198 | data:(NSData*)context |
3963 | path:(NSString *)path | 4199 | path:(NSString *)path | ... | ... |
No preview for this file type
... | @@ -16,7 +16,6 @@ | ... | @@ -16,7 +16,6 @@ |
16 | - (void) setToStage; | 16 | - (void) setToStage; |
17 | - (void) setLang:(NSString*) lang; | 17 | - (void) setLang:(NSString*) lang; |
18 | - (UIViewController *) openCoupons:(UIView*) parentView; | 18 | - (UIViewController *) openCoupons:(UIView*) parentView; |
19 | -- (UIViewController *) openGifts; | ||
20 | - (void) applicationDidEnterBackground:(UIApplication *)application; | 19 | - (void) applicationDidEnterBackground:(UIApplication *)application; |
21 | - (void) applicationWillEnterForeground:(UIApplication *)application; | 20 | - (void) applicationWillEnterForeground:(UIApplication *)application; |
22 | - (void) applicationDidBecomeActive:(UIApplication *)application; | 21 | - (void) applicationDidBecomeActive:(UIApplication *)application; |
... | @@ -60,6 +59,7 @@ | ... | @@ -60,6 +59,7 @@ |
60 | - (NSDictionary*)getCouponSetsWithActive:(NSNumber*)active andVisible:(NSNumber*)visible andUuids:(NSArray*)uuids; | 59 | - (NSDictionary*)getCouponSetsWithActive:(NSNumber*)active andVisible:(NSNumber*)visible andUuids:(NSArray*)uuids; |
61 | - (NSDictionary*)redeemCouponWithCoupon:(NSString*)coupon; | 60 | - (NSDictionary*)redeemCouponWithCoupon:(NSString*)coupon; |
62 | - (NSDictionary*)validateCouponWithCoupon:(NSString*)coupon; | 61 | - (NSDictionary*)validateCouponWithCoupon:(NSString*)coupon; |
62 | +- (NSDictionary*)loginCosmoteWithGuid:(NSString*)guid andAppUuid:(NSString*)appUuid andTicket:(NSString*)ticket; | ||
63 | 63 | ||
64 | @end | 64 | @end |
65 | #endif /* MyApi_h */ | 65 | #endif /* MyApi_h */ | ... | ... |
... | @@ -47,19 +47,11 @@ NSString *LANG; | ... | @@ -47,19 +47,11 @@ NSString *LANG; |
47 | } | 47 | } |
48 | 48 | ||
49 | - (UIViewController *) openCoupons:(UIView*) parentView{ | 49 | - (UIViewController *) openCoupons:(UIView*) parentView{ |
50 | + | ||
50 | UIViewController *couponsViewController = [CouponsViewInterface couponsViewController:parentView]; | 51 | UIViewController *couponsViewController = [CouponsViewInterface couponsViewController:parentView]; |
51 | return couponsViewController; | 52 | return couponsViewController; |
52 | } | 53 | } |
53 | 54 | ||
54 | -- (UIViewController *) openGifts{ | ||
55 | - | ||
56 | - UIViewController *giftsViewController = [GiftsViewInterface giftsViewController]; | ||
57 | -// controller = [[UINavigationController alloc]initWithRootViewController:profileViewController]; | ||
58 | - | ||
59 | -// [window makeKeyAndVisible]; | ||
60 | - return giftsViewController; | ||
61 | -} | ||
62 | - | ||
63 | //- (UIViewController *) openCoupons { | 55 | //- (UIViewController *) openCoupons { |
64 | //// NSString* const frameworkBundleID = @"framework.warp.ly.WarplySDKFrameworkIOS"; | 56 | //// NSString* const frameworkBundleID = @"framework.warp.ly.WarplySDKFrameworkIOS"; |
65 | //// NSBundle* bundle = [NSBundle bundleWithIdentifier:frameworkBundleID]; | 57 | //// NSBundle* bundle = [NSBundle bundleWithIdentifier:frameworkBundleID]; |
... | @@ -1132,4 +1124,31 @@ NSString *LANG; | ... | @@ -1132,4 +1124,31 @@ NSString *LANG; |
1132 | } | 1124 | } |
1133 | return resp; | 1125 | return resp; |
1134 | } | 1126 | } |
1127 | + | ||
1128 | +- (NSDictionary*)loginCosmoteWithGuid:(NSString*)guid andAppUuid:(NSString*)appUuid andTicket:(NSString*)ticket { | ||
1129 | + __block NSDictionary *resp = [NSDictionary alloc]; | ||
1130 | + __block BOOL isRunLoopNested = NO; | ||
1131 | + __block BOOL isOperationCompleted = NO; | ||
1132 | + [[Warply sharedService] loginCosmoteWithSuccessBlock:guid andAppUuid:appUuid andTicket:ticket :^(NSDictionary *response) { | ||
1133 | + resp = response; | ||
1134 | + isOperationCompleted = YES; | ||
1135 | + if (isRunLoopNested) { | ||
1136 | + CFRunLoopStop(CFRunLoopGetCurrent()); // CFRunLoopRun() returns | ||
1137 | + } | ||
1138 | + } failureBlock:^(NSError *error) { | ||
1139 | + NSLog(@"%@", error); | ||
1140 | + resp = nil; | ||
1141 | + isOperationCompleted = YES; | ||
1142 | + if (isRunLoopNested) { | ||
1143 | + CFRunLoopStop(CFRunLoopGetCurrent()); // CFRunLoopRun() returns | ||
1144 | + } | ||
1145 | + }]; | ||
1146 | + if ( ! isOperationCompleted) { | ||
1147 | + isRunLoopNested = YES; | ||
1148 | + NSLog(@"Waiting..."); | ||
1149 | + CFRunLoopRun(); // Magic! | ||
1150 | + isRunLoopNested = NO; | ||
1151 | + } | ||
1152 | + return resp; | ||
1153 | +} | ||
1135 | @end | 1154 | @end | ... | ... |
-
Please register or login to post a comment