PPFPTIData.m 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. //
  2. // PPFPTIData.m
  3. // PayPalOneTouch
  4. //
  5. // Copyright © 2015 PayPal, Inc. All rights reserved.
  6. //
  7. #import "PPFPTIData.h"
  8. @interface PPFPTIData ()
  9. @property (nonatomic, strong) NSMutableDictionary *params;
  10. @property (nonatomic, copy) NSString *deviceID;
  11. @property (nonatomic, copy) NSString *sessionID;
  12. @property (nonatomic, copy) NSString *userAgent;
  13. @property (nonatomic, copy) NSURL *trackerURL;
  14. @end
  15. @implementation PPFPTIData
  16. - (instancetype)initWithParams:(NSDictionary *)params
  17. deviceID:(NSString *)deviceID
  18. sessionID:(NSString *)sessionID
  19. userAgent:(NSString *)userAgent
  20. trackerURL:(NSURL *)trackerURL {
  21. self = [super init];
  22. if (self) {
  23. self.params = [params mutableCopy];
  24. self.deviceID = deviceID;
  25. self.sessionID = sessionID;
  26. self.userAgent = userAgent;
  27. self.trackerURL = trackerURL;
  28. }
  29. return self;
  30. }
  31. /*
  32. Sample request
  33. {
  34. "events": {
  35. "actor": {
  36. "tracking_visitor_id":"912bddaa1390abe0eed4d1b541ff46e198",
  37. "tracking_visit_id":"982bddcd1390abe0d4d1b541ff46e12198"
  38. },
  39. "channel":"mobile",
  40. "tracking_event":"1363303116",
  41. "event_params": {
  42. "sv":"mobile",
  43. "expn":"channel",
  44. "t":"1161775163140",
  45. "g":"-420",
  46. "page":"main"
  47. }
  48. }
  49. }
  50. */
  51. - (NSDictionary *)dataAsDictionary {
  52. NSTimeInterval impressionTimeInterval = [[NSDate date] timeIntervalSince1970];
  53. // Note: If this method is called multiple times, the time may be different
  54. NSString *trackingEventString = [PPFPTIData clientTimestampSinceEpochInMilliseconds:impressionTimeInterval];
  55. self.params[@"g"] = [PPFPTIData gmtOffsetInMinutes];
  56. self.params[@"t"] = [PPFPTIData clientTimestampInLocalTimeZoneSinceEpochInMilliseconds:impressionTimeInterval];
  57. self.params[@"sv"] = @"mobile";
  58. NSDictionary *data = @{
  59. @"events": @{
  60. @"actor": @{
  61. @"tracking_visitor_id": self.deviceID,
  62. @"tracking_visit_id": self.sessionID
  63. },
  64. @"channel" : @"mobile",
  65. @"tracking_event": trackingEventString,
  66. @"event_params": self.params
  67. }
  68. };
  69. return data;
  70. }
  71. + (NSString *)clientTimestampSinceEpochInMilliseconds:(NSTimeInterval)timeInterval {
  72. return [NSString stringWithFormat:@"%lld", (long long)(timeInterval * 1000)];
  73. }
  74. + (NSString *)clientTimestampInLocalTimeZoneSinceEpochInMilliseconds:(NSTimeInterval)timeInterval {
  75. float timeZoneOffset = [[NSTimeZone systemTimeZone] secondsFromGMT];
  76. long long timeOffsetInMSInLocalTZ = (long long)((timeInterval - timeZoneOffset)*1000);
  77. return [NSString stringWithFormat:@"%lld", timeOffsetInMSInLocalTZ];
  78. }
  79. + (NSString *)gmtOffsetInMinutes {
  80. float timeZoneOffset = [[NSTimeZone systemTimeZone] secondsFromGMT];
  81. return [NSString stringWithFormat:@"%d", (int)(timeZoneOffset/60.0)];
  82. }
  83. @end