Merge branch 'yoho' of http://git.dev.yoho.cn/ios/yh_analytics into yoho
Showing
23 changed files
with
1109 additions
and
200 deletions
YH_Analytics.podspec
0 → 100644
1 | +Pod::Spec.new do |s| | ||
2 | + s.name = "YH_Analytics" | ||
3 | + s.version = "1.0.0" | ||
4 | + s.summary = "Analytics Kit" | ||
5 | + s.description = <<-DESC | ||
6 | + Analytics Kit | ||
7 | + DESC | ||
8 | + s.homepage = "" | ||
9 | + s.license = 'MIT' | ||
10 | + s.author = { "wangqianjun" => "wangqianjun168@163.com" } | ||
11 | + s.source = { :git => "http://git.dev.yoho.cn/ios/yh_analytics.git", | ||
12 | + :branch => 'yoho', | ||
13 | + :tag => s.version.to_s } | ||
14 | + | ||
15 | + s.platform = :ios, '6.0' | ||
16 | + s.requires_arc = true | ||
17 | + s.dependency 'AFNetworking', '~> 2.5.4' | ||
18 | + | ||
19 | + s.source_files = 'YH_Analytics/YH_Analytics/YH_Analytics/*.{h,m}' | ||
20 | + s.prefix_header_contents = '#import "YHAnalyticsMacro.h"' | ||
21 | + | ||
22 | + s.subspec 'Factory' do |ss| | ||
23 | + ss.source_files = 'YH_Analytics/YH_Analytics/YH_Analytics/Factory/*.{h,m}' | ||
24 | + ss.requires_arc = true | ||
25 | + end | ||
26 | + | ||
27 | + s.subspec 'Model' do |ss| | ||
28 | + ss.source_files = 'YH_Analytics/YH_Analytics/YH_Analytics/Model/*.{h,m}' | ||
29 | + ss.requires_arc = true | ||
30 | + end | ||
31 | + | ||
32 | + s.subspec 'Utils' do |ss| | ||
33 | + ss.source_files = 'YH_Analytics/YH_Analytics/YH_Analytics/Utils/*.{h,m}' | ||
34 | + ss.requires_arc = true | ||
35 | + end | ||
36 | + | ||
37 | + s.subspec 'OpenUDID' do |ss| | ||
38 | + ss.source_files = 'YH_Analytics/YH_Analytics/YH_Analytics/YHAnalyticsDependencies/OpenUDID/OpenUDID.{h,m}' | ||
39 | + ss.requires_arc = false | ||
40 | + end | ||
41 | + | ||
42 | + s.subspec 'KeychainStore' do |ss| | ||
43 | + ss.source_files = 'YH_Analytics/YH_Analytics/YH_Analytics/YHAnalyticsDependencies/OpenUDID/YH_KeychainStore.{h,m}' | ||
44 | + ss.requires_arc = true | ||
45 | + end | ||
46 | + | ||
47 | + s.frameworks = 'Foundation', 'CoreGraphics', 'UIKit' | ||
48 | + | ||
49 | +end |
@@ -54,6 +54,7 @@ | @@ -54,6 +54,7 @@ | ||
54 | E74D45C11ABA7C6300EFE12E /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = E74D45AF1ABA7C6300EFE12E /* UIRefreshControl+AFNetworking.m */; }; | 54 | E74D45C11ABA7C6300EFE12E /* UIRefreshControl+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = E74D45AF1ABA7C6300EFE12E /* UIRefreshControl+AFNetworking.m */; }; |
55 | E74D45C21ABA7C6300EFE12E /* UIWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = E74D45B11ABA7C6300EFE12E /* UIWebView+AFNetworking.m */; }; | 55 | E74D45C21ABA7C6300EFE12E /* UIWebView+AFNetworking.m in Sources */ = {isa = PBXBuildFile; fileRef = E74D45B11ABA7C6300EFE12E /* UIWebView+AFNetworking.m */; }; |
56 | E79828121AA6A5120035137C /* YH_KeychainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = E79828101AA6A5120035137C /* YH_KeychainStore.m */; }; | 56 | E79828121AA6A5120035137C /* YH_KeychainStore.m in Sources */ = {isa = PBXBuildFile; fileRef = E79828101AA6A5120035137C /* YH_KeychainStore.m */; }; |
57 | + E7A908731BB3C4B000E2EA39 /* YHPerformance.m in Sources */ = {isa = PBXBuildFile; fileRef = E7A908721BB3C4B000E2EA39 /* YHPerformance.m */; }; | ||
57 | E7ADAE3B1AB946C100C9DD0B /* YHDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = E7ADAE341AB946C100C9DD0B /* YHDevice.m */; }; | 58 | E7ADAE3B1AB946C100C9DD0B /* YHDevice.m in Sources */ = {isa = PBXBuildFile; fileRef = E7ADAE341AB946C100C9DD0B /* YHDevice.m */; }; |
58 | E7ADAE3C1AB946C100C9DD0B /* YHError.m in Sources */ = {isa = PBXBuildFile; fileRef = E7ADAE361AB946C100C9DD0B /* YHError.m */; }; | 59 | E7ADAE3C1AB946C100C9DD0B /* YHError.m in Sources */ = {isa = PBXBuildFile; fileRef = E7ADAE361AB946C100C9DD0B /* YHError.m */; }; |
59 | E7ADAE3D1AB946C100C9DD0B /* YHEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = E7ADAE381AB946C100C9DD0B /* YHEvent.m */; }; | 60 | E7ADAE3D1AB946C100C9DD0B /* YHEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = E7ADAE381AB946C100C9DD0B /* YHEvent.m */; }; |
@@ -73,6 +74,7 @@ | @@ -73,6 +74,7 @@ | ||
73 | E7B8DE571A8343D200102CC4 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7B8DE561A8343D200102CC4 /* CoreLocation.framework */; }; | 74 | E7B8DE571A8343D200102CC4 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7B8DE561A8343D200102CC4 /* CoreLocation.framework */; }; |
74 | E7B8DE5E1A836F8700102CC4 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7B8DE5D1A836F8700102CC4 /* CoreTelephony.framework */; }; | 75 | E7B8DE5E1A836F8700102CC4 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7B8DE5D1A836F8700102CC4 /* CoreTelephony.framework */; }; |
75 | E7B8DE621A838EC200102CC4 /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7B8DE611A838EC200102CC4 /* AdSupport.framework */; }; | 76 | E7B8DE621A838EC200102CC4 /* AdSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7B8DE611A838EC200102CC4 /* AdSupport.framework */; }; |
77 | + E7E3A1871BF098DA006A9266 /* AFHTTPRequestOperationManager+YHPriorityRequest.m in Sources */ = {isa = PBXBuildFile; fileRef = E7E3A1861BF098DA006A9266 /* AFHTTPRequestOperationManager+YHPriorityRequest.m */; }; | ||
76 | /* End PBXBuildFile section */ | 78 | /* End PBXBuildFile section */ |
77 | 79 | ||
78 | /* Begin PBXContainerItemProxy section */ | 80 | /* Begin PBXContainerItemProxy section */ |
@@ -136,6 +138,7 @@ | @@ -136,6 +138,7 @@ | ||
136 | CA873DAC1AEF7107008095A4 /* YH_Analytics-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "YH_Analytics-Prefix.pch"; sourceTree = "<group>"; }; | 138 | CA873DAC1AEF7107008095A4 /* YH_Analytics-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "YH_Analytics-Prefix.pch"; sourceTree = "<group>"; }; |
137 | CA873DAD1AF08880008095A4 /* YH_AnalyticsTests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "YH_AnalyticsTests-Prefix.pch"; sourceTree = "<group>"; }; | 139 | CA873DAD1AF08880008095A4 /* YH_AnalyticsTests-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "YH_AnalyticsTests-Prefix.pch"; sourceTree = "<group>"; }; |
138 | CA873DAE1AF0A4F4008095A4 /* ViewControllerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewControllerTests.m; sourceTree = "<group>"; }; | 140 | CA873DAE1AF0A4F4008095A4 /* ViewControllerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewControllerTests.m; sourceTree = "<group>"; }; |
141 | + CA94D9C21B9D729E00662AED /* YH_Analytics_Evevt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YH_Analytics_Evevt.h; sourceTree = "<group>"; }; | ||
139 | CAA6BD351AE4E857006C3332 /* FakeLocationManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FakeLocationManager.h; sourceTree = "<group>"; }; | 142 | CAA6BD351AE4E857006C3332 /* FakeLocationManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FakeLocationManager.h; sourceTree = "<group>"; }; |
140 | CAA6BD361AE4E857006C3332 /* FakeLocationManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FakeLocationManager.m; sourceTree = "<group>"; }; | 143 | CAA6BD361AE4E857006C3332 /* FakeLocationManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FakeLocationManager.m; sourceTree = "<group>"; }; |
141 | CAA6BD3D1AE79ECC006C3332 /* YHAssemblyAssistantLogicTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YHAssemblyAssistantLogicTests.m; sourceTree = "<group>"; }; | 144 | CAA6BD3D1AE79ECC006C3332 /* YHAssemblyAssistantLogicTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YHAssemblyAssistantLogicTests.m; sourceTree = "<group>"; }; |
@@ -187,6 +190,8 @@ | @@ -187,6 +190,8 @@ | ||
187 | E74D45B11ABA7C6300EFE12E /* UIWebView+AFNetworking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIWebView+AFNetworking.m"; sourceTree = "<group>"; }; | 190 | E74D45B11ABA7C6300EFE12E /* UIWebView+AFNetworking.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIWebView+AFNetworking.m"; sourceTree = "<group>"; }; |
188 | E798280F1AA6A5120035137C /* YH_KeychainStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YH_KeychainStore.h; sourceTree = "<group>"; }; | 191 | E798280F1AA6A5120035137C /* YH_KeychainStore.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YH_KeychainStore.h; sourceTree = "<group>"; }; |
189 | E79828101AA6A5120035137C /* YH_KeychainStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YH_KeychainStore.m; sourceTree = "<group>"; }; | 192 | E79828101AA6A5120035137C /* YH_KeychainStore.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YH_KeychainStore.m; sourceTree = "<group>"; }; |
193 | + E7A908711BB3C4B000E2EA39 /* YHPerformance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YHPerformance.h; sourceTree = "<group>"; }; | ||
194 | + E7A908721BB3C4B000E2EA39 /* YHPerformance.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YHPerformance.m; sourceTree = "<group>"; }; | ||
190 | E7ADAE331AB946C100C9DD0B /* YHDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YHDevice.h; sourceTree = "<group>"; }; | 195 | E7ADAE331AB946C100C9DD0B /* YHDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YHDevice.h; sourceTree = "<group>"; }; |
191 | E7ADAE341AB946C100C9DD0B /* YHDevice.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YHDevice.m; sourceTree = "<group>"; }; | 196 | E7ADAE341AB946C100C9DD0B /* YHDevice.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = YHDevice.m; sourceTree = "<group>"; }; |
192 | E7ADAE351AB946C100C9DD0B /* YHError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YHError.h; sourceTree = "<group>"; }; | 197 | E7ADAE351AB946C100C9DD0B /* YHError.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = YHError.h; sourceTree = "<group>"; }; |
@@ -222,6 +227,8 @@ | @@ -222,6 +227,8 @@ | ||
222 | E7B8DE5A1A83551300102CC4 /* YH_Analytics.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = YH_Analytics.entitlements; sourceTree = "<group>"; }; | 227 | E7B8DE5A1A83551300102CC4 /* YH_Analytics.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = YH_Analytics.entitlements; sourceTree = "<group>"; }; |
223 | E7B8DE5D1A836F8700102CC4 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; }; | 228 | E7B8DE5D1A836F8700102CC4 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; }; |
224 | E7B8DE611A838EC200102CC4 /* AdSupport.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AdSupport.framework; path = System/Library/Frameworks/AdSupport.framework; sourceTree = SDKROOT; }; | 229 | E7B8DE611A838EC200102CC4 /* AdSupport.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AdSupport.framework; path = System/Library/Frameworks/AdSupport.framework; sourceTree = SDKROOT; }; |
230 | + E7E3A1851BF098DA006A9266 /* AFHTTPRequestOperationManager+YHPriorityRequest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "AFHTTPRequestOperationManager+YHPriorityRequest.h"; sourceTree = "<group>"; }; | ||
231 | + E7E3A1861BF098DA006A9266 /* AFHTTPRequestOperationManager+YHPriorityRequest.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "AFHTTPRequestOperationManager+YHPriorityRequest.m"; sourceTree = "<group>"; }; | ||
225 | /* End PBXFileReference section */ | 232 | /* End PBXFileReference section */ |
226 | 233 | ||
227 | /* Begin PBXFrameworksBuildPhase section */ | 234 | /* Begin PBXFrameworksBuildPhase section */ |
@@ -328,6 +335,7 @@ | @@ -328,6 +335,7 @@ | ||
328 | 194EDC9A1A7F555800421E6C /* YH_Analytics.h */, | 335 | 194EDC9A1A7F555800421E6C /* YH_Analytics.h */, |
329 | 194EDC9B1A7F555800421E6C /* YH_Analytics.m */, | 336 | 194EDC9B1A7F555800421E6C /* YH_Analytics.m */, |
330 | CA873DAB1AEF7059008095A4 /* YHAnalyticsMacro.h */, | 337 | CA873DAB1AEF7059008095A4 /* YHAnalyticsMacro.h */, |
338 | + CA94D9C21B9D729E00662AED /* YH_Analytics_Evevt.h */, | ||
331 | ); | 339 | ); |
332 | path = YH_Analytics; | 340 | path = YH_Analytics; |
333 | sourceTree = "<group>"; | 341 | sourceTree = "<group>"; |
@@ -465,6 +473,8 @@ | @@ -465,6 +473,8 @@ | ||
465 | E7ADAE381AB946C100C9DD0B /* YHEvent.m */, | 473 | E7ADAE381AB946C100C9DD0B /* YHEvent.m */, |
466 | E7ADAE391AB946C100C9DD0B /* YHStatus.h */, | 474 | E7ADAE391AB946C100C9DD0B /* YHStatus.h */, |
467 | E7ADAE3A1AB946C100C9DD0B /* YHStatus.m */, | 475 | E7ADAE3A1AB946C100C9DD0B /* YHStatus.m */, |
476 | + E7A908711BB3C4B000E2EA39 /* YHPerformance.h */, | ||
477 | + E7A908721BB3C4B000E2EA39 /* YHPerformance.m */, | ||
468 | E7ADAE441AB9487A00C9DD0B /* YHAnalyItemData.h */, | 478 | E7ADAE441AB9487A00C9DD0B /* YHAnalyItemData.h */, |
469 | E7ADAE451AB9487A00C9DD0B /* YHAnalyItemData.m */, | 479 | E7ADAE451AB9487A00C9DD0B /* YHAnalyItemData.m */, |
470 | ); | 480 | ); |
@@ -510,6 +520,8 @@ | @@ -510,6 +520,8 @@ | ||
510 | E7ADAE5A1AB95BC800C9DD0B /* YHAssemblyAssistant.m */, | 520 | E7ADAE5A1AB95BC800C9DD0B /* YHAssemblyAssistant.m */, |
511 | CA5FDA281AEE302F00F86398 /* YHNetworkService.h */, | 521 | CA5FDA281AEE302F00F86398 /* YHNetworkService.h */, |
512 | CA5FDA291AEE302F00F86398 /* YHNetworkService.m */, | 522 | CA5FDA291AEE302F00F86398 /* YHNetworkService.m */, |
523 | + E7E3A1851BF098DA006A9266 /* AFHTTPRequestOperationManager+YHPriorityRequest.h */, | ||
524 | + E7E3A1861BF098DA006A9266 /* AFHTTPRequestOperationManager+YHPriorityRequest.m */, | ||
513 | ); | 525 | ); |
514 | path = Utils; | 526 | path = Utils; |
515 | sourceTree = "<group>"; | 527 | sourceTree = "<group>"; |
@@ -650,6 +662,7 @@ | @@ -650,6 +662,7 @@ | ||
650 | 194EDC7C1A7F52D100421E6C /* ViewController.m in Sources */, | 662 | 194EDC7C1A7F52D100421E6C /* ViewController.m in Sources */, |
651 | E74D45BC1ABA7C6300EFE12E /* UIActivityIndicatorView+AFNetworking.m in Sources */, | 663 | E74D45BC1ABA7C6300EFE12E /* UIActivityIndicatorView+AFNetworking.m in Sources */, |
652 | E74D45B21ABA7C6300EFE12E /* AFHTTPRequestOperation.m in Sources */, | 664 | E74D45B21ABA7C6300EFE12E /* AFHTTPRequestOperation.m in Sources */, |
665 | + E7E3A1871BF098DA006A9266 /* AFHTTPRequestOperationManager+YHPriorityRequest.m in Sources */, | ||
653 | E74D45B91ABA7C6300EFE12E /* AFURLResponseSerialization.m in Sources */, | 666 | E74D45B91ABA7C6300EFE12E /* AFURLResponseSerialization.m in Sources */, |
654 | E7B8DE221A81D68600102CC4 /* NSString+YHAnalytics.m in Sources */, | 667 | E7B8DE221A81D68600102CC4 /* NSString+YHAnalytics.m in Sources */, |
655 | E74D45BF1ABA7C6300EFE12E /* UIImageView+AFNetworking.m in Sources */, | 668 | E74D45BF1ABA7C6300EFE12E /* UIImageView+AFNetworking.m in Sources */, |
@@ -679,6 +692,7 @@ | @@ -679,6 +692,7 @@ | ||
679 | E74D45C11ABA7C6300EFE12E /* UIRefreshControl+AFNetworking.m in Sources */, | 692 | E74D45C11ABA7C6300EFE12E /* UIRefreshControl+AFNetworking.m in Sources */, |
680 | E74D45C01ABA7C6300EFE12E /* UIProgressView+AFNetworking.m in Sources */, | 693 | E74D45C01ABA7C6300EFE12E /* UIProgressView+AFNetworking.m in Sources */, |
681 | E7ADAE551AB94EBD00C9DD0B /* YHEventFactory.m in Sources */, | 694 | E7ADAE551AB94EBD00C9DD0B /* YHEventFactory.m in Sources */, |
695 | + E7A908731BB3C4B000E2EA39 /* YHPerformance.m in Sources */, | ||
682 | E7ADAE3B1AB946C100C9DD0B /* YHDevice.m in Sources */, | 696 | E7ADAE3B1AB946C100C9DD0B /* YHDevice.m in Sources */, |
683 | E79828121AA6A5120035137C /* YH_KeychainStore.m in Sources */, | 697 | E79828121AA6A5120035137C /* YH_KeychainStore.m in Sources */, |
684 | 194EDC761A7F52D100421E6C /* main.m in Sources */, | 698 | 194EDC761A7F52D100421E6C /* main.m in Sources */, |
1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> |
2 | -<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="6751" systemVersion="14C1510" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="vXZ-lx-hvc"> | 2 | +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="9059" systemVersion="14F1021" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="vXZ-lx-hvc"> |
3 | <dependencies> | 3 | <dependencies> |
4 | <deployment identifier="iOS"/> | 4 | <deployment identifier="iOS"/> |
5 | - <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="6736"/> | 5 | + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9049"/> |
6 | + <capability name="Constraints to layout margins" minToolsVersion="6.0"/> | ||
6 | </dependencies> | 7 | </dependencies> |
7 | <scenes> | 8 | <scenes> |
8 | <!--View Controller--> | 9 | <!--View Controller--> |
@@ -28,9 +29,6 @@ | @@ -28,9 +29,6 @@ | ||
28 | <color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> | 29 | <color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> |
29 | <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/> | 30 | <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/> |
30 | </state> | 31 | </state> |
31 | - <variation key="heightClass=regular-widthClass=compact" fixedFrame="YES"> | ||
32 | - <rect key="frame" x="0.0" y="28" width="400" height="97"/> | ||
33 | - </variation> | ||
34 | <connections> | 32 | <connections> |
35 | <action selector="handleEventButtonClick:" destination="vXZ-lx-hvc" eventType="touchUpInside" id="hNG-qX-SI9"/> | 33 | <action selector="handleEventButtonClick:" destination="vXZ-lx-hvc" eventType="touchUpInside" id="hNG-qX-SI9"/> |
36 | </connections> | 34 | </connections> |
@@ -46,9 +44,6 @@ | @@ -46,9 +44,6 @@ | ||
46 | <color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> | 44 | <color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> |
47 | <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/> | 45 | <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/> |
48 | </state> | 46 | </state> |
49 | - <variation key="heightClass=regular-widthClass=compact" fixedFrame="YES"> | ||
50 | - <rect key="frame" x="0.0" y="133" width="400" height="97"/> | ||
51 | - </variation> | ||
52 | <connections> | 47 | <connections> |
53 | <action selector="handleErrorButtonClick:" destination="vXZ-lx-hvc" eventType="touchUpInside" id="PaQ-1X-itQ"/> | 48 | <action selector="handleErrorButtonClick:" destination="vXZ-lx-hvc" eventType="touchUpInside" id="PaQ-1X-itQ"/> |
54 | </connections> | 49 | </connections> |
@@ -64,9 +59,6 @@ | @@ -64,9 +59,6 @@ | ||
64 | <color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> | 59 | <color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> |
65 | <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/> | 60 | <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/> |
66 | </state> | 61 | </state> |
67 | - <variation key="heightClass=regular-widthClass=compact" fixedFrame="YES"> | ||
68 | - <rect key="frame" x="0.0" y="239" width="400" height="97"/> | ||
69 | - </variation> | ||
70 | <connections> | 62 | <connections> |
71 | <action selector="handleCrashButtonClick:" destination="vXZ-lx-hvc" eventType="touchUpInside" id="Q2b-me-dmG"/> | 63 | <action selector="handleCrashButtonClick:" destination="vXZ-lx-hvc" eventType="touchUpInside" id="Q2b-me-dmG"/> |
72 | </connections> | 64 | </connections> |
@@ -85,20 +77,59 @@ | @@ -85,20 +77,59 @@ | ||
85 | <action selector="handleSegmentClick:" destination="vXZ-lx-hvc" eventType="valueChanged" id="Obq-Ox-kiH"/> | 77 | <action selector="handleSegmentClick:" destination="vXZ-lx-hvc" eventType="valueChanged" id="Obq-Ox-kiH"/> |
86 | </connections> | 78 | </connections> |
87 | </segmentedControl> | 79 | </segmentedControl> |
80 | + <button opaque="NO" contentMode="scaleToFill" ambiguous="YES" misplaced="YES" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="roundedRect" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="Smy-DE-Wff"> | ||
81 | + <rect key="frame" x="10" y="355" width="580" height="100"/> | ||
82 | + <color key="backgroundColor" red="1" green="0.69311940380000003" blue="0.023097386689999999" alpha="1" colorSpace="calibratedRGB"/> | ||
83 | + <constraints> | ||
84 | + <constraint firstAttribute="height" constant="97" id="KbW-bi-5og"/> | ||
85 | + <constraint firstAttribute="height" constant="100" id="SWs-iK-Vnv"/> | ||
86 | + <constraint firstAttribute="height" constant="97" id="YaS-EM-5j8"/> | ||
87 | + </constraints> | ||
88 | + <fontDescription key="fontDescription" type="boldSystem" pointSize="34"/> | ||
89 | + <state key="normal" title="Performance"> | ||
90 | + <color key="titleColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> | ||
91 | + <color key="titleShadowColor" white="0.5" alpha="1" colorSpace="calibratedWhite"/> | ||
92 | + </state> | ||
93 | + <variation key="default"> | ||
94 | + <mask key="constraints"> | ||
95 | + <exclude reference="KbW-bi-5og"/> | ||
96 | + <exclude reference="SWs-iK-Vnv"/> | ||
97 | + <exclude reference="YaS-EM-5j8"/> | ||
98 | + </mask> | ||
99 | + </variation> | ||
100 | + <variation key="heightClass=regular-widthClass=compact"> | ||
101 | + <mask key="constraints"> | ||
102 | + <include reference="KbW-bi-5og"/> | ||
103 | + <exclude reference="YaS-EM-5j8"/> | ||
104 | + </mask> | ||
105 | + </variation> | ||
106 | + <connections> | ||
107 | + <action selector="performanceAction:" destination="vXZ-lx-hvc" eventType="touchUpInside" id="gyJ-sy-Ryz"/> | ||
108 | + </connections> | ||
109 | + </button> | ||
88 | </subviews> | 110 | </subviews> |
89 | <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> | 111 | <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/> |
90 | <constraints> | 112 | <constraints> |
91 | <constraint firstItem="bwP-V2-lOZ" firstAttribute="top" secondItem="gW0-dg-TMX" secondAttribute="bottom" constant="8" id="1aJ-tt-QeY"/> | 113 | <constraint firstItem="bwP-V2-lOZ" firstAttribute="top" secondItem="gW0-dg-TMX" secondAttribute="bottom" constant="8" id="1aJ-tt-QeY"/> |
114 | + <constraint firstItem="Smy-DE-Wff" firstAttribute="top" secondItem="ewb-Ni-v83" secondAttribute="bottom" constant="11" id="3uc-kf-bEL"/> | ||
92 | <constraint firstItem="gW0-dg-TMX" firstAttribute="top" secondItem="jyV-Pf-zRb" secondAttribute="bottom" id="4N3-W1-Guz"/> | 115 | <constraint firstItem="gW0-dg-TMX" firstAttribute="top" secondItem="jyV-Pf-zRb" secondAttribute="bottom" id="4N3-W1-Guz"/> |
93 | <constraint firstAttribute="trailing" secondItem="gW0-dg-TMX" secondAttribute="trailing" constant="10" id="9Nj-U5-cTm"/> | 116 | <constraint firstAttribute="trailing" secondItem="gW0-dg-TMX" secondAttribute="trailing" constant="10" id="9Nj-U5-cTm"/> |
94 | <constraint firstItem="ewb-Ni-v83" firstAttribute="top" secondItem="bwP-V2-lOZ" secondAttribute="bottom" constant="10" id="9f1-iX-d2x"/> | 117 | <constraint firstItem="ewb-Ni-v83" firstAttribute="top" secondItem="bwP-V2-lOZ" secondAttribute="bottom" constant="10" id="9f1-iX-d2x"/> |
95 | <constraint firstItem="bwP-V2-lOZ" firstAttribute="top" secondItem="gW0-dg-TMX" secondAttribute="bottom" constant="10" id="CIg-AA-tZq"/> | 118 | <constraint firstItem="bwP-V2-lOZ" firstAttribute="top" secondItem="gW0-dg-TMX" secondAttribute="bottom" constant="10" id="CIg-AA-tZq"/> |
119 | + <constraint firstItem="Smy-DE-Wff" firstAttribute="leading" secondItem="kh9-bI-dsS" secondAttribute="leadingMargin" id="G9Z-IZ-UsM"/> | ||
96 | <constraint firstAttribute="trailing" secondItem="ewb-Ni-v83" secondAttribute="trailing" constant="10" id="OJg-v6-WQP"/> | 120 | <constraint firstAttribute="trailing" secondItem="ewb-Ni-v83" secondAttribute="trailing" constant="10" id="OJg-v6-WQP"/> |
97 | <constraint firstItem="ewb-Ni-v83" firstAttribute="leading" secondItem="kh9-bI-dsS" secondAttribute="leading" constant="10" id="Pfw-gK-Ojb"/> | 121 | <constraint firstItem="ewb-Ni-v83" firstAttribute="leading" secondItem="kh9-bI-dsS" secondAttribute="leading" constant="10" id="Pfw-gK-Ojb"/> |
98 | <constraint firstItem="ewb-Ni-v83" firstAttribute="top" secondItem="bwP-V2-lOZ" secondAttribute="bottom" constant="8" id="Rtg-70-QXv"/> | 122 | <constraint firstItem="ewb-Ni-v83" firstAttribute="top" secondItem="bwP-V2-lOZ" secondAttribute="bottom" constant="8" id="Rtg-70-QXv"/> |
123 | + <constraint firstAttribute="trailingMargin" secondItem="Smy-DE-Wff" secondAttribute="trailing" constant="-6" id="Tuk-VN-7pL"/> | ||
99 | <constraint firstAttribute="centerX" secondItem="nAu-Ws-BbT" secondAttribute="centerX" id="abS-HB-PCF"/> | 124 | <constraint firstAttribute="centerX" secondItem="nAu-Ws-BbT" secondAttribute="centerX" id="abS-HB-PCF"/> |
125 | + <constraint firstItem="Smy-DE-Wff" firstAttribute="leading" secondItem="kh9-bI-dsS" secondAttribute="leadingMargin" constant="-6" id="c01-MH-mXG"/> | ||
126 | + <constraint firstItem="Smy-DE-Wff" firstAttribute="top" secondItem="ewb-Ni-v83" secondAttribute="bottom" constant="11" id="eXk-n2-qoV"/> | ||
100 | <constraint firstItem="bwP-V2-lOZ" firstAttribute="leading" secondItem="kh9-bI-dsS" secondAttribute="leading" constant="10" id="ear-Q6-Cvo"/> | 127 | <constraint firstItem="bwP-V2-lOZ" firstAttribute="leading" secondItem="kh9-bI-dsS" secondAttribute="leading" constant="10" id="ear-Q6-Cvo"/> |
101 | <constraint firstItem="ewb-Ni-v83" firstAttribute="top" secondItem="bwP-V2-lOZ" secondAttribute="bottom" constant="10" id="en3-RB-i3r"/> | 128 | <constraint firstItem="ewb-Ni-v83" firstAttribute="top" secondItem="bwP-V2-lOZ" secondAttribute="bottom" constant="10" id="en3-RB-i3r"/> |
129 | + <constraint firstAttribute="trailingMargin" secondItem="Smy-DE-Wff" secondAttribute="trailing" constant="-16" id="kfh-8s-TT3"/> | ||
130 | + <constraint firstItem="Smy-DE-Wff" firstAttribute="top" secondItem="ewb-Ni-v83" secondAttribute="bottom" constant="15" id="pmS-TD-itq"/> | ||
131 | + <constraint firstItem="Smy-DE-Wff" firstAttribute="leading" secondItem="kh9-bI-dsS" secondAttribute="leadingMargin" id="saZ-je-WLV"/> | ||
132 | + <constraint firstAttribute="trailingMargin" secondItem="Smy-DE-Wff" secondAttribute="trailing" constant="-6" id="soi-L7-3pD"/> | ||
102 | <constraint firstAttribute="trailing" secondItem="bwP-V2-lOZ" secondAttribute="trailing" constant="10" id="tK7-Cs-ypv"/> | 133 | <constraint firstAttribute="trailing" secondItem="bwP-V2-lOZ" secondAttribute="trailing" constant="10" id="tK7-Cs-ypv"/> |
103 | <constraint firstItem="bwP-V2-lOZ" firstAttribute="top" secondItem="gW0-dg-TMX" secondAttribute="bottom" constant="10" id="tgA-RV-Qfw"/> | 134 | <constraint firstItem="bwP-V2-lOZ" firstAttribute="top" secondItem="gW0-dg-TMX" secondAttribute="bottom" constant="10" id="tgA-RV-Qfw"/> |
104 | <constraint firstItem="2fi-mo-0CV" firstAttribute="top" secondItem="nAu-Ws-BbT" secondAttribute="bottom" constant="45" id="u0B-Yk-3Eh"/> | 135 | <constraint firstItem="2fi-mo-0CV" firstAttribute="top" secondItem="nAu-Ws-BbT" secondAttribute="bottom" constant="45" id="u0B-Yk-3Eh"/> |
@@ -110,6 +141,25 @@ | @@ -110,6 +141,25 @@ | ||
110 | <exclude reference="tgA-RV-Qfw"/> | 141 | <exclude reference="tgA-RV-Qfw"/> |
111 | <exclude reference="9f1-iX-d2x"/> | 142 | <exclude reference="9f1-iX-d2x"/> |
112 | <exclude reference="Rtg-70-QXv"/> | 143 | <exclude reference="Rtg-70-QXv"/> |
144 | + <exclude reference="3uc-kf-bEL"/> | ||
145 | + <exclude reference="G9Z-IZ-UsM"/> | ||
146 | + <exclude reference="Tuk-VN-7pL"/> | ||
147 | + <exclude reference="c01-MH-mXG"/> | ||
148 | + <exclude reference="eXk-n2-qoV"/> | ||
149 | + <exclude reference="kfh-8s-TT3"/> | ||
150 | + <exclude reference="pmS-TD-itq"/> | ||
151 | + <exclude reference="saZ-je-WLV"/> | ||
152 | + <exclude reference="soi-L7-3pD"/> | ||
153 | + </mask> | ||
154 | + </variation> | ||
155 | + <variation key="heightClass=regular-widthClass=compact"> | ||
156 | + <mask key="constraints"> | ||
157 | + <exclude reference="3uc-kf-bEL"/> | ||
158 | + <exclude reference="G9Z-IZ-UsM"/> | ||
159 | + <include reference="c01-MH-mXG"/> | ||
160 | + <include reference="eXk-n2-qoV"/> | ||
161 | + <exclude reference="kfh-8s-TT3"/> | ||
162 | + <include reference="soi-L7-3pD"/> | ||
113 | </mask> | 163 | </mask> |
114 | </variation> | 164 | </variation> |
115 | </view> | 165 | </view> |
@@ -123,7 +173,7 @@ | @@ -123,7 +173,7 @@ | ||
123 | </viewController> | 173 | </viewController> |
124 | <placeholder placeholderIdentifier="IBFirstResponder" id="x5A-6p-PRh" sceneMemberID="firstResponder"/> | 174 | <placeholder placeholderIdentifier="IBFirstResponder" id="x5A-6p-PRh" sceneMemberID="firstResponder"/> |
125 | </objects> | 175 | </objects> |
126 | - <point key="canvasLocation" x="-290" y="235"/> | 176 | + <point key="canvasLocation" x="-291" y="234.75"/> |
127 | </scene> | 177 | </scene> |
128 | </scenes> | 178 | </scenes> |
129 | </document> | 179 | </document> |
@@ -38,5 +38,22 @@ | @@ -38,5 +38,22 @@ | ||
38 | <array> | 38 | <array> |
39 | <string>UIInterfaceOrientationPortrait</string> | 39 | <string>UIInterfaceOrientationPortrait</string> |
40 | </array> | 40 | </array> |
41 | + <key>NSAppTransportSecurity</key> | ||
42 | + <dict> | ||
43 | + <key>NSAllowsArbitraryLoads</key> | ||
44 | + <true/> | ||
45 | + <key>NSExceptionDomains</key> | ||
46 | + <dict> | ||
47 | + <key>alipay.com</key> | ||
48 | + <dict> | ||
49 | + <key>NSIncludesSubdomains</key> | ||
50 | + <true/> | ||
51 | + <key>NSTemporaryExceptionAllowsInsecureHTTPLoads</key> | ||
52 | + <true/> | ||
53 | + <key>NSTemporaryExceptionMinimumTLSVersion</key> | ||
54 | + <string>TLSv1.1</string> | ||
55 | + </dict> | ||
56 | + </dict> | ||
57 | + </dict> | ||
41 | </dict> | 58 | </dict> |
42 | </plist> | 59 | </plist> |
@@ -11,6 +11,7 @@ | @@ -11,6 +11,7 @@ | ||
11 | #import "YH_Analytics.h" | 11 | #import "YH_Analytics.h" |
12 | 12 | ||
13 | @interface ViewController () | 13 | @interface ViewController () |
14 | +- (IBAction)performanceAction:(id)sender; | ||
14 | 15 | ||
15 | @end | 16 | @end |
16 | 17 | ||
@@ -80,4 +81,16 @@ | @@ -80,4 +81,16 @@ | ||
80 | [[YH_Analytics sharedInstance] updateLogStrategy:strategy customInterval:interval]; | 81 | [[YH_Analytics sharedInstance] updateLogStrategy:strategy customInterval:interval]; |
81 | } | 82 | } |
82 | 83 | ||
84 | +- (IBAction)performanceAction:(id)sender { | ||
85 | + | ||
86 | + for (int i = 0; i<101; i++) { | ||
87 | + [[YH_Analytics sharedInstance]logPerformanceWithType:kPerformanceTypeImageLoad parameters:@{ | ||
88 | + @"index":@(i), | ||
89 | + JsonKeyPerformanceTag:@"YH_TAGS", | ||
90 | + JsonKeyPerformanceURL:@"http://ad.yoho.cn/yohobuy/img/home/02.jpg", | ||
91 | + JsonKeyPerformanceEvt:JsonKeyPerformanceEvtBegin | ||
92 | + }]; | ||
93 | + } | ||
94 | + | ||
95 | +} | ||
83 | @end | 96 | @end |
@@ -15,7 +15,8 @@ typedef NS_ENUM(NSUInteger, YHItemDataType) { | @@ -15,7 +15,8 @@ typedef NS_ENUM(NSUInteger, YHItemDataType) { | ||
15 | YHItemDataTypeEvent, // 普通事件 | 15 | YHItemDataTypeEvent, // 普通事件 |
16 | YHItemDataTypeError, // 错误 | 16 | YHItemDataTypeError, // 错误 |
17 | YHItemDataTypeDevice, | 17 | YHItemDataTypeDevice, |
18 | - YHItemDataTypeStatus | 18 | + YHItemDataTypeStatus, |
19 | + YHItemDataTypePerformance | ||
19 | }; | 20 | }; |
20 | @interface YHAnalyItemData : NSObject | 21 | @interface YHAnalyItemData : NSObject |
21 | 22 |
@@ -12,9 +12,9 @@ | @@ -12,9 +12,9 @@ | ||
12 | @interface YHDevice : YHAnalyItemData | 12 | @interface YHDevice : YHAnalyItemData |
13 | 13 | ||
14 | @property (copy, nonatomic) NSString *ak; // App key 业务 | 14 | @property (copy, nonatomic) NSString *ak; // App key 业务 |
15 | +@property (copy, nonatomic) NSString *ch; // 推广渠道号 | ||
15 | 16 | ||
16 | @property (copy, nonatomic, readonly) NSString *sv; // 采集数据sdk的版本 | 17 | @property (copy, nonatomic, readonly) NSString *sv; // 采集数据sdk的版本 |
17 | -@property (copy, nonatomic, readonly) NSString *ch; // 推广渠道号 | ||
18 | @property (copy, nonatomic, readonly) NSString *os; // 操作系统 | 18 | @property (copy, nonatomic, readonly) NSString *os; // 操作系统 |
19 | @property (copy, nonatomic, readonly) NSString *osv; // 操作系统版本 | 19 | @property (copy, nonatomic, readonly) NSString *osv; // 操作系统版本 |
20 | @property (copy, nonatomic, readonly) NSString *dm; // 设备型号 | 20 | @property (copy, nonatomic, readonly) NSString *dm; // 设备型号 |
@@ -21,7 +21,6 @@ | @@ -21,7 +21,6 @@ | ||
21 | @interface YHDevice () | 21 | @interface YHDevice () |
22 | 22 | ||
23 | @property (copy, nonatomic) NSString *sv; // 采集数据sdk的版本 | 23 | @property (copy, nonatomic) NSString *sv; // 采集数据sdk的版本 |
24 | -@property (copy, nonatomic) NSString *ch; // 推广渠道号 | ||
25 | @property (copy, nonatomic) NSString *os; // 操作系统 | 24 | @property (copy, nonatomic) NSString *os; // 操作系统 |
26 | @property (copy, nonatomic) NSString *osv; // 操作系统版本 | 25 | @property (copy, nonatomic) NSString *osv; // 操作系统版本 |
27 | @property (copy, nonatomic) NSString *dm; // 设备型号 | 26 | @property (copy, nonatomic) NSString *dm; // 设备型号 |
1 | +// | ||
2 | +// YHEvent.h | ||
3 | +// YH_Analytics | ||
4 | +// | ||
5 | +// Created by 王钱钧 on 15/2/4. | ||
6 | +// Copyright (c) 2015年 YOHO. All rights reserved. | ||
7 | +// | ||
8 | + | ||
9 | +#import <Foundation/Foundation.h> | ||
10 | +#import "YHAnalyItemData.h" | ||
11 | + | ||
12 | + | ||
13 | +@interface YHPerformance : YHAnalyItemData | ||
14 | + | ||
15 | +@property (copy, nonatomic) NSString *uid; // 用户id | ||
16 | +@property (copy, nonatomic) NSString *sid; // 会话id(由设备标识和启动时间戳md5) | ||
17 | +@property (copy, nonatomic) NSString *ts; // 时间戳 | ||
18 | +@property (copy, nonatomic) NSString *type; // 统计类型, IMG_LOAD,API_CALL,WEBVIEW_LOAD | ||
19 | +@property (copy, nonatomic) NSString *net; // 网络 | ||
20 | +@property (copy, nonatomic) NSDictionary *param; // 操作参数 | ||
21 | + | ||
22 | + | ||
23 | +@end |
1 | +// | ||
2 | +// YHEvent.m | ||
3 | +// YH_Analytics | ||
4 | +// | ||
5 | +// Created by 王钱钧 on 15/2/4. | ||
6 | +// Copyright (c) 2015年 YOHO. All rights reserved. | ||
7 | +// | ||
8 | + | ||
9 | +#import "YHPerformance.h" | ||
10 | + | ||
11 | +@implementation YHPerformance | ||
12 | + | ||
13 | +- (id)init | ||
14 | +{ | ||
15 | + self = [super initWithDataType:YHItemDataTypePerformance]; | ||
16 | + if (self) { | ||
17 | + | ||
18 | + } | ||
19 | + | ||
20 | + return self; | ||
21 | +} | ||
22 | + | ||
23 | +- (NSDictionary *)jsonDictionary | ||
24 | +{ | ||
25 | + return @{JsonKeyPerformanceUID : self.uid ? self.uid : @"", | ||
26 | + JsonKeyPerformanceTS : self.ts ? self.ts : @"", | ||
27 | + JsonKeyPerformanceSID : self.sid ? self.sid : @"", | ||
28 | + JsonKeyPerformanceTYPE : self.type ? self.type : @"", | ||
29 | + JsonKeyPerformancePARAM : self.param ? self.param : @"", | ||
30 | + JsonKeyPerformanceEvtNet : self.net ? self.net : @"" | ||
31 | +// JsonKeyEventINDEX : self.index ? self.index : @"" | ||
32 | + }; | ||
33 | +} | ||
34 | + | ||
35 | +@end |
YH_Analytics/YH_Analytics/YH_Analytics/Utils/AFHTTPRequestOperationManager+YHPriorityRequest.h
0 → 100644
1 | +// | ||
2 | +// AFHTTPRequestOperationManager+YHPriorityRequest.h | ||
3 | +// YH_Analytics | ||
4 | +// | ||
5 | +// Created by 王钱钧 on 15/11/9. | ||
6 | +// Copyright © 2015年 YOHO. All rights reserved. | ||
7 | +// | ||
8 | + | ||
9 | +#import "AFHTTPRequestOperationManager.h" | ||
10 | + | ||
11 | +@interface AFHTTPRequestOperationManager (YHPriorityRequest) | ||
12 | + | ||
13 | +- (AFHTTPRequestOperation *)POST:(NSString *)URLString | ||
14 | + priority:(NSOperationQueuePriority)queuePriority | ||
15 | + parameters:(id)parameters | ||
16 | + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success | ||
17 | + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure; | ||
18 | +@end |
YH_Analytics/YH_Analytics/YH_Analytics/Utils/AFHTTPRequestOperationManager+YHPriorityRequest.m
0 → 100644
1 | +// | ||
2 | +// AFHTTPRequestOperationManager+YHPriorityRequest.m | ||
3 | +// YH_Analytics | ||
4 | +// | ||
5 | +// Created by 王钱钧 on 15/11/9. | ||
6 | +// Copyright © 2015年 YOHO. All rights reserved. | ||
7 | +// | ||
8 | + | ||
9 | +#import "AFHTTPRequestOperationManager+YHPriorityRequest.h" | ||
10 | + | ||
11 | +@implementation AFHTTPRequestOperationManager (YHPriorityRequest) | ||
12 | +- (AFHTTPRequestOperation *)POST:(NSString *)URLString | ||
13 | + priority:(NSOperationQueuePriority)queuePriority | ||
14 | + parameters:(id)parameters | ||
15 | + success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success | ||
16 | + failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure | ||
17 | +{ | ||
18 | + NSError *serializationError = nil; | ||
19 | + NSMutableURLRequest *request = [self.requestSerializer requestWithMethod:@"POST" URLString:[[NSURL URLWithString:URLString relativeToURL:self.baseURL] absoluteString] parameters:parameters error:&serializationError]; | ||
20 | + if (serializationError) { | ||
21 | + if (failure) { | ||
22 | +#pragma clang diagnostic push | ||
23 | +#pragma clang diagnostic ignored "-Wgnu" | ||
24 | + dispatch_async(self.completionQueue ?: dispatch_get_main_queue(), ^{ | ||
25 | + failure(nil, serializationError); | ||
26 | + }); | ||
27 | +#pragma clang diagnostic pop | ||
28 | + } | ||
29 | + | ||
30 | + return nil; | ||
31 | + } | ||
32 | + | ||
33 | + AFHTTPRequestOperation *operation = [self HTTPRequestOperationWithRequest:request success:success failure:failure]; | ||
34 | + [operation setQueuePriority:queuePriority]; // 设置请求优先级为最低 | ||
35 | + [self.operationQueue addOperation:operation]; | ||
36 | + | ||
37 | + return operation; | ||
38 | +} | ||
39 | + | ||
40 | +@end |
@@ -10,9 +10,9 @@ | @@ -10,9 +10,9 @@ | ||
10 | #import "YHAnalyItemData.h" | 10 | #import "YHAnalyItemData.h" |
11 | 11 | ||
12 | /* | 12 | /* |
13 | - 用于组装数据 | 13 | + 用于组装数据 |
14 | */ | 14 | */ |
15 | - | 15 | +@class YHPerformance; |
16 | @interface YHAssemblyAssistant : NSObject | 16 | @interface YHAssemblyAssistant : NSObject |
17 | 17 | ||
18 | + (instancetype)sharedInstance; | 18 | + (instancetype)sharedInstance; |
@@ -21,14 +21,18 @@ | @@ -21,14 +21,18 @@ | ||
21 | 21 | ||
22 | - (void)saveItemData:(YHAnalyItemData *)itemData; | 22 | - (void)saveItemData:(YHAnalyItemData *)itemData; |
23 | 23 | ||
24 | +- (void)savePerformanceData:(YHPerformance *)perf; | ||
25 | + | ||
24 | - (NSUInteger)getAllEventCount; | 26 | - (NSUInteger)getAllEventCount; |
25 | 27 | ||
26 | - (NSDictionary *)getUploadData; | 28 | - (NSDictionary *)getUploadData; |
27 | 29 | ||
28 | -- (void)prepareImmediUploadDic:(NSString *)appId sessionId:(NSString *)sessionId; | 30 | +- (void)prepareImmediUploadDic:(NSString *)appId sessionId:(NSString *)sessionId channelId:(NSString *)channelId; |
29 | 31 | ||
30 | - (void)uploadDiskData; | 32 | - (void)uploadDiskData; |
31 | 33 | ||
32 | - (void)uploadImmedilyWithEvent:(YHAnalyItemData *)itemData; | 34 | - (void)uploadImmedilyWithEvent:(YHAnalyItemData *)itemData; |
33 | 35 | ||
36 | +- (void)uploadFirstLaunchApp; | ||
37 | + | ||
34 | @end | 38 | @end |
@@ -19,6 +19,7 @@ | @@ -19,6 +19,7 @@ | ||
19 | #import "YHError.h" | 19 | #import "YHError.h" |
20 | #import "YHDevice.h" | 20 | #import "YHDevice.h" |
21 | #import "YHStatus.h" | 21 | #import "YHStatus.h" |
22 | +#import "YHPerformance.h" | ||
22 | 23 | ||
23 | static dispatch_queue_t persisting_queue() { | 24 | static dispatch_queue_t persisting_queue() { |
24 | static dispatch_queue_t persisting_queue; | 25 | static dispatch_queue_t persisting_queue; |
@@ -73,6 +74,11 @@ static dispatch_queue_t persisting_queue() { | @@ -73,6 +74,11 @@ static dispatch_queue_t persisting_queue() { | ||
73 | */ | 74 | */ |
74 | @property (strong, nonatomic) NSMutableArray *tempEventArray; | 75 | @property (strong, nonatomic) NSMutableArray *tempEventArray; |
75 | 76 | ||
77 | +/** | ||
78 | + * 临时Performance数组 | ||
79 | + */ | ||
80 | +@property (strong, nonatomic) NSMutableArray *tempPerformanceArray; | ||
81 | + | ||
76 | 82 | ||
77 | // 启动定位服务 | 83 | // 启动定位服务 |
78 | - (void)startLocationService; | 84 | - (void)startLocationService; |
@@ -80,6 +86,10 @@ static dispatch_queue_t persisting_queue() { | @@ -80,6 +86,10 @@ static dispatch_queue_t persisting_queue() { | ||
80 | - (void)startObserverNetworkReachabilityStatus; | 86 | - (void)startObserverNetworkReachabilityStatus; |
81 | // 将一个事件写入到文件 | 87 | // 将一个事件写入到文件 |
82 | - (BOOL)writeEventToFile:(YHEvent *)eventData; | 88 | - (BOOL)writeEventToFile:(YHEvent *)eventData; |
89 | + | ||
90 | +// 将一个Performance写入到文件 | ||
91 | +- (BOOL)writePerformanceToFile:(YHPerformance *)performanceData; | ||
92 | + | ||
83 | // 将一个错误写入到文件 | 93 | // 将一个错误写入到文件 |
84 | - (BOOL)writeErrorToFile:(YHError *)errorData; | 94 | - (BOOL)writeErrorToFile:(YHError *)errorData; |
85 | // 当触发预设的条件时,自动上传数据 | 95 | // 当触发预设的条件时,自动上传数据 |
@@ -184,6 +194,17 @@ static dispatch_queue_t persisting_queue() { | @@ -184,6 +194,17 @@ static dispatch_queue_t persisting_queue() { | ||
184 | return _tempEventArray; | 194 | return _tempEventArray; |
185 | } | 195 | } |
186 | 196 | ||
197 | +- (NSMutableArray *)tempPerformanceArray | ||
198 | +{ | ||
199 | + if (!_tempPerformanceArray) { | ||
200 | + _tempPerformanceArray = [NSMutableArray array]; | ||
201 | + } | ||
202 | + return _tempPerformanceArray; | ||
203 | +} | ||
204 | + | ||
205 | + | ||
206 | + | ||
207 | + | ||
187 | #pragma mark - public method | 208 | #pragma mark - public method |
188 | 209 | ||
189 | - (BOOL)canPersisting | 210 | - (BOOL)canPersisting |
@@ -205,23 +226,75 @@ static dispatch_queue_t persisting_queue() { | @@ -205,23 +226,75 @@ static dispatch_queue_t persisting_queue() { | ||
205 | return [NSDictionary dictionaryWithContentsOfFile:self.eventFileName]; | 226 | return [NSDictionary dictionaryWithContentsOfFile:self.eventFileName]; |
206 | } | 227 | } |
207 | 228 | ||
208 | -- (void)prepareImmediUploadDic:(NSString *)appId sessionId:(NSString *)sessionId | 229 | +- (void)prepareImmediUploadDic:(NSString *)appId sessionId:(NSString *)sessionId channelId:(NSString *)channelId |
209 | { | 230 | { |
210 | self.currentStatus.sid = sessionId; | 231 | self.currentStatus.sid = sessionId; |
211 | self.device.ak = appId; | 232 | self.device.ak = appId; |
233 | + self.device.ch = channelId; | ||
212 | 234 | ||
213 | - // 设置device | ||
214 | - [self.immediUploadItemDic setObject:self.device.jsonDictionary forKey:JsonKeyDataTypeDevice]; | ||
215 | - | ||
216 | - // 设置status | ||
217 | - [self.immediUploadItemDic setObject: [[NSMutableArray alloc]initWithObjects:self.currentStatus.jsonDictionary, nil] forKey:JsonKeyDataTypeStatus]; | 235 | + @synchronized(self.immediUploadItemDic) { |
236 | + // 设置device | ||
237 | + [self.immediUploadItemDic setObject:self.device.jsonDictionary forKey:JsonKeyDataTypeDevice]; | ||
238 | + | ||
239 | + // 设置status | ||
240 | + [self.immediUploadItemDic setObject: [[NSMutableArray alloc]initWithObjects:self.currentStatus.jsonDictionary, nil] forKey:JsonKeyDataTypeStatus]; | ||
241 | + } | ||
218 | 242 | ||
219 | [self startObserverNetworkReachabilityStatus]; | 243 | [self startObserverNetworkReachabilityStatus]; |
220 | 244 | ||
221 | [self startLocationService]; | 245 | [self startLocationService]; |
222 | } | 246 | } |
223 | 247 | ||
248 | +- (void)uploadFirstLaunchApp | ||
249 | +{ | ||
250 | + if ([[NSUserDefaults standardUserDefaults] objectForKey:@"kDMFinishLaunchApp"] == nil){ | ||
251 | + NSDictionary *paramDic = @{@"mac" : self.device.mac?:@"", | ||
252 | + @"ifa" : self.device.ifa?:@""}; | ||
253 | + | ||
254 | + [YHNetworkService uploadFirstLaunchApp:paramDic completionBlock:^(BOOL flag, NSError *error) { | ||
255 | + if (flag) { | ||
256 | + [[NSUserDefaults standardUserDefaults] setObject:@"YES" forKey:@"kDMFinishLaunchApp"]; | ||
257 | + [[NSUserDefaults standardUserDefaults] synchronize]; | ||
258 | + } | ||
259 | + }]; | ||
260 | + } | ||
261 | + | ||
262 | + if ([[NSUserDefaults standardUserDefaults] objectForKey:@"kGDTFinishLaunchApp"] == nil){ | ||
263 | + NSDictionary *param = @{@"imei" : self.device.ifa?:@""}; | ||
264 | + | ||
265 | + [YHNetworkService uploadFirstLaunchAppByGuangDiaTong:param completionBlock:^(BOOL flag, NSError *error) { | ||
266 | + if (flag) { | ||
267 | + [[NSUserDefaults standardUserDefaults] setObject:@"YES" forKey:@"kGDTFinishLaunchApp"]; | ||
268 | + [[NSUserDefaults standardUserDefaults] synchronize]; | ||
269 | + } | ||
270 | + }]; | ||
271 | + } | ||
272 | +} | ||
273 | + | ||
224 | #pragma mark - 持久化数据 | 274 | #pragma mark - 持久化数据 |
275 | +- (void)savePerformanceData:(YHPerformance *)perf | ||
276 | +{ | ||
277 | + if (perf == nil || ![perf isKindOfClass:[YHPerformance class]]) { | ||
278 | + NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException | ||
279 | + reason:@"The input parameter is nil or an unexpected value." | ||
280 | + userInfo:nil]; | ||
281 | + [exception raise]; | ||
282 | + | ||
283 | + } | ||
284 | + | ||
285 | + if ([self canPersisting]) { | ||
286 | + perf.net = self.currentStatus.net; | ||
287 | + | ||
288 | + dispatch_async(persisting_queue(), ^{ | ||
289 | + | ||
290 | + if ([self writePerformanceToFile:perf]) { | ||
291 | + [self autoUploadData]; | ||
292 | + } | ||
293 | + }); | ||
294 | + } | ||
295 | + | ||
296 | +} | ||
297 | + | ||
225 | - (void)saveItemData:(YHAnalyItemData *)itemData | 298 | - (void)saveItemData:(YHAnalyItemData *)itemData |
226 | { | 299 | { |
227 | if (itemData == nil || ![itemData isKindOfClass:[YHAnalyItemData class]]) { | 300 | if (itemData == nil || ![itemData isKindOfClass:[YHAnalyItemData class]]) { |
@@ -232,9 +305,9 @@ static dispatch_queue_t persisting_queue() { | @@ -232,9 +305,9 @@ static dispatch_queue_t persisting_queue() { | ||
232 | } | 305 | } |
233 | 306 | ||
234 | if ([self canPersisting]) { | 307 | if ([self canPersisting]) { |
235 | - | 308 | + |
236 | if (itemData.dataType == YHItemDataTypeEvent) { | 309 | if (itemData.dataType == YHItemDataTypeEvent) { |
237 | - YHEvent *event = (YHEvent *)itemData; | 310 | + YHEvent *event = (YHEvent *)itemData; |
238 | // 将持久化任务抛入 persistingQueue 队列 | 311 | // 将持久化任务抛入 persistingQueue 队列 |
239 | dispatch_async(persisting_queue(), ^{ | 312 | dispatch_async(persisting_queue(), ^{ |
240 | 313 | ||
@@ -242,7 +315,19 @@ static dispatch_queue_t persisting_queue() { | @@ -242,7 +315,19 @@ static dispatch_queue_t persisting_queue() { | ||
242 | [self autoUploadData]; | 315 | [self autoUploadData]; |
243 | } | 316 | } |
244 | }); | 317 | }); |
245 | - | 318 | + |
319 | + } else if (itemData.dataType == YHItemDataTypePerformance) { | ||
320 | + YHPerformance *performance = (YHPerformance *)itemData; | ||
321 | + performance.net = self.currentStatus.net; | ||
322 | + | ||
323 | + dispatch_async(persisting_queue(), ^{ | ||
324 | + | ||
325 | + if ([self writePerformanceToFile:performance]) { | ||
326 | + [self autoUploadData]; | ||
327 | + } | ||
328 | + }); | ||
329 | + | ||
330 | + | ||
246 | } else if(itemData.dataType == YHItemDataTypeError){ //error | 331 | } else if(itemData.dataType == YHItemDataTypeError){ //error |
247 | YHError *errorData = (YHError *)itemData; | 332 | YHError *errorData = (YHError *)itemData; |
248 | NSDictionary *st = [errorData.param objectForKey:JsonKeyErrorST]; | 333 | NSDictionary *st = [errorData.param objectForKey:JsonKeyErrorST]; |
@@ -286,28 +371,54 @@ static dispatch_queue_t persisting_queue() { | @@ -286,28 +371,54 @@ static dispatch_queue_t persisting_queue() { | ||
286 | if (itemData.dataType == YHItemDataTypeEvent) { | 371 | if (itemData.dataType == YHItemDataTypeEvent) { |
287 | YHEvent *event = (YHEvent *)itemData; | 372 | YHEvent *event = (YHEvent *)itemData; |
288 | if (event) { | 373 | if (event) { |
289 | - [self.immediUploadItemDic setObject:[[NSMutableArray alloc]initWithObjects:event.jsonDictionary, nil] forKey:JsonKeyDataTypeEvents]; | ||
290 | - | ||
291 | - [[YHNetworkService sharedInstance] uploadLogData:self.immediUploadItemDic completionBlock:^(BOOL success, NSError *error) { | ||
292 | - if (success) { | ||
293 | - YALog(@"upload immedialite event success."); | ||
294 | - } else { | ||
295 | - YALog(@"uploadImmedilyWithEvent error = %@", error.localizedDescription); | ||
296 | - } | ||
297 | - }]; | 374 | + @synchronized(self.immediUploadItemDic) { |
375 | + [self.immediUploadItemDic removeObjectForKey:JsonKeyDataTypePerfor]; | ||
376 | + [self.immediUploadItemDic removeObjectForKey:JsonKeyDataTypeErrors]; | ||
377 | + [self.immediUploadItemDic setObject:[[NSMutableArray alloc]initWithObjects:event.jsonDictionary, nil] forKey:JsonKeyDataTypeEvents]; | ||
378 | + | ||
379 | + [[YHNetworkService sharedInstance] uploadLogData:self.immediUploadItemDic completionBlock:^(BOOL success, NSError *error) { | ||
380 | + if (success) { | ||
381 | + YALog(@"upload immedialite event success."); | ||
382 | + } else { | ||
383 | + YALog(@"uploadImmedilyWithEvent error = %@", error.localizedDescription); | ||
384 | + } | ||
385 | + }]; | ||
386 | + } | ||
387 | + } | ||
388 | + } else if (itemData.dataType == YHItemDataTypePerformance) { | ||
389 | + YHPerformance *perfms = (YHPerformance *)itemData; | ||
390 | + perfms.net = self.currentStatus.net; | ||
391 | + if (perfms) { | ||
392 | + @synchronized(self.immediUploadItemDic) { | ||
393 | + [self.immediUploadItemDic removeObjectForKey:JsonKeyDataTypeEvents]; | ||
394 | + [self.immediUploadItemDic removeObjectForKey:JsonKeyDataTypeErrors]; | ||
395 | + [self.immediUploadItemDic setObject:[[NSMutableArray alloc]initWithObjects:perfms.jsonDictionary, nil] forKey:JsonKeyDataTypePerfor]; | ||
396 | + | ||
397 | + [[YHNetworkService sharedInstance] uploadLogData:self.immediUploadItemDic completionBlock:^(BOOL success, NSError *error) { | ||
398 | + if (success) { | ||
399 | + YALog(@"upload immedialite event success."); | ||
400 | + } else { | ||
401 | + YALog(@"uploadImmedilyWithEvent error = %@", error.localizedDescription); | ||
402 | + } | ||
403 | + }]; | ||
404 | + } | ||
298 | } | 405 | } |
299 | } else if(itemData.dataType == YHItemDataTypeError) { | 406 | } else if(itemData.dataType == YHItemDataTypeError) { |
300 | YHError *error = (YHError *)itemData; | 407 | YHError *error = (YHError *)itemData; |
301 | if (error) { | 408 | if (error) { |
302 | - [self.immediUploadItemDic setObject:[[NSMutableArray alloc]initWithObjects:error.jsonDictionary, nil] forKey:JsonKeyDataTypeErrors]; | ||
303 | - | ||
304 | - [[YHNetworkService sharedInstance] uploadLogData:self.immediUploadItemDic completionBlock:^(BOOL success, NSError *error) { | ||
305 | - if (success) { | ||
306 | - YALog(@"upload immedialite error success."); | ||
307 | - } else { | ||
308 | - YALog(@"uploadImmedilyWithError error = %@", error.localizedDescription); | ||
309 | - } | ||
310 | - }]; | 409 | + @synchronized(self.immediUploadItemDic) { |
410 | + [self.immediUploadItemDic removeObjectForKey:JsonKeyDataTypeEvents]; | ||
411 | + [self.immediUploadItemDic removeObjectForKey:JsonKeyDataTypePerfor]; | ||
412 | + [self.immediUploadItemDic setObject:[[NSMutableArray alloc]initWithObjects:error.jsonDictionary, nil] forKey:JsonKeyDataTypeErrors]; | ||
413 | + | ||
414 | + [[YHNetworkService sharedInstance] uploadLogData:self.immediUploadItemDic completionBlock:^(BOOL success, NSError *error) { | ||
415 | + if (success) { | ||
416 | + YALog(@"upload immedialite error success."); | ||
417 | + } else { | ||
418 | + YALog(@"uploadImmedilyWithError error = %@", error.localizedDescription); | ||
419 | + } | ||
420 | + }]; | ||
421 | + } | ||
311 | } | 422 | } |
312 | } else { | 423 | } else { |
313 | // 不处理非 Event 和 Error 类型的数据 | 424 | // 不处理非 Event 和 Error 类型的数据 |
@@ -337,6 +448,9 @@ static dispatch_queue_t persisting_queue() { | @@ -337,6 +448,9 @@ static dispatch_queue_t persisting_queue() { | ||
337 | 448 | ||
338 | // 打开日志文件锁,允许写入 | 449 | // 打开日志文件锁,允许写入 |
339 | self.lockLogFile = NO; | 450 | self.lockLogFile = NO; |
451 | + | ||
452 | + [self writeTempEventArray]; | ||
453 | + [self writeTempPerformanceArray]; | ||
340 | }]; | 454 | }]; |
341 | } | 455 | } |
342 | } | 456 | } |
@@ -372,7 +486,7 @@ static dispatch_queue_t persisting_queue() { | @@ -372,7 +486,7 @@ static dispatch_queue_t persisting_queue() { | ||
372 | 486 | ||
373 | case AFNetworkReachabilityStatusReachableViaWWAN: | 487 | case AFNetworkReachabilityStatusReachableViaWWAN: |
374 | { | 488 | { |
375 | - if (NSFoundationVersionNumber >= NSFoundationVersionNumber_iOS_7_0) { | 489 | + if (([[[UIDevice currentDevice] systemVersion] compare:@"7.0" options:NSNumericSearch] != NSOrderedAscending)) { |
376 | if ([netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyGPRS]|| [netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyEdge]) { | 490 | if ([netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyGPRS]|| [netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyEdge]) { |
377 | net = kNetWorkStatus2G; | 491 | net = kNetWorkStatus2G; |
378 | } else if([netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyWCDMA]|| [netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSDPA] || [netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSUPA]|| [netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyeHRPD]) { | 492 | } else if([netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyWCDMA]|| [netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSDPA] || [netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyHSUPA]|| [netInfo.currentRadioAccessTechnology isEqualToString:CTRadioAccessTechnologyeHRPD]) { |
@@ -398,7 +512,7 @@ static dispatch_queue_t persisting_queue() { | @@ -398,7 +512,7 @@ static dispatch_queue_t persisting_queue() { | ||
398 | if ([self updateNetWorkStatus:net]) { | 512 | if ([self updateNetWorkStatus:net]) { |
399 | [self updateImmediUploadDic]; | 513 | [self updateImmediUploadDic]; |
400 | } | 514 | } |
401 | - | 515 | + |
402 | }]; | 516 | }]; |
403 | } | 517 | } |
404 | 518 | ||
@@ -462,15 +576,17 @@ static dispatch_queue_t persisting_queue() { | @@ -462,15 +576,17 @@ static dispatch_queue_t persisting_queue() { | ||
462 | // 更新立即上传信息 | 576 | // 更新立即上传信息 |
463 | - (void)updateImmediUploadDic | 577 | - (void)updateImmediUploadDic |
464 | { | 578 | { |
465 | - NSMutableArray *allStatus = [self.immediUploadItemDic objectForKey:JsonKeyDataTypeStatus]; | ||
466 | - if ([allStatus count]) { | ||
467 | - [allStatus replaceObjectAtIndex:0 withObject:self.currentStatus.jsonDictionary]; | ||
468 | - [self.immediUploadItemDic setObject:allStatus forKey:JsonKeyDataTypeStatus]; | ||
469 | - } else { | ||
470 | - NSException *exception = [NSException exceptionWithName:NSGenericException | ||
471 | - reason:@"appId and sessionId do not be initialized. Please use prepareImmediUploadDic:sessionId: first." | ||
472 | - userInfo:nil]; | ||
473 | - [exception raise]; | 579 | + @synchronized(self.immediUploadItemDic) { |
580 | + NSMutableArray *allStatus = [self.immediUploadItemDic objectForKey:JsonKeyDataTypeStatus]; | ||
581 | + if ([allStatus count]) { | ||
582 | + [allStatus replaceObjectAtIndex:0 withObject:self.currentStatus.jsonDictionary]; | ||
583 | + [self.immediUploadItemDic setObject:allStatus forKey:JsonKeyDataTypeStatus]; | ||
584 | + } else { | ||
585 | + NSException *exception = [NSException exceptionWithName:NSGenericException | ||
586 | + reason:@"appId and sessionId do not be initialized. Please use prepareImmediUploadDic:sessionId:channelId: first." | ||
587 | + userInfo:nil]; | ||
588 | + [exception raise]; | ||
589 | + } | ||
474 | } | 590 | } |
475 | } | 591 | } |
476 | 592 | ||
@@ -486,7 +602,10 @@ static dispatch_queue_t persisting_queue() { | @@ -486,7 +602,10 @@ static dispatch_queue_t persisting_queue() { | ||
486 | } | 602 | } |
487 | 603 | ||
488 | if (self.lockLogFile) { | 604 | if (self.lockLogFile) { |
489 | - [self.tempEventArray addObject:event]; | 605 | + @synchronized(self.tempEventArray) { |
606 | + [self.tempEventArray addObject:event]; | ||
607 | + } | ||
608 | + | ||
490 | return NO; | 609 | return NO; |
491 | } | 610 | } |
492 | 611 | ||
@@ -497,7 +616,9 @@ static dispatch_queue_t persisting_queue() { | @@ -497,7 +616,9 @@ static dispatch_queue_t persisting_queue() { | ||
497 | collectData = [[NSMutableDictionary alloc]init]; | 616 | collectData = [[NSMutableDictionary alloc]init]; |
498 | 617 | ||
499 | //直接添加 immediUploadDataDic 内容(里面包含 device 信息) | 618 | //直接添加 immediUploadDataDic 内容(里面包含 device 信息) |
500 | - [collectData addEntriesFromDictionary:self.immediUploadItemDic]; | 619 | + @synchronized(self.immediUploadItemDic) { |
620 | + [collectData addEntriesFromDictionary:self.immediUploadItemDic]; | ||
621 | + } | ||
501 | 622 | ||
502 | //组合event信息 | 623 | //组合event信息 |
503 | if (event.jsonDictionary) { | 624 | if (event.jsonDictionary) { |
@@ -521,6 +642,7 @@ static dispatch_queue_t persisting_queue() { | @@ -521,6 +642,7 @@ static dispatch_queue_t persisting_queue() { | ||
521 | } | 642 | } |
522 | } | 643 | } |
523 | 644 | ||
645 | + //组合event信息 | ||
524 | if ([collectData.allKeys containsObject:JsonKeyDataTypeEvents]) { | 646 | if ([collectData.allKeys containsObject:JsonKeyDataTypeEvents]) { |
525 | NSMutableArray *oldEvents = [collectData objectForKey:JsonKeyDataTypeEvents]; | 647 | NSMutableArray *oldEvents = [collectData objectForKey:JsonKeyDataTypeEvents]; |
526 | if (!oldEvents) { | 648 | if (!oldEvents) { |
@@ -540,6 +662,79 @@ static dispatch_queue_t persisting_queue() { | @@ -540,6 +662,79 @@ static dispatch_queue_t persisting_queue() { | ||
540 | return [collectData writeToFile:self.eventFileName atomically:YES]; | 662 | return [collectData writeToFile:self.eventFileName atomically:YES]; |
541 | } | 663 | } |
542 | 664 | ||
665 | +- (BOOL)writePerformanceToFile:(YHPerformance *)performanceData | ||
666 | +{ | ||
667 | + performanceData.net = self.currentStatus.net; | ||
668 | + if (performanceData == nil || ![performanceData isKindOfClass:[YHPerformance class]]) { | ||
669 | + NSException *exception = [NSException exceptionWithName:NSInvalidArgumentException | ||
670 | + reason:@"The input parameter is nil or an unexpected value." | ||
671 | + userInfo:nil]; | ||
672 | + [exception raise]; | ||
673 | + return NO; | ||
674 | + } | ||
675 | + | ||
676 | + if (self.lockLogFile) { | ||
677 | + @synchronized(self.tempPerformanceArray){ | ||
678 | + [self.tempPerformanceArray addObject:performanceData]; | ||
679 | + } | ||
680 | + return NO; | ||
681 | + } | ||
682 | + | ||
683 | + NSMutableDictionary *collectData = [[NSMutableDictionary alloc] initWithContentsOfFile:self.eventFileName]; | ||
684 | + | ||
685 | + //无本地持久化数据 | ||
686 | + if (!collectData) { | ||
687 | + collectData = [[NSMutableDictionary alloc]init]; | ||
688 | + | ||
689 | + //直接添加 immediUploadDataDic 内容(里面包含 device 信息) | ||
690 | + @synchronized(self.immediUploadItemDic) { | ||
691 | + [self.immediUploadItemDic removeObjectForKey:JsonKeyDataTypeErrors]; | ||
692 | + [self.immediUploadItemDic removeObjectForKey:JsonKeyDataTypeEvents]; | ||
693 | + [collectData addEntriesFromDictionary:self.immediUploadItemDic]; | ||
694 | + } | ||
695 | + | ||
696 | + //组合performance信息 | ||
697 | + if (performanceData.jsonDictionary) { | ||
698 | + NSMutableArray *events = [[NSMutableArray alloc]initWithObjects:performanceData.jsonDictionary,nil]; | ||
699 | + | ||
700 | + [collectData setObject:events forKey:JsonKeyDataTypePerfor]; | ||
701 | + } | ||
702 | + | ||
703 | + } else { // 持久化文件不为空 | ||
704 | + | ||
705 | + // 检查当前session与本地文件中最近存储的session是否相同 | ||
706 | + NSMutableArray *status = [collectData objectForKey:JsonKeyDataTypeStatus]; | ||
707 | + if ([status count]) { | ||
708 | + NSMutableDictionary *tempStatus = [status lastObject]; | ||
709 | + //如果不同则插入新的状态 | ||
710 | + if (![[tempStatus objectForKey:JsonKeyStatusSID] isEqualToString:self.currentStatus.sid]) { | ||
711 | + [status addObject:self.currentStatus.jsonDictionary]; | ||
712 | + | ||
713 | + // 更新items中status | ||
714 | + [collectData setObject:status forKey:JsonKeyDataTypeStatus]; | ||
715 | + } | ||
716 | + } | ||
717 | + | ||
718 | + //组合performance信息 | ||
719 | + if ([collectData.allKeys containsObject:JsonKeyDataTypePerfor]) { | ||
720 | + NSMutableArray *oldPerformance = [collectData objectForKey:JsonKeyDataTypePerfor]; | ||
721 | + if (!oldPerformance) { | ||
722 | + oldPerformance = [[NSMutableArray alloc]init]; | ||
723 | + } | ||
724 | + [oldPerformance addObject:performanceData.jsonDictionary]; | ||
725 | + | ||
726 | + [collectData setObject:oldPerformance forKey:JsonKeyDataTypePerfor]; | ||
727 | + | ||
728 | + } else { | ||
729 | + NSMutableArray *newPerformance = [[NSMutableArray alloc]initWithObjects:performanceData.jsonDictionary, nil]; | ||
730 | + | ||
731 | + [collectData setObject:newPerformance forKey:JsonKeyDataTypePerfor]; | ||
732 | + } | ||
733 | + } | ||
734 | + | ||
735 | + return [collectData writeToFile:self.eventFileName atomically:YES]; | ||
736 | +} | ||
737 | + | ||
543 | // 将一个错误写入到文件 | 738 | // 将一个错误写入到文件 |
544 | - (BOOL)writeErrorToFile:(YHError *)errorData; | 739 | - (BOOL)writeErrorToFile:(YHError *)errorData; |
545 | { | 740 | { |
@@ -560,7 +755,9 @@ static dispatch_queue_t persisting_queue() { | @@ -560,7 +755,9 @@ static dispatch_queue_t persisting_queue() { | ||
560 | if (!collectData) { | 755 | if (!collectData) { |
561 | collectData = [[NSMutableDictionary alloc]init]; | 756 | collectData = [[NSMutableDictionary alloc]init]; |
562 | //直接添加 immediUploadDataDic 内容(里面包含 device 信息) | 757 | //直接添加 immediUploadDataDic 内容(里面包含 device 信息) |
563 | - [collectData addEntriesFromDictionary:self.immediUploadItemDic]; | 758 | + @synchronized(self.immediUploadItemDic) { |
759 | + [collectData addEntriesFromDictionary:self.immediUploadItemDic]; | ||
760 | + } | ||
564 | 761 | ||
565 | //组合error信息 | 762 | //组合error信息 |
566 | if (errorData.jsonDictionary) { | 763 | if (errorData.jsonDictionary) { |
@@ -633,82 +830,159 @@ static dispatch_queue_t persisting_queue() { | @@ -633,82 +830,159 @@ static dispatch_queue_t persisting_queue() { | ||
633 | 830 | ||
634 | - (void)writeTempEventArray | 831 | - (void)writeTempEventArray |
635 | { | 832 | { |
636 | - if ([self.tempEventArray count] > 0) { | ||
637 | - NSMutableDictionary *collectData = [[NSMutableDictionary alloc] initWithContentsOfFile:self.eventFileName]; | ||
638 | - | ||
639 | - //无本地持久化数据 | ||
640 | - if (!collectData) { | ||
641 | - collectData = [[NSMutableDictionary alloc]init]; | 833 | + @synchronized(self.tempEventArray) { |
834 | + if ([self.tempEventArray count] > 0) { | ||
835 | + NSMutableDictionary *collectData = [[NSMutableDictionary alloc] initWithContentsOfFile:self.eventFileName]; | ||
642 | 836 | ||
643 | - //直接添加 immediUploadDataDic 内容(里面包含 device 信息) | ||
644 | - [collectData addEntriesFromDictionary:self.immediUploadItemDic]; | ||
645 | - | ||
646 | - //组合event信息 | ||
647 | - NSMutableArray *eventJsonDicArray = [NSMutableArray array]; | ||
648 | - if ([self.tempEventArray count] > 0) { | 837 | + //无本地持久化数据 |
838 | + if (!collectData) { | ||
839 | + collectData = [[NSMutableDictionary alloc]init]; | ||
840 | + | ||
841 | + //直接添加 immediUploadDataDic 内容(里面包含 device 信息) | ||
842 | + @synchronized(self.immediUploadItemDic) { | ||
843 | + [collectData addEntriesFromDictionary:self.immediUploadItemDic]; | ||
844 | + } | ||
845 | + | ||
846 | + //组合event信息 | ||
847 | + NSMutableArray *eventJsonDicArray = [NSMutableArray array]; | ||
649 | for (YHEvent *aEvent in self.tempEventArray) { | 848 | for (YHEvent *aEvent in self.tempEventArray) { |
650 | if (aEvent.jsonDictionary) { | 849 | if (aEvent.jsonDictionary) { |
651 | [eventJsonDicArray addObject:aEvent.jsonDictionary]; | 850 | [eventJsonDicArray addObject:aEvent.jsonDictionary]; |
652 | } | 851 | } |
653 | } | 852 | } |
853 | + | ||
654 | [self.tempEventArray removeAllObjects]; | 854 | [self.tempEventArray removeAllObjects]; |
655 | - } | ||
656 | - | ||
657 | - self.allEventsCount = [eventJsonDicArray count]; | ||
658 | - [collectData setObject:eventJsonDicArray forKey:JsonKeyDataTypeEvents]; | ||
659 | - | ||
660 | - } else { // 持久化文件不为空 | ||
661 | - | ||
662 | - // 检查当前session与本地文件中最近存储的session是否相同 | ||
663 | - NSMutableArray *status = [collectData objectForKey:JsonKeyDataTypeStatus]; | ||
664 | - if ([status count]) { | ||
665 | - NSMutableDictionary *tempStatus = [status lastObject]; | ||
666 | - //如果不同则插入新的状态 | ||
667 | - if (![[tempStatus objectForKey:JsonKeyStatusSID] isEqualToString:self.currentStatus.sid]) { | ||
668 | - [status addObject:self.currentStatus.jsonDictionary]; | ||
669 | - | ||
670 | - // 更新items中status | ||
671 | - [collectData setObject:status forKey:JsonKeyDataTypeStatus]; | ||
672 | - } | ||
673 | - } | ||
674 | - | ||
675 | - //组合event信息 | ||
676 | - if ([collectData.allKeys containsObject:JsonKeyDataTypeEvents]) { | ||
677 | - NSMutableArray *oldEvents = [collectData objectForKey:JsonKeyDataTypeEvents]; | ||
678 | - if (!oldEvents) { | ||
679 | - oldEvents = [[NSMutableArray alloc]init]; | 855 | + |
856 | + self.allEventsCount = [eventJsonDicArray count]; | ||
857 | + [collectData setObject:eventJsonDicArray forKey:JsonKeyDataTypeEvents]; | ||
858 | + | ||
859 | + } else { // 持久化文件不为空 | ||
860 | + | ||
861 | + // 检查当前session与本地文件中最近存储的session是否相同 | ||
862 | + NSMutableArray *status = [collectData objectForKey:JsonKeyDataTypeStatus]; | ||
863 | + if ([status count]) { | ||
864 | + NSMutableDictionary *tempStatus = [status lastObject]; | ||
865 | + //如果不同则插入新的状态 | ||
866 | + if (![[tempStatus objectForKey:JsonKeyStatusSID] isEqualToString:self.currentStatus.sid]) { | ||
867 | + [status addObject:self.currentStatus.jsonDictionary]; | ||
868 | + | ||
869 | + // 更新items中status | ||
870 | + [collectData setObject:status forKey:JsonKeyDataTypeStatus]; | ||
871 | + } | ||
680 | } | 872 | } |
681 | 873 | ||
682 | - if ([self.tempEventArray count] > 0) { | 874 | + //组合event信息 |
875 | + if ([collectData.allKeys containsObject:JsonKeyDataTypeEvents]) { | ||
876 | + NSMutableArray *oldEvents = [collectData objectForKey:JsonKeyDataTypeEvents]; | ||
877 | + if (!oldEvents) { | ||
878 | + oldEvents = [[NSMutableArray alloc]init]; | ||
879 | + } | ||
880 | + | ||
683 | for (YHEvent *aEvent in self.tempEventArray) { | 881 | for (YHEvent *aEvent in self.tempEventArray) { |
684 | if (aEvent.jsonDictionary) { | 882 | if (aEvent.jsonDictionary) { |
685 | [oldEvents addObject:aEvent.jsonDictionary]; | 883 | [oldEvents addObject:aEvent.jsonDictionary]; |
686 | } | 884 | } |
687 | } | 885 | } |
688 | [self.tempEventArray removeAllObjects]; | 886 | [self.tempEventArray removeAllObjects]; |
887 | + | ||
888 | + self.allEventsCount = [oldEvents count]; | ||
889 | + [collectData setObject:oldEvents forKey:JsonKeyDataTypeEvents]; | ||
890 | + | ||
891 | + } else { | ||
892 | + NSMutableArray *newEvents = [[NSMutableArray alloc]init]; | ||
893 | + | ||
894 | + for (YHEvent *aEvent in self.tempEventArray) { | ||
895 | + if (aEvent.jsonDictionary) { | ||
896 | + [newEvents addObject:aEvent.jsonDictionary]; | ||
897 | + } | ||
898 | + } | ||
899 | + [self.tempEventArray removeAllObjects]; | ||
900 | + | ||
901 | + self.allEventsCount = [newEvents count]; | ||
902 | + [collectData setObject:newEvents forKey:JsonKeyDataTypeEvents]; | ||
689 | } | 903 | } |
904 | + } | ||
905 | + | ||
906 | + [collectData writeToFile:self.eventFileName atomically:YES]; | ||
907 | + } | ||
908 | + } | ||
909 | +} | ||
910 | + | ||
911 | +- (void)writeTempPerformanceArray | ||
912 | +{ | ||
913 | + @synchronized(self.tempPerformanceArray) { | ||
914 | + if ([self.tempPerformanceArray count] > 0) { | ||
915 | + NSMutableDictionary *collectData = [[NSMutableDictionary alloc] initWithContentsOfFile:self.eventFileName]; | ||
916 | + | ||
917 | + //无本地持久化数据 | ||
918 | + if (!collectData) { | ||
919 | + collectData = [[NSMutableDictionary alloc]init]; | ||
690 | 920 | ||
691 | - self.allEventsCount = [oldEvents count]; | ||
692 | - [collectData setObject:oldEvents forKey:JsonKeyDataTypeEvents]; | 921 | + //直接添加 immediUploadDataDic 内容(里面包含 device 信息) |
922 | + @synchronized(self.immediUploadItemDic) { | ||
923 | + [collectData addEntriesFromDictionary:self.immediUploadItemDic]; | ||
924 | + } | ||
693 | 925 | ||
694 | - } else { | ||
695 | - NSMutableArray *newEvents = [[NSMutableArray alloc]init]; | 926 | + //组合event信息 |
927 | + NSMutableArray *eventJsonDicArray = [NSMutableArray array]; | ||
928 | + for (YHPerformance *aEvent in self.tempPerformanceArray) { | ||
929 | + if (aEvent.jsonDictionary) { | ||
930 | + [eventJsonDicArray addObject:aEvent.jsonDictionary]; | ||
931 | + } | ||
932 | + } | ||
696 | 933 | ||
697 | - if ([self.tempEventArray count] > 0) { | ||
698 | - for (YHEvent *aEvent in self.tempEventArray) { | 934 | + [self.tempPerformanceArray removeAllObjects]; |
935 | + | ||
936 | + [collectData setObject:eventJsonDicArray forKey:JsonKeyDataTypePerfor]; | ||
937 | + | ||
938 | + } else { // 持久化文件不为空 | ||
939 | + | ||
940 | + // 检查当前session与本地文件中最近存储的session是否相同 | ||
941 | + NSMutableArray *status = [collectData objectForKey:JsonKeyDataTypeStatus]; | ||
942 | + if ([status count]) { | ||
943 | + NSMutableDictionary *tempStatus = [status lastObject]; | ||
944 | + //如果不同则插入新的状态 | ||
945 | + if (![[tempStatus objectForKey:JsonKeyStatusSID] isEqualToString:self.currentStatus.sid]) { | ||
946 | + [status addObject:self.currentStatus.jsonDictionary]; | ||
947 | + | ||
948 | + // 更新items中status | ||
949 | + [collectData setObject:status forKey:JsonKeyDataTypeStatus]; | ||
950 | + } | ||
951 | + } | ||
952 | + | ||
953 | + //组合performance信息 | ||
954 | + if ([collectData.allKeys containsObject:JsonKeyDataTypePerfor]) { | ||
955 | + NSMutableArray *oldEvents = [collectData objectForKey:JsonKeyDataTypeEvents]; | ||
956 | + if (!oldEvents) { | ||
957 | + oldEvents = [[NSMutableArray alloc]init]; | ||
958 | + } | ||
959 | + | ||
960 | + for (YHPerformance *aEvent in self.tempPerformanceArray) { | ||
961 | + if (aEvent.jsonDictionary) { | ||
962 | + [oldEvents addObject:aEvent.jsonDictionary]; | ||
963 | + } | ||
964 | + } | ||
965 | + [self.tempPerformanceArray removeAllObjects]; | ||
966 | + | ||
967 | + [collectData setObject:oldEvents forKey:JsonKeyDataTypePerfor]; | ||
968 | + | ||
969 | + } else { | ||
970 | + NSMutableArray *newEvents = [[NSMutableArray alloc]init]; | ||
971 | + | ||
972 | + for (YHPerformance *aEvent in self.tempPerformanceArray) { | ||
699 | if (aEvent.jsonDictionary) { | 973 | if (aEvent.jsonDictionary) { |
700 | [newEvents addObject:aEvent.jsonDictionary]; | 974 | [newEvents addObject:aEvent.jsonDictionary]; |
701 | } | 975 | } |
702 | } | 976 | } |
703 | - [self.tempEventArray removeAllObjects]; | 977 | + [self.tempPerformanceArray removeAllObjects]; |
978 | + | ||
979 | + self.allEventsCount = [newEvents count]; | ||
980 | + [collectData setObject:newEvents forKey:JsonKeyDataTypePerfor]; | ||
704 | } | 981 | } |
705 | - | ||
706 | - self.allEventsCount = [newEvents count]; | ||
707 | - [collectData setObject:newEvents forKey:JsonKeyDataTypeEvents]; | ||
708 | } | 982 | } |
983 | + | ||
984 | + [collectData writeToFile:self.eventFileName atomically:YES]; | ||
709 | } | 985 | } |
710 | - | ||
711 | - [collectData writeToFile:self.eventFileName atomically:YES]; | ||
712 | } | 986 | } |
713 | } | 987 | } |
714 | 988 | ||
@@ -722,6 +996,10 @@ static dispatch_queue_t persisting_queue() { | @@ -722,6 +996,10 @@ static dispatch_queue_t persisting_queue() { | ||
722 | if ([manager respondsToSelector:@selector(requestAlwaysAuthorization)]) { | 996 | if ([manager respondsToSelector:@selector(requestAlwaysAuthorization)]) { |
723 | [manager requestAlwaysAuthorization]; | 997 | [manager requestAlwaysAuthorization]; |
724 | } | 998 | } |
999 | + | ||
1000 | + // if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9) { | ||
1001 | + // manager.allowsBackgroundLocationUpdates = YES; | ||
1002 | + // } | ||
725 | } | 1003 | } |
726 | break; | 1004 | break; |
727 | case kCLAuthorizationStatusRestricted: | 1005 | case kCLAuthorizationStatusRestricted: |
@@ -8,6 +8,7 @@ | @@ -8,6 +8,7 @@ | ||
8 | 8 | ||
9 | #import <Foundation/Foundation.h> | 9 | #import <Foundation/Foundation.h> |
10 | #import "AFNetworking.h" | 10 | #import "AFNetworking.h" |
11 | +#import "AFHTTPRequestOperationManager+YHPriorityRequest.h" | ||
11 | 12 | ||
12 | typedef void (^YHNetworkReachabilityStatusBlock)(AFNetworkReachabilityStatus status); | 13 | typedef void (^YHNetworkReachabilityStatusBlock)(AFNetworkReachabilityStatus status); |
13 | 14 | ||
@@ -21,4 +22,8 @@ typedef void (^YHNetworkReachabilityStatusBlock)(AFNetworkReachabilityStatus sta | @@ -21,4 +22,8 @@ typedef void (^YHNetworkReachabilityStatusBlock)(AFNetworkReachabilityStatus sta | ||
21 | 22 | ||
22 | - (AFHTTPRequestOperation *)getNewLogStrategy:(NSDictionary *)parameters completionBlock:(void (^)(NSDictionary *strategy, NSError *error))block; | 23 | - (AFHTTPRequestOperation *)getNewLogStrategy:(NSDictionary *)parameters completionBlock:(void (^)(NSDictionary *strategy, NSError *error))block; |
23 | 24 | ||
25 | ++ (void)uploadFirstLaunchApp:(NSDictionary *)parameters completionBlock:(void (^)(BOOL flag, NSError *error))block; | ||
26 | + | ||
27 | ++ (void)uploadFirstLaunchAppByGuangDiaTong:(NSDictionary *)parameters completionBlock:(void (^)(BOOL flag, NSError *error))block; | ||
28 | + | ||
24 | @end | 29 | @end |
@@ -78,7 +78,7 @@ | @@ -78,7 +78,7 @@ | ||
78 | NSString *parsJsonStr = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; | 78 | NSString *parsJsonStr = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; |
79 | NSDictionary *newParameters = @{@"_mlogs": kSafeValue(parsJsonStr)}; | 79 | NSDictionary *newParameters = @{@"_mlogs": kSafeValue(parsJsonStr)}; |
80 | 80 | ||
81 | - return [self.httpClient POST:kYASApiMethodUploadData parameters:newParameters success:^(AFHTTPRequestOperation *operation, id responseObject) { | 81 | + return [self.httpClient POST:kYASApiMethodUploadData priority:NSOperationQueuePriorityLow parameters:newParameters success:^(AFHTTPRequestOperation *operation, id responseObject) { |
82 | 82 | ||
83 | if (block) { | 83 | if (block) { |
84 | block(YES, nil); | 84 | block(YES, nil); |
@@ -113,6 +113,46 @@ | @@ -113,6 +113,46 @@ | ||
113 | }]; | 113 | }]; |
114 | } | 114 | } |
115 | 115 | ||
116 | +// http://123.57.94.127:8080/appActivate/domobA?mac=xx&ifa=xx | ||
117 | ++ (void)uploadFirstLaunchApp:(NSDictionary *)parameters completionBlock:(void (^)(BOOL flag, NSError *error))block | ||
118 | +{ | ||
119 | + // 多盟统计 | ||
120 | + AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:@"http://123.57.94.127:8080/"]]; | ||
121 | + | ||
122 | + [manager GET:@"appActivate/domobA" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) { | ||
123 | + YALog(@"DM %@", responseObject); | ||
124 | + block(YES, nil); | ||
125 | + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { | ||
126 | + YALog(@"DM %@", error.localizedDescription); | ||
127 | + block(NO, error); | ||
128 | + }]; | ||
129 | +} | ||
130 | + | ||
131 | +// http://api.open.yohobuy.com/?method=union.analytics.pairui&appid=100898104&conv_type=MOBILEAPP_ACTIVITE&app_type=android&advertiser_id=365136&imei=355065053311001/01&sigin_key=541ac540a8849881&client_ip=10.11.12.13&encrypt_key=e50a8f58c132f457 | ||
132 | ++ (void)uploadFirstLaunchAppByGuangDiaTong:(NSDictionary *)parameters completionBlock:(void (^)(BOOL flag, NSError *error))block | ||
133 | +{ | ||
134 | + // 广点通 | ||
135 | + NSURL *baseURL = [NSURL URLWithString:YA_httpHost]; | ||
136 | + AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:baseURL]; | ||
137 | + | ||
138 | + NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithDictionary:parameters]; | ||
139 | + params[@"method"] = @"union.analytics.pairui"; | ||
140 | + params[@"appid"] = @"490655927"; | ||
141 | + params[@"conv_type"] = @"MOBILEAPP_ACTIVITE"; | ||
142 | + params[@"app_type"] = @"ios"; | ||
143 | + params[@"sigin_key"] = @"59fd75c8e2072155"; | ||
144 | + params[@"encrypt_key"] = @"3c347e729b73157a"; | ||
145 | + params[@"advertiser_id"] = @"365136"; | ||
146 | + | ||
147 | + [manager GET:@"" parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { | ||
148 | + YALog(@"GDT %@", responseObject); | ||
149 | + block(YES, nil); | ||
150 | + } failure:^(AFHTTPRequestOperation *operation, NSError *error) { | ||
151 | + YALog(@"GDT %@", error.localizedDescription); | ||
152 | + block(NO, error); | ||
153 | + }]; | ||
154 | +} | ||
155 | + | ||
116 | #pragma mark - private method | 156 | #pragma mark - private method |
117 | 157 | ||
118 | - (void)handleNetworkReachabilityStatusChanged:(NSNotification *)notification | 158 | - (void)handleNetworkReachabilityStatusChanged:(NSNotification *)notification |
@@ -13,7 +13,7 @@ | @@ -13,7 +13,7 @@ | ||
13 | #ifndef YH_Analytics_YHAnalyticsMacro_h | 13 | #ifndef YH_Analytics_YHAnalyticsMacro_h |
14 | #define YH_Analytics_YHAnalyticsMacro_h | 14 | #define YH_Analytics_YHAnalyticsMacro_h |
15 | 15 | ||
16 | -/**************** Debug Tool ***************/ | 16 | +/************* Debug Tool **************/ |
17 | //#define YA_DEBUG 1 | 17 | //#define YA_DEBUG 1 |
18 | 18 | ||
19 | 19 | ||
@@ -32,8 +32,8 @@ | @@ -32,8 +32,8 @@ | ||
32 | #define kYHAnalyticsSDKVersion @"1.0" // 数据分析库版本 | 32 | #define kYHAnalyticsSDKVersion @"1.0" // 数据分析库版本 |
33 | #define kDefalutChannelNum @"2119" // 推广渠道号 | 33 | #define kDefalutChannelNum @"2119" // 推广渠道号 |
34 | #define kMinInterval 60 // 间隔发送的最小时间周期,60秒 | 34 | #define kMinInterval 60 // 间隔发送的最小时间周期,60秒 |
35 | -#define kMaxLocalEventsCount 3000 // 本地持久化event最大条数,3000条 | ||
36 | -#define kMaxLocalRecoderFileSize (1024 * 300) // 本地持久化文件大小(300KB) | 35 | +#define kMaxLocalEventsCount 100 // 本地持久化event最大条数,3000条 |
36 | +#define kMaxLocalRecoderFileSize (1024 * 50) // 本地持久化文件大小(300KB) | ||
37 | 37 | ||
38 | /*********** Path and FileName *************/ | 38 | /*********** Path and FileName *************/ |
39 | 39 | ||
@@ -49,6 +49,12 @@ | @@ -49,6 +49,12 @@ | ||
49 | #define kYASApiMethodUploadData @"yas_mobile" // 上传监测数据接口 | 49 | #define kYASApiMethodUploadData @"yas_mobile" // 上传监测数据接口 |
50 | #define kYASApiMethodGetNewStrategy @"" // 获取新发送策略,接口名未定 | 50 | #define kYASApiMethodGetNewStrategy @"" // 获取新发送策略,接口名未定 |
51 | 51 | ||
52 | +#if defined TESTENV | ||
53 | +#define YA_httpHost @"http://test2.open.yohobuy.com" | ||
54 | +#else | ||
55 | +#define YA_httpHost @"http://api.open.yohobuy.com" | ||
56 | +#endif | ||
57 | + | ||
52 | /************ UserDefault Key ************/ | 58 | /************ UserDefault Key ************/ |
53 | 59 | ||
54 | #define kKeyUserDefaultsLastUploadTimestamp @"lastSendTimestampKey" // 间隔发送的上次时间 | 60 | #define kKeyUserDefaultsLastUploadTimestamp @"lastSendTimestampKey" // 间隔发送的上次时间 |
@@ -61,6 +67,7 @@ | @@ -61,6 +67,7 @@ | ||
61 | #define JsonKeyDataTypeDevice @"device" // 终端信息,包括终端的状态 | 67 | #define JsonKeyDataTypeDevice @"device" // 终端信息,包括终端的状态 |
62 | #define JsonKeyDataTypeStatus @"status" // 状态信息,包括一次操作时,用户的位置和网络等信息 | 68 | #define JsonKeyDataTypeStatus @"status" // 状态信息,包括一次操作时,用户的位置和网络等信息 |
63 | #define JsonKeyDataTypeEvents @"events" // 事件信息,包括用户的操作日志 | 69 | #define JsonKeyDataTypeEvents @"events" // 事件信息,包括用户的操作日志 |
70 | +#define JsonKeyDataTypePerfor @"performance" // Performance信息 | ||
64 | #define JsonKeyDataTypeErrors @"errors" // 错误信息,包括用户在使用过程中发生的错误 | 71 | #define JsonKeyDataTypeErrors @"errors" // 错误信息,包括用户在使用过程中发生的错误 |
65 | 72 | ||
66 | // 终端参数 | 73 | // 终端参数 |
@@ -106,6 +113,24 @@ | @@ -106,6 +113,24 @@ | ||
106 | #define JsonKeyErrorEI @"ei" // 发生错误接口 | 113 | #define JsonKeyErrorEI @"ei" // 发生错误接口 |
107 | #define JsonKeyErrorPARAM @"param" // 错误自定义参数 | 114 | #define JsonKeyErrorPARAM @"param" // 错误自定义参数 |
108 | 115 | ||
116 | +// Performance参数 | ||
117 | +#define JsonKeyPerformanceUID @"uid" // 用户id | ||
118 | +#define JsonKeyPerformanceTS @"ts" // 时间戳 | ||
119 | +#define JsonKeyPerformanceSID @"sid" // 会话id(由设备标识和启动时间戳做md5) | ||
120 | +#define JsonKeyPerformanceTYPE @"type" // 错误类型 error type | ||
121 | +#define JsonKeyPerformancePARAM @"param" // 错误自定义参数 | ||
122 | +#define JsonKeyPerformanceTag @"tag" | ||
123 | +#define JsonKeyPerformanceURL @"url" | ||
124 | +#define JsonKeyPerformanceEvt @"evt" //事件类型, begin(开始加载h5页面),end(加载完成) | ||
125 | +#define JsonKeyPerformanceEvtBegin @"begin" | ||
126 | +#define JsonKeyPerformanceEvtEnd @"end" | ||
127 | +#define JsonKeyPerformanceEvtNet @"net" | ||
128 | + | ||
129 | + | ||
130 | + | ||
131 | + | ||
132 | + | ||
133 | + | ||
109 | // 中断和异常参数,文档中没有定义 | 134 | // 中断和异常参数,文档中没有定义 |
110 | #define JsonKeyCrashCallstack @"cs" // 中断或异常堆栈 | 135 | #define JsonKeyCrashCallstack @"cs" // 中断或异常堆栈 |
111 | #define JsonKeyCrashSignal @"sig" // 中断信号量 | 136 | #define JsonKeyCrashSignal @"sig" // 中断信号量 |
@@ -133,4 +158,10 @@ | @@ -133,4 +158,10 @@ | ||
133 | #define kErrorTypeHTTP @"NETWORK" // HTTP返回非200的网络错误(et为NETWORK) | 158 | #define kErrorTypeHTTP @"NETWORK" // HTTP返回非200的网络错误(et为NETWORK) |
134 | #define kErrorTypeCrash @"CRASH" // 客户端Crash错误(et为CRASH) | 159 | #define kErrorTypeCrash @"CRASH" // 客户端Crash错误(et为CRASH) |
135 | 160 | ||
161 | +// Performance信息类型 | ||
162 | +#define kPerformanceTypeImageLoad @"IMG_LOAD" | ||
163 | +#define kPerformanceTypeAPICall @"API_CALL" | ||
164 | +#define kPerformanceTypeWebViewLoad @"WEBVIEW_LOAD" | ||
165 | + | ||
166 | + | ||
136 | #endif | 167 | #endif |
@@ -9,6 +9,7 @@ | @@ -9,6 +9,7 @@ | ||
9 | #import <Foundation/Foundation.h> | 9 | #import <Foundation/Foundation.h> |
10 | #import <UIKit/UIKit.h> | 10 | #import <UIKit/UIKit.h> |
11 | #import "YHAnalyticsMacro.h" | 11 | #import "YHAnalyticsMacro.h" |
12 | +#import "YH_Analytics_Evevt.h" | ||
12 | 13 | ||
13 | typedef NS_ENUM(NSInteger, YHLogStrategy) { | 14 | typedef NS_ENUM(NSInteger, YHLogStrategy) { |
14 | LogStrategyAppLaunch = 1, //每次程序启动 | 15 | LogStrategyAppLaunch = 1, //每次程序启动 |
@@ -22,12 +23,12 @@ typedef NS_ENUM(NSInteger, YHLogStrategy) { | @@ -22,12 +23,12 @@ typedef NS_ENUM(NSInteger, YHLogStrategy) { | ||
22 | /** | 23 | /** |
23 | * 获取统计对象的实例 | 24 | * 获取统计对象的实例 |
24 | */ | 25 | */ |
25 | -+ (YH_Analytics*)sharedInstance; | 26 | ++ (YH_Analytics *)sharedInstance; |
26 | 27 | ||
27 | /** | 28 | /** |
28 | * 此处AppId即为应用的appKey | 29 | * 此处AppId即为应用的appKey |
29 | */ | 30 | */ |
30 | -- (void)startWithAppId:(NSString*) appId; | 31 | +- (void)startWithAppId:(NSString *)appId; |
31 | 32 | ||
32 | /** | 33 | /** |
33 | * 更新发送策略 | 34 | * 更新发送策略 |
@@ -37,17 +38,32 @@ typedef NS_ENUM(NSInteger, YHLogStrategy) { | @@ -37,17 +38,32 @@ typedef NS_ENUM(NSInteger, YHLogStrategy) { | ||
37 | /** | 38 | /** |
38 | *logEvent 事件ID和事件参数 | 39 | *logEvent 事件ID和事件参数 |
39 | */ | 40 | */ |
40 | -- (void)logEvent:(NSString*) eventId parameters:(NSDictionary * )param; | 41 | +- (void)logEvent:(NSString *)eventId parameters:(NSDictionary *)param; |
41 | 42 | ||
42 | /** | 43 | /** |
43 | *logError errorID和错误参数 | 44 | *logError errorID和错误参数 |
44 | */ | 45 | */ |
45 | -- (void)logError:(NSString*) errorType parameters:(NSDictionary * )param; | 46 | +- (void)logError:(NSString *)errorType parameters:(NSDictionary *)param; |
46 | 47 | ||
47 | /** | 48 | /** |
48 | - *logError 传入NSError | 49 | + @brief 记录APP客户端性能指标相关数据 |
50 | + | ||
51 | + @param perfType 统计类型 IMG_LOAD, API_CALL, WEBVIEW_LOAD | ||
52 | + @param param 操作参数 | ||
53 | + | ||
54 | + @since 1.0 | ||
49 | */ | 55 | */ |
50 | -//- (void)logError:(NSError *)error; | 56 | +- (void)logPerformanceWithType:(NSString *)perfType parameters:(NSDictionary *)param; |
57 | + | ||
58 | +///** | ||
59 | +// @brief 统一事件记录的接口 | ||
60 | +// | ||
61 | +// @param extraData 统计类型 IMG_LOAD, API_CALL, WEBVIEW_LOAD | ||
62 | +// @param param 操作参数 | ||
63 | +// | ||
64 | +// @since 1.0 | ||
65 | +// */ | ||
66 | +//- (void)logWithExtraData:(NSString *)extraData dataType:() parameters:(NSDictionary *)param; | ||
51 | 67 | ||
52 | 68 | ||
53 | /** | 69 | /** |
@@ -59,7 +75,7 @@ typedef NS_ENUM(NSInteger, YHLogStrategy) { | @@ -59,7 +75,7 @@ typedef NS_ENUM(NSInteger, YHLogStrategy) { | ||
59 | * 设置或者获取渠道Id。 | 75 | * 设置或者获取渠道Id。 |
60 | * 可以不设置, 此时系统会处理为AppStore渠道 | 76 | * 可以不设置, 此时系统会处理为AppStore渠道 |
61 | */ | 77 | */ |
62 | -@property (strong, nonatomic) NSString* channelId; | 78 | +@property (strong, nonatomic) NSString *channelId; |
63 | 79 | ||
64 | /** | 80 | /** |
65 | * | 81 | * |
@@ -73,6 +89,11 @@ typedef NS_ENUM(NSInteger, YHLogStrategy) { | @@ -73,6 +89,11 @@ typedef NS_ENUM(NSInteger, YHLogStrategy) { | ||
73 | @property (assign, nonatomic, readonly) NSTimeInterval currentInterval; | 89 | @property (assign, nonatomic, readonly) NSTimeInterval currentInterval; |
74 | 90 | ||
75 | /** | 91 | /** |
92 | + * 当前会话ID | ||
93 | + */ | ||
94 | +@property (strong, nonatomic, readonly) NSString *session; | ||
95 | + | ||
96 | +/** | ||
76 | * 发送的事件 | 97 | * 发送的事件 |
77 | */ | 98 | */ |
78 | @property (strong, nonatomic, readonly) YHEvent *event; | 99 | @property (strong, nonatomic, readonly) YHEvent *event; |
@@ -10,6 +10,7 @@ | @@ -10,6 +10,7 @@ | ||
10 | //#import "YHEventFactory.h" | 10 | //#import "YHEventFactory.h" |
11 | //#import "YHDeviceFactory.h" | 11 | //#import "YHDeviceFactory.h" |
12 | //#import "YHStatusFactory.h" | 12 | //#import "YHStatusFactory.h" |
13 | +#import "YHAnalyticsMacro.h" | ||
13 | #import "YH_Analytics.h" | 14 | #import "YH_Analytics.h" |
14 | #import "NSString+YHAnalytics.h" | 15 | #import "NSString+YHAnalytics.h" |
15 | #import "YHCrashReporter.h" | 16 | #import "YHCrashReporter.h" |
@@ -17,6 +18,7 @@ | @@ -17,6 +18,7 @@ | ||
17 | #import "OpenUDID.h" | 18 | #import "OpenUDID.h" |
18 | #import "YHError.h" | 19 | #import "YHError.h" |
19 | #import "YHEvent.h" | 20 | #import "YHEvent.h" |
21 | +#import "YHPerformance.h" | ||
20 | //#import "YHNetworkService.h" | 22 | //#import "YHNetworkService.h" |
21 | 23 | ||
22 | 24 | ||
@@ -47,7 +49,7 @@ | @@ -47,7 +49,7 @@ | ||
47 | */ | 49 | */ |
48 | @property (assign, nonatomic) NSTimeInterval currentInterval; | 50 | @property (assign, nonatomic) NSTimeInterval currentInterval; |
49 | /** | 51 | /** |
50 | - * 最近一个时间 | 52 | + * 最近一个事件 |
51 | */ | 53 | */ |
52 | @property (strong, nonatomic) YHEvent *event; | 54 | @property (strong, nonatomic) YHEvent *event; |
53 | /** | 55 | /** |
@@ -55,6 +57,13 @@ | @@ -55,6 +57,13 @@ | ||
55 | */ | 57 | */ |
56 | @property (strong, nonatomic) YHError *error; | 58 | @property (strong, nonatomic) YHError *error; |
57 | 59 | ||
60 | +/** | ||
61 | + @brief 最近一个Performance信息 | ||
62 | + | ||
63 | + @since 1.0 | ||
64 | + */ | ||
65 | +@property (strong, nonatomic) YHPerformance *perfermance; | ||
66 | + | ||
58 | 67 | ||
59 | - (NSString *)timestamp; | 68 | - (NSString *)timestamp; |
60 | - (void)registerCrashReporter; | 69 | - (void)registerCrashReporter; |
@@ -84,17 +93,27 @@ | @@ -84,17 +93,27 @@ | ||
84 | { | 93 | { |
85 | self = [super init]; | 94 | self = [super init]; |
86 | if (self) { | 95 | if (self) { |
87 | - // 初始化策略 | ||
88 | - _logStrategy = [[[NSUserDefaults standardUserDefaults] objectForKey:kKeyUserDefaultsLogStrategy] intValue]; | ||
89 | 96 | ||
90 | - if (_logStrategy == LogStrategyCustom) { | ||
91 | - // 获取上次启动时服务端给的时间间隔 | ||
92 | - NSTimeInterval interval = [[NSUserDefaults standardUserDefaults] doubleForKey:kKeyUserDefaultsCustomInterval]; | ||
93 | - _currentInterval = MAX(kMinInterval, interval); | ||
94 | - } else { | ||
95 | - _currentInterval = 0; | ||
96 | - } | ||
97 | - | 97 | + /* 修改策略为间隔 5 分钟发送 |
98 | + | ||
99 | + v3.4 | ||
100 | + | ||
101 | + // 初始化策略 | ||
102 | + _logStrategy = [[[NSUserDefaults standardUserDefaults] objectForKey:kKeyUserDefaultsLogStrategy] intValue]; | ||
103 | + | ||
104 | + if (_logStrategy == LogStrategyCustom) { | ||
105 | + // 获取上次启动时服务端给的时间间隔 | ||
106 | + NSTimeInterval interval = [[NSUserDefaults standardUserDefaults] doubleForKey:kKeyUserDefaultsCustomInterval]; | ||
107 | + _currentInterval = MAX(kMinInterval, interval); | ||
108 | + } else { | ||
109 | + _currentInterval = 0; | ||
110 | + } | ||
111 | + | ||
112 | + */ | ||
113 | + | ||
114 | + _logStrategy = LogStrategyAppLaunch | LogStrategyImmedi; | ||
115 | +// _currentInterval = 5*60; | ||
116 | + | ||
98 | YALog(@"logStrategy = %d currentInterval = %0.1f", _logStrategy, _currentInterval); | 117 | YALog(@"logStrategy = %d currentInterval = %0.1f", _logStrategy, _currentInterval); |
99 | } | 118 | } |
100 | 119 | ||
@@ -144,12 +163,12 @@ | @@ -144,12 +163,12 @@ | ||
144 | { | 163 | { |
145 | YALog(@"app will enter foreground !!"); | 164 | YALog(@"app will enter foreground !!"); |
146 | self.session = nil; | 165 | self.session = nil; |
147 | - [[YHAssemblyAssistant sharedInstance] prepareImmediUploadDic:self.appId sessionId:self.session]; | 166 | + [[YHAssemblyAssistant sharedInstance] prepareImmediUploadDic:self.appId sessionId:self.session channelId:self.channelId]; |
148 | } | 167 | } |
149 | 168 | ||
150 | - (NSString *)timestamp | 169 | - (NSString *)timestamp |
151 | { | 170 | { |
152 | - long long now = [[NSDate date] timeIntervalSince1970]; | 171 | + long long now = [[NSDate date] timeIntervalSince1970] * 1000;//milliseconds |
153 | long long int date = (long long int)now; | 172 | long long int date = (long long int)now; |
154 | return [NSString stringWithFormat:@"%lld", date]; | 173 | return [NSString stringWithFormat:@"%lld", date]; |
155 | } | 174 | } |
@@ -180,7 +199,7 @@ | @@ -180,7 +199,7 @@ | ||
180 | // 保存策略 | 199 | // 保存策略 |
181 | NSUserDefaults *strategy = [NSUserDefaults standardUserDefaults]; | 200 | NSUserDefaults *strategy = [NSUserDefaults standardUserDefaults]; |
182 | [strategy setObject: [NSNumber numberWithInteger:logStrategy] forKey:kKeyUserDefaultsLogStrategy]; | 201 | [strategy setObject: [NSNumber numberWithInteger:logStrategy] forKey:kKeyUserDefaultsLogStrategy]; |
183 | - if (logStrategy == LogStrategyCustom) { | 202 | + if ((logStrategy & LogStrategyCustom) != 0) { |
184 | [strategy setObject:[NSNumber numberWithDouble:customInterval] forKey:kKeyUserDefaultsCustomInterval]; | 203 | [strategy setObject:[NSNumber numberWithDouble:customInterval] forKey:kKeyUserDefaultsCustomInterval]; |
185 | } | 204 | } |
186 | [strategy synchronize]; | 205 | [strategy synchronize]; |
@@ -196,53 +215,55 @@ | @@ -196,53 +215,55 @@ | ||
196 | 构建即时发送模式下数据 | 215 | 构建即时发送模式下数据 |
197 | */ | 216 | */ |
198 | 217 | ||
199 | - [[YHAssemblyAssistant sharedInstance] prepareImmediUploadDic:appId sessionId:self.session]; | 218 | + [[YHAssemblyAssistant sharedInstance] prepareImmediUploadDic:appId sessionId:self.session channelId:self.channelId]; |
200 | 219 | ||
201 | [self registerCrashReporter]; | 220 | [self registerCrashReporter]; |
202 | 221 | ||
203 | [self registerAppWillEnterForegroundNotification]; | 222 | [self registerAppWillEnterForegroundNotification]; |
204 | - | 223 | + |
205 | /* | 224 | /* |
206 | 检查发送模式 | 225 | 检查发送模式 |
207 | */ | 226 | */ |
208 | 227 | ||
209 | - if (self.logStrategy == LogStrategyAppLaunch) { // 启动时发送 | 228 | + if ((self.logStrategy & LogStrategyAppLaunch) != 0) { // 启动时发送 |
210 | 229 | ||
211 | [self uploadDiskData]; | 230 | [self uploadDiskData]; |
212 | 231 | ||
213 | - } else if (self.logStrategy == LogStrategyCustom) { // 间隔发送 | 232 | + } |
233 | + | ||
234 | + if ((self.logStrategy & LogStrategyCustom) != 0) { // 间隔发送 | ||
214 | 235 | ||
215 | [self tryUploadDiskData]; | 236 | [self tryUploadDiskData]; |
216 | - | 237 | + |
217 | self.timer = [NSTimer scheduledTimerWithTimeInterval:self.currentInterval target:self selector:@selector(tryUploadDiskData) userInfo:nil repeats:YES]; | 238 | self.timer = [NSTimer scheduledTimerWithTimeInterval:self.currentInterval target:self selector:@selector(tryUploadDiskData) userInfo:nil repeats:YES]; |
218 | } | 239 | } |
219 | 240 | ||
220 | - | 241 | + |
221 | // 从服务端获取新的发送策略,该策略在下一次APP启动后生效 | 242 | // 从服务端获取新的发送策略,该策略在下一次APP启动后生效 |
222 | -// [[YHNetworkService sharedInstance] getNewLogStrategy:nil completionBlock:^(NSDictionary *strategy, NSError *error) { | ||
223 | -// if (strategy) { | ||
224 | -// NSString *logMode = [strategy objectForKey:@"logmode"]; | ||
225 | -// NSString *time = [strategy objectForKey:@"time"]; | ||
226 | -// NSString *event = [strategy objectForKey:@"event"]; | ||
227 | -// | ||
228 | -// YALog(@"logMode = %@, time = %@, event = %@.", logMode, time, event); | ||
229 | -// | ||
230 | -// YHLogStrategy logStrategy; | ||
231 | -// NSTimeInterval customInterval; | ||
232 | -// if ([logMode isEqualToString:@"BATCH"]) { | ||
233 | -// logStrategy = LogStrategyAppLaunch; | ||
234 | -// } else if ([logMode isEqualToString:@"INTERVAL"]) { | ||
235 | -// logStrategy = LogStrategyCustom; | ||
236 | -// } else { | ||
237 | -// logStrategy = LogStrategyImmedi; | ||
238 | -// } | ||
239 | -// customInterval = [time integerValue]; | ||
240 | -// | ||
241 | -// [self updateLogStrategy:logStrategy customInterval:customInterval]; | ||
242 | -// } else { | ||
243 | -// YALog(@"%@", error); | ||
244 | -// } | ||
245 | -// }]; | 243 | + // [[YHNetworkService sharedInstance] getNewLogStrategy:nil completionBlock:^(NSDictionary *strategy, NSError *error) { |
244 | + // if (strategy) { | ||
245 | + // NSString *logMode = [strategy objectForKey:@"logmode"]; | ||
246 | + // NSString *time = [strategy objectForKey:@"time"]; | ||
247 | + // NSString *event = [strategy objectForKey:@"event"]; | ||
248 | + // | ||
249 | + // YALog(@"logMode = %@, time = %@, event = %@.", logMode, time, event); | ||
250 | + // | ||
251 | + // YHLogStrategy logStrategy; | ||
252 | + // NSTimeInterval customInterval; | ||
253 | + // if ([logMode isEqualToString:@"BATCH"]) { | ||
254 | + // logStrategy = LogStrategyAppLaunch; | ||
255 | + // } else if ([logMode isEqualToString:@"INTERVAL"]) { | ||
256 | + // logStrategy = LogStrategyCustom; | ||
257 | + // } else { | ||
258 | + // logStrategy = LogStrategyImmedi; | ||
259 | + // } | ||
260 | + // customInterval = [time integerValue]; | ||
261 | + // | ||
262 | + // [self updateLogStrategy:logStrategy customInterval:customInterval]; | ||
263 | + // } else { | ||
264 | + // YALog(@"%@", error); | ||
265 | + // } | ||
266 | + // }]; | ||
246 | } | 267 | } |
247 | 268 | ||
248 | // 记录event | 269 | // 记录event |
@@ -260,12 +281,16 @@ | @@ -260,12 +281,16 @@ | ||
260 | self.event.param = param; | 281 | self.event.param = param; |
261 | 282 | ||
262 | // 立即发送策略 | 283 | // 立即发送策略 |
263 | - if (self.logStrategy == LogStrategyImmedi) { | 284 | + if ((self.logStrategy & LogStrategyImmedi) != 0) { |
264 | [[YHAssemblyAssistant sharedInstance] uploadImmedilyWithEvent:self.event]; | 285 | [[YHAssemblyAssistant sharedInstance] uploadImmedilyWithEvent:self.event]; |
265 | } else { | 286 | } else { |
266 | [[YHAssemblyAssistant sharedInstance] saveItemData:self.event]; | 287 | [[YHAssemblyAssistant sharedInstance] saveItemData:self.event]; |
267 | } | 288 | } |
268 | 289 | ||
290 | + // 首次安装的首次启动时发送 | ||
291 | + if ([eventId isEqualToString:kAnalyticsYB_LAUNCH_APP]) { | ||
292 | + [[YHAssemblyAssistant sharedInstance] uploadFirstLaunchApp]; | ||
293 | + } | ||
269 | } | 294 | } |
270 | 295 | ||
271 | // 记录错误数据 | 296 | // 记录错误数据 |
@@ -281,34 +306,34 @@ | @@ -281,34 +306,34 @@ | ||
281 | self.error.param = param; | 306 | self.error.param = param; |
282 | 307 | ||
283 | // crash 不支持立即发送 | 308 | // crash 不支持立即发送 |
284 | - if (self.logStrategy == LogStrategyImmedi && ![errorType isEqualToString:kErrorTypeCrash]) { | 309 | + if ((self.logStrategy & LogStrategyImmedi) != 0 && ![errorType isEqualToString:kErrorTypeCrash]) { |
285 | [[YHAssemblyAssistant sharedInstance] uploadImmedilyWithEvent:self.error]; | 310 | [[YHAssemblyAssistant sharedInstance] uploadImmedilyWithEvent:self.error]; |
286 | } else { | 311 | } else { |
287 | [[YHAssemblyAssistant sharedInstance] saveItemData:self.error]; | 312 | [[YHAssemblyAssistant sharedInstance] saveItemData:self.error]; |
288 | } | 313 | } |
289 | } | 314 | } |
290 | 315 | ||
291 | - | ||
292 | -//- (void)logError:(NSError *)error | ||
293 | -//{ | ||
294 | -// YALog(@"logError %@", error); | ||
295 | -// | ||
296 | -// self.error = [[YHError alloc] init]; | ||
297 | -// self.error.uid = self.uid ? self.uid : @""; | ||
298 | -// self.error.ts = [self timestamp]; | ||
299 | -// self.error.sid = self.session; | ||
300 | -// self.error.et = error.domain; | ||
301 | -// | ||
302 | -// NSMutableDictionary *param = [NSMutableDictionary dictionary]; | ||
303 | -// param[JsonKeyErrorEC] = [NSString stringWithFormat:@"%ld", (long)error.code]; | ||
304 | -// param[JsonKeyErrorEI] = error.localizedDescription; | ||
305 | -// self.error.param = param; | ||
306 | -// | ||
307 | -// if (self.logStrategy == LogStrategyImmedi) { | ||
308 | -// [[YHAssemblyAssistant sharedInstance] uploadImmedilyWithEvent:self.error]; | 316 | +// 记录Performance |
317 | +- (void)logPerformanceWithType:(NSString *)perfType parameters:(NSDictionary *)param | ||
318 | +{ | ||
319 | + YALog(@"perfType %@, %@", perfType, param); | ||
320 | + | ||
321 | + self.perfermance = [[YHPerformance alloc] init]; | ||
322 | + self.perfermance.type = perfType; | ||
323 | + self.perfermance.uid = self.uid ? self.uid : @""; | ||
324 | + self.perfermance.ts = [self timestamp]; | ||
325 | + self.perfermance.sid = self.session; | ||
326 | + self.perfermance.param = param; | ||
327 | + | ||
328 | + // 立即发送策略 | ||
329 | +// if ((self.logStrategy & LogStrategyImmedi) != 0) { | ||
330 | +// [[YHAssemblyAssistant sharedInstance] uploadImmedilyWithEvent:self.perfermance]; | ||
309 | // } else { | 331 | // } else { |
310 | -// [[YHAssemblyAssistant sharedInstance] saveItemData:self.error]; | 332 | +// [[YHAssemblyAssistant sharedInstance] saveItemData:self.perfermance]; |
311 | // } | 333 | // } |
312 | -//} | 334 | + |
335 | + // 性能统计事件不需要立即发送 | ||
336 | + [[YHAssemblyAssistant sharedInstance]savePerformanceData:self.perfermance]; | ||
337 | +} | ||
313 | 338 | ||
314 | @end | 339 | @end |
1 | +// | ||
2 | +// YH_Analytics_Evevt.h | ||
3 | +// YH_Mall | ||
4 | +// | ||
5 | +// Created by chen.yanyan on 15/5/11. | ||
6 | +// Copyright (c) 2015年 YOHO. All rights reserved. | ||
7 | +// | ||
8 | + | ||
9 | +#ifndef YH_Mall_YH_Analytics_Evevt_h | ||
10 | +#define YH_Mall_YH_Analytics_Evevt_h | ||
11 | + | ||
12 | +#define kAnalyticsYB_MAIN_LT_CHS @"YB_MAIN_LT_CHS" // 主界面-首页-左上角按钮点击 | ||
13 | + | ||
14 | +#define kAnalyticsYB_MAIN_S @"YB_MAIN_S" // 主界面-首页-搜索功能使用 | ||
15 | + | ||
16 | +#define kAnalyticsYB_MAIN_RT @"YB_MAIN_RT" // 主界面-首页-右上角按钮点击(扫描) | ||
17 | + | ||
18 | +#define kAnalyticsYB_MAIN_BAN @"YB_MAIN_BAN" // 主界面-首页-banner(点击) | ||
19 | + | ||
20 | +#define kAnalyticsYB_MAIN_BU @"YB_MAIN_BU" // 主界面-首页-栏目 | ||
21 | + | ||
22 | +#define kAnalyticsYB_MAIN_BR @"YB_MAIN_BR" // 主界面-首页-热门品牌 | ||
23 | + | ||
24 | +#define kAnalyticsYB_MAIN_CAT_COLL @"YB_MAIN_CAT_COLL" // 主界面-首页-潮人搭配 | ||
25 | + | ||
26 | +#define kAnalyticsYB_MAIN_CAT_TOPIC @"YB_MAIN_CAT_TOPIC" // 主界面-首页-潮品话题 | ||
27 | + | ||
28 | +#define kAnalyticsYB_MAIN_CAT_NAV @"YB_MAIN_CAT_NAV" // 主界面-首页-分类商品类别的点击 | ||
29 | + | ||
30 | +#define kAnalyticsYB_MAIN_CAT_RECM_COLL @"YB_MAIN_CAT_RECM_COLL" // 主界面-首页-推荐搭配 | ||
31 | + | ||
32 | +#define kAnalyticsYB_MAIN_CAT_NAV_RECPRD @"YB_MAIN_CAT_NAV_RECPRD" // 主界面-首页-可能喜欢 | ||
33 | + | ||
34 | +#define kAnalyticsYB_MAIN_CAT_NAV_CUST @"YB_MAIN_CAT_NAV_CUST" // 主界面-首页-自定义推荐 | ||
35 | + | ||
36 | +#define kAnalyticsYB_MAIN_CAT_GLOBAL @"YB_MAIN_CAT_GLOBAL" // 主界面-首页-全球购入口 | ||
37 | + | ||
38 | +#define kAnalyticsYB_STROLL @"YB_STROLL" // 主界面-逛 | ||
39 | + | ||
40 | +#define kAnalyticsYB_STROLL_NAV @"YB_STROLL_NAV" // 主界面-逛-栏目导航 | ||
41 | + | ||
42 | +#define kAnalyticsYB_STROLL_VIEWFAV @"YB_STROLL_VIEWFAV" // 主界面-逛-查看收藏 | ||
43 | + | ||
44 | +#define kAnalyticsYB_STROLL_FAV @"YB_STROLL_FAV" // 主界面-逛-收藏 | ||
45 | + | ||
46 | +#define kAnalyticsYB_STROLL_LIKE @"YB_STROLL_LIKE" // 主界面-逛-赞 | ||
47 | + | ||
48 | +#define kAnalyticsYB_STROLL_CONT @"YB_STROLL_CONT" // 主界面-逛-内容浏览 | ||
49 | + | ||
50 | +#define kAnalyticsYB_STROLL_CONT_GD @"YB_STROLL_CONT_GD" // 主界面-逛-内容页-赞 | ||
51 | + | ||
52 | +#define kAnalyticsYB_STROLL_CONT_LK @"YB_STROLL_CONT_LK" // 主界面-逛-内容页-喜欢 | ||
53 | + | ||
54 | +#define kAnalyticsYB_STROLL_CONT_CM @"YB_STROLL_CONT_CM" // 主界面-逛-内容页-评论 | ||
55 | + | ||
56 | +#define kAnalyticsYB_STROLL_CONT_SHR @"YB_STROLL_CONT_SHR" // 主界面-逛-内容页-分享 | ||
57 | + | ||
58 | +#define kAnalyticsYB_STROLL_CONT_SHTYP @"YB_STROLL_CONT_SHTYP" // 主界面-逛-内容页-分享方式 | ||
59 | + | ||
60 | +#define kAnalyticsYB_STROLL_CONT_BRND @"YB_STROLL_CONT_BRND" // 主界面-逛-内容页-关联品牌 | ||
61 | + | ||
62 | +#define kAnalyticsYB_STROLL_CONT_REC_PRD @"YB_STROLL_CONT_REC_PRD" // 主界面-逛-内容页-相关推荐商品 | ||
63 | + | ||
64 | +#define kAnalyticsYB_STROLL_CONT_REC_FAV @"YB_STROLL_CONT_REC_FAV" // 主界面-逛-内容页-相关推荐收藏 | ||
65 | + | ||
66 | +#define kAnalyticsYB_STROLL_CONT_REC_TAG @"YB_STROLL_CONT_REC_TAG" // 主界面-逛-内容页-标签 | ||
67 | + | ||
68 | +#define kAnalyticsYB_MAIN_BO @"YB_MAIN_BO" // 主界面-首页-底部图片的点击 | ||
69 | + | ||
70 | +#define kAnalyticsYB_FUNC_PUSH @"YB_FUNC_PUSH" // 点击推送 | ||
71 | + | ||
72 | +#define kAnalyticsYB_ENTER_CHOICE @"YB_ENTER_CHOICE" // 入口界面-入口选择 | ||
73 | + | ||
74 | +#define kAnalyticsYB_SC @"YB_SC" // 主界面-购物车 | ||
75 | + | ||
76 | +#define kAnalyticsYB_MAIN_SHOW @"YB_MAIN_SHOW" // 主界面-首页 | ||
77 | + | ||
78 | +#define kAnalyticsYB_FUNC_SC_DRIFT @"YB_FUNC_SC_DRIFT" // 功能应用-购物车 | ||
79 | + | ||
80 | +#define kAnalyticsYB_CATEGORY @"YB_CATEGORY" //主界面-分类 | ||
81 | + | ||
82 | +#define kAnalyticsYB_CATEGORY_CLS_TAB @"YB_CATEGORY_CLS_TAB" // 主界面-分类-品类TAB | ||
83 | + | ||
84 | +#define kAnalyticsYB_CATEGORY_BRAND_TAB @"YB_CATEGORY_BRAND_TAB" // 主界面-分类-品类品牌TAB | ||
85 | + | ||
86 | +#define kAnalyticsYB_CATEGORY_BRAND_TAB_FAV @"YB_CATEGORY_BRAND_TAB_FAV" // 主界面-分类-品牌-主界面品牌列表_关注-收藏品牌 | ||
87 | + | ||
88 | +#define kAnalyticsYB_CATEGORY_ATT_TAB @"YB_CATEGORY_ATT_TAB" // 主界面-分类-品类关注TAB | ||
89 | + | ||
90 | +#define kAnalyticsYB_CATEGORY_CAT_LIST @"YB_CATEGORY_CAT_LIST" // 主界面-分类-品类列表 | ||
91 | + | ||
92 | +#define kAnalyticsYB_CATEGORY_BRAND_LIST_BAN @"YB_CATEGORY_BRAND_LIST_BAN" // 主界面-分类-品牌-主界面品牌列表_band | ||
93 | + | ||
94 | +#define kAnalyticsYB_CATEGORY_BRAND_LIST_TEXT @"YB_CATEGORY_BRAND_LIST_TEXT" // 主界面-分类-品牌-主界面品牌列表 | ||
95 | + | ||
96 | +#define kAnalyticsYB_CATEGORY_BRAND_LIST_ATT @"YB_CATEGORY_BRAND_LIST_ATT" // 主界面-分类-品牌-主界面品牌列表_关注 | ||
97 | + | ||
98 | +#define kAnalyticsYB_CATEGORY_BRAND_LIST_ATT_FAV @"YB_CATEGORY_BRAND_LIST_ATT_FAV" // 主界面-分类-品牌-主界面品牌列表_关注-收藏品牌 | ||
99 | + | ||
100 | +#define kAnalyticsYB_CATEGORY_BRAND_LIST_BR @"YB_CATEGORY_BRAND_LIST_BR" // 主界面-分类-品牌-主界面品牌列表_热门品牌 | ||
101 | + | ||
102 | +#define kAnalyticsYB_GDS_BR_INF @"YB_GDS_BR_INF" // 品牌页-顶部品牌介绍信息(顶部按钮) | ||
103 | + | ||
104 | +#define kAnalyticsYB_GDS_LIST @"YB_GDS_LIST" // 商品列表页 | ||
105 | + | ||
106 | +#define kAnalyticsYB_GDS_LIST_CHG @"YB_GDS_LIST_CHG" // 品牌页-商品筛选按钮 | ||
107 | + | ||
108 | +#define kAnalyticsYB_GDS_LIST_BR_FAV @"YB_GDS_LIST_BR_FAV" // 品牌页-收藏品牌 | ||
109 | + | ||
110 | +#define kAnalyticsYB_GDS_LIST_CHG_RES @"YB_GDS_LIST_CHG_RES" // 品牌页-商品筛选 | ||
111 | + | ||
112 | +#define kAnalyticsYB_GDS_LIST_SORT @"YB_GDS_LIST_SORT" // 品牌页-排序 | ||
113 | + | ||
114 | +#define kAnalyticsYB_GDS_DT_INFO @"YB_GDS_DT_INFO" // 商品详情页 | ||
115 | + | ||
116 | +#define kAnalyticsYB_GDS_DT_BUY @"YB_GDS_DT_BUY" // 商品详情页-加入购物车 | ||
117 | + | ||
118 | +#define kAnalyticsYB_GDS_DT_SEL @"YB_GDS_DT_SEL" // 商品详情页-选择SKCSKN | ||
119 | + | ||
120 | +#define kAnalyticsYB_GDS_DT_TOBUY @"YB_GDS_DT_TOBUY" // 商品详情页-选择完成后的加购物车 | ||
121 | + | ||
122 | +#define kAnalyticsYB_GDS_DT_FAV @"YB_GDS_DT_FAV" // 商品详情页-喜欢商品 | ||
123 | + | ||
124 | +#define kAnalyticsYB_GDS_DT_ASK @"YB_GDS_DT_ASK" // 商品详情页-咨询商品 | ||
125 | + | ||
126 | +#define kAnalyticsYB_GDS_DT_BR @"YB_GDS_DT_BR" // 商品详情页-品牌店铺 | ||
127 | + | ||
128 | +#define kAnalyticsYB_GDS_DT_SHARE @"YB_GDS_DT_SHARE" // 商品详情页-分享商品 | ||
129 | + | ||
130 | +#define kAnalyticsYB_GDS_SHARE_TYP @"YB_GDS_SHARE_TYP" // 分享商品方式 | ||
131 | + | ||
132 | +#define kAnalyticsYB_SC_LOGIN @"YB_SC_LOGIN" // 购物车-登陆 | ||
133 | + | ||
134 | +#define kAnalyticsYB_SC_NOGDS @"YB_SC_NOGDS" // 购物车-随便逛逛 | ||
135 | + | ||
136 | +#define kAnalyticsYB_SC_TOPAY @"YB_SC_TOPAY" // 购物车-结算 | ||
137 | + | ||
138 | +#define kAnalyticsYB_SC_ORD @"YB_SC_ORD" // 购物车-生成订单 | ||
139 | + | ||
140 | +#define kAnalyticsYB_SC_PAY @"YB_SC_PAY" // 购物车-确认付款 | ||
141 | + | ||
142 | +#define kAnalyticsYB_SC_PAY_RES @"YB_SC_PAY_RES" // 购物车-付款结果 | ||
143 | + | ||
144 | +#define kAnalyticsYB_MY @"YB_MY" // 主界面-我的 | ||
145 | + | ||
146 | +#define kAnalyticsYB_MY_ORD @"YB_MY_ORD" // 我的订单 | ||
147 | + | ||
148 | +#define kAnalyticsYB_MY_WTPAY @"YB_MY_WTPAY" // 待付款 | ||
149 | + | ||
150 | +#define kAnalyticsYB_MY_WTOUT @"YB_MY_WTOUT" // 待发货 | ||
151 | + | ||
152 | +#define kAnalyticsYB_MY_WTREV @"YB_MY_WTREV" // 待收货 | ||
153 | + | ||
154 | +#define kAnalyticsYB_MY_WTAPP @"YB_MY_WTAPP" // 待评价 | ||
155 | + | ||
156 | +#define kAnalyticsYB_MY_MESS @"YB_MY_MESS" // 消息中心 | ||
157 | + | ||
158 | +#define kAnalyticsYB_MY_FAVBRND @"YB_MY_FAVBRND" // 收藏的品牌 | ||
159 | + | ||
160 | +#define kAnalyticsYB_MY_FAVPRD @"YB_MY_FAVPRD" // 收藏的商品 | ||
161 | + | ||
162 | +#define kAnalyticsYB_MY_BROWSE @"YB_MY_BROWSE" // 浏览记录 | ||
163 | + | ||
164 | +#define kAnalyticsYB_MY_GLOBAL @"YB_MY_GLOBAL" // 全球购订单 | ||
165 | + | ||
166 | +#define kAnalyticsYB_MY_YOHO @"YB_MY_YOHO" // YOHO币 | ||
167 | + | ||
168 | +#define kAnalyticsYB_MY_COUP @"YB_MY_COUP" // 优惠券 | ||
169 | + | ||
170 | +#define kAnalyticsYB_MY_BILL @"YB_MY_BILL" // 会员账单 | ||
171 | + | ||
172 | +#define kAnalyticsYB_MY_ADRS @"YB_MY_ADRS" // 地址管理 | ||
173 | + | ||
174 | +#define kAnalyticsYB_MY_HELP @"YB_MY_HELP" // 帮助中心 | ||
175 | + | ||
176 | +#define kAnalyticsYB_MY_ABOUT @"YB_MY_ABOUT" // 关于我们 | ||
177 | + | ||
178 | +#define kAnalyticsYB_MY_FBACK @"YB_MY_FBACK" // 意见反馈 | ||
179 | + | ||
180 | +#define kAnalyticsYB_MY_INV @"YB_MY_INV" // 邀请好友 | ||
181 | + | ||
182 | +#define kAnalyticsYB_MY_OLCS @"YB_MY_OLCS" // 在线客服 | ||
183 | + | ||
184 | +#define kAnalyticsYB_MY_MORE_APP @"YB_MY_MORE_APP" // 更多应用 | ||
185 | + | ||
186 | +#define kAnalyticsYB_MY_LOGIN @"YB_MY_LOGIN" // 登录 | ||
187 | + | ||
188 | +#define kAnalyticsYB_MY_LOGOUT @"YB_MY_LOGOUT" // 登出 | ||
189 | + | ||
190 | +#define kAnalyticsYB_ENTER_FOREGROUND @"YB_ENTER_FOREGROUND" // 进入前台 | ||
191 | + | ||
192 | +#define kAnalyticsYB_ENTER_BACKGROUND @"YB_ENTER_BACKGROUND" // 进入后台 | ||
193 | + | ||
194 | +#define kAnalyticsYB_LAUNCH_APP @"YB_LAUNCH_APP" // 登陆APP | ||
195 | + | ||
196 | +#define kAnalyticsYB_EXIT_APP @"YB_EXIT_APP" // 退出APP | ||
197 | + | ||
198 | +#define kAnalyticsYB_UTM_SOURCE @"YB_UTM_SOURCE" // 推广渠道 | ||
199 | + | ||
200 | +#define kAnalyticsYB_GLOBAL_GDS_LIST @"YB_GLOBAL_GDS_LIST" // 全球购-商品列表 | ||
201 | + | ||
202 | +#define kAnalyticsYB_GLOBAL_CATEGORY @"YB_GLOBAL_CATEGORY" // 全球购-分类 | ||
203 | + | ||
204 | +#define kAnalyticsYB_GLOBAL_BRAND @"YB_GLOBAL_BRAND" // 全球购-品牌 | ||
205 | + | ||
206 | +#define kAnalyticsYB_GLOBAL_GDS_DT @"YB_GLOBAL_GDS_DT" // 全球购-商品详情 | ||
207 | + | ||
208 | +#define kAnalyticsYB_GLOBAL_GDS_DT_BR @"YB_GLOBAL_GDS_DT_BR" // 全球购-商品详情页-品牌店铺 | ||
209 | + | ||
210 | +#define kAnalyticsYB_GLOBAL_GDS_DT_SEL @"YB_GLOBAL_GDS_DT_SEL" // 全球购-商品详情-选择颜色尺码 | ||
211 | + | ||
212 | +#define kAnalyticsYB_GLOBAL_GDS_DT_BUY @"YB_GLOBAL_GDS_DT_BUY" // 全球购-商品详情-立即购买 | ||
213 | + | ||
214 | +#define kAnalyticsYB_GLOBAL_SC_LOGIN @"YB_GLOBAL_SC_LOGIN" // 全球购-购物车-登陆 | ||
215 | + | ||
216 | +#define kAnalyticsYB_GLOBAL_SC_NOGDS @"YB_GLOBAL_SC_NOGDS" // 全球购-购物车-随便逛逛 | ||
217 | + | ||
218 | +#define kAnalyticsYB_GLOBAL_SC_TOPAY @"YB_GLOBAL_SC_TOPAY" // 全球购-购物车-结算 | ||
219 | + | ||
220 | +#define kAnalyticsYB_GLOBAL_SC_ORD @"YB_GLOBAL_SC_ORD" // 全球购-购物车-生成订单 | ||
221 | + | ||
222 | +#define kAnalyticsYB_GLOBAL_SC_PAY @"YB_GLOBAL_SC_PAY" // 全球购-购物车-确认付款 | ||
223 | + | ||
224 | +#define kAnalyticsYB_GLOBAL_SC_PAY_RES @"YB_GLOBAL_SC_PAY_RES" // 全球购-购物车-付款结果 | ||
225 | + | ||
226 | +#define kAnalyticsYB_GLOBAL_SC_IDCARD @"YB_GLOBAL_SC_IDCARD" // 全球购-购物车-添加身份证 | ||
227 | + | ||
228 | +#define kAnalyticsYB_GLOBAL_AC_IDCARD @"YB_GLOBAL_AC_IDCARD" // 全球购-地址选择-添加身份证 | ||
229 | + | ||
230 | +#define kAnalyticsYB_GLOBAL_AE_IDNUM @"YB_GLOBAL_AE_IDNUM" // 全球购-地址编辑-身份证号 | ||
231 | + | ||
232 | +#define kAnalyticsYB_GLOBAL_AE_IDEYE @"YB_GLOBAL_AE_IDEYE" // 全球购-地址编辑-眼睛 | ||
233 | + | ||
234 | +#define kAnalyticsYB_GLOBAL_AE_IDPOS @"YB_GLOBAL_AE_IDPOS" // 全球购-地址编辑-身份证正面 | ||
235 | + | ||
236 | +#define kAnalyticsYB_GLOBAL_AE_IDNEG @"YB_GLOBAL_AE_IDNEG" // 全球购-地址编辑-身份证反面 | ||
237 | + | ||
238 | +#define kAnalyticsYB_GLOBAL_ORD_CANCEL @"YB_GLOBAL_ORD_CANCEL" // 全球购-订单-取消订单 | ||
239 | + | ||
240 | +#define kAnalyticsYB_GLOBAL_ORD_PAY @"YB_GLOBAL_ORD_PAY" // 全球购-订单-立即支付 | ||
241 | + | ||
242 | +#define kAnalyticsYB_GLOBAL_ORD_LOGIST @"YB_GLOBAL_ORD_LOGIST" // 全球购-订单-查看物流 | ||
243 | + | ||
244 | +#define kAnalyticsYB_GLOBAL_ORD_DEL @"YB_GLOBAL_ORD_DEL" // 全球购-订单-删除订单 | ||
245 | + | ||
246 | +#endif |
@@ -164,7 +164,7 @@ | @@ -164,7 +164,7 @@ | ||
164 | - (void)testPrepareImmediUploadDic { | 164 | - (void)testPrepareImmediUploadDic { |
165 | NSLog(@"%@ start", self.name); | 165 | NSLog(@"%@ start", self.name); |
166 | 166 | ||
167 | - [assembly prepareImmediUploadDic:@"appId" sessionId:@"sessionId"]; | 167 | + [assembly prepareImmediUploadDic:@"appId" sessionId:@"sessionId" channelId:@"channelId"]; |
168 | 168 | ||
169 | NSDictionary *deviceJsonDic = [assembly.immediUploadItemDic objectForKey:JsonKeyDataTypeDevice]; | 169 | NSDictionary *deviceJsonDic = [assembly.immediUploadItemDic objectForKey:JsonKeyDataTypeDevice]; |
170 | NSMutableArray *statusJsonArray = [assembly.immediUploadItemDic objectForKey:JsonKeyDataTypeStatus]; | 170 | NSMutableArray *statusJsonArray = [assembly.immediUploadItemDic objectForKey:JsonKeyDataTypeStatus]; |
@@ -182,7 +182,7 @@ | @@ -182,7 +182,7 @@ | ||
182 | 182 | ||
183 | OCMExpect([networkMock setReachabilityStatusChangeBlock:[OCMArg any]]); | 183 | OCMExpect([networkMock setReachabilityStatusChangeBlock:[OCMArg any]]); |
184 | 184 | ||
185 | - [assembly prepareImmediUploadDic:@"appId" sessionId:@"sessionId"]; | 185 | +// [assembly prepareImmediUploadDic:@"appId" sessionId:@"sessionId"]; |
186 | 186 | ||
187 | OCMVerifyAll(networkMock); | 187 | OCMVerifyAll(networkMock); |
188 | 188 | ||
@@ -197,7 +197,7 @@ | @@ -197,7 +197,7 @@ | ||
197 | OCMStub(ClassMethod([locationManageMock locationServicesEnabled])).andReturn(YES); | 197 | OCMStub(ClassMethod([locationManageMock locationServicesEnabled])).andReturn(YES); |
198 | OCMExpect([locationManageMock startUpdatingLocation]); | 198 | OCMExpect([locationManageMock startUpdatingLocation]); |
199 | 199 | ||
200 | - [assembly prepareImmediUploadDic:@"appId" sessionId:@"sessionId"]; | 200 | + [assembly prepareImmediUploadDic:@"appId" sessionId:@"sessionId" channelId:@"channelId"]; |
201 | 201 | ||
202 | OCMVerifyAll(locationManageMock); | 202 | OCMVerifyAll(locationManageMock); |
203 | 203 | ||
@@ -212,7 +212,7 @@ | @@ -212,7 +212,7 @@ | ||
212 | OCMStub(ClassMethod([locationManageMock locationServicesEnabled])).andReturn(NO); | 212 | OCMStub(ClassMethod([locationManageMock locationServicesEnabled])).andReturn(NO); |
213 | [[locationManageMock reject] startUpdatingLocation]; | 213 | [[locationManageMock reject] startUpdatingLocation]; |
214 | 214 | ||
215 | - [assembly prepareImmediUploadDic:@"appId" sessionId:@"sessionId"]; | 215 | + [assembly prepareImmediUploadDic:@"appId" sessionId:@"sessionId" channelId:@"channelId"]; |
216 | 216 | ||
217 | OCMVerifyAll(locationManageMock); | 217 | OCMVerifyAll(locationManageMock); |
218 | 218 | ||
@@ -231,7 +231,7 @@ | @@ -231,7 +231,7 @@ | ||
231 | - (void)testUpdateImmediUploadDicSuccess { | 231 | - (void)testUpdateImmediUploadDicSuccess { |
232 | NSLog(@"%@ start", self.name); | 232 | NSLog(@"%@ start", self.name); |
233 | 233 | ||
234 | - [assembly prepareImmediUploadDic:@"appId" sessionId:@"sessionId"]; | 234 | + [assembly prepareImmediUploadDic:@"appId" sessionId:@"sessionId" channelId:@"channelId"]; |
235 | [assembly updateImmediUploadDic]; | 235 | [assembly updateImmediUploadDic]; |
236 | 236 | ||
237 | NSMutableArray *statusJsonArray = [assembly.immediUploadItemDic objectForKey:JsonKeyDataTypeStatus]; | 237 | NSMutableArray *statusJsonArray = [assembly.immediUploadItemDic objectForKey:JsonKeyDataTypeStatus]; |
@@ -353,7 +353,7 @@ | @@ -353,7 +353,7 @@ | ||
353 | - (void)testUploadImmedilyWithEvent { | 353 | - (void)testUploadImmedilyWithEvent { |
354 | NSLog(@"%@ start", self.name); | 354 | NSLog(@"%@ start", self.name); |
355 | 355 | ||
356 | - [assembly prepareImmediUploadDic:@"appId" sessionId:@"sessionId"]; | 356 | + [assembly prepareImmediUploadDic:@"appId" sessionId:@"sessionId" channelId:@"channelId"]; |
357 | YHEvent *data = [YHEvent new]; | 357 | YHEvent *data = [YHEvent new]; |
358 | data.op = @"testEvent"; | 358 | data.op = @"testEvent"; |
359 | OCMExpect([networkMock uploadLogData:[OCMArg any] completionBlock:[OCMArg any]]); | 359 | OCMExpect([networkMock uploadLogData:[OCMArg any] completionBlock:[OCMArg any]]); |
@@ -373,7 +373,7 @@ | @@ -373,7 +373,7 @@ | ||
373 | - (void)testUploadImmedilyWithError { | 373 | - (void)testUploadImmedilyWithError { |
374 | NSLog(@"%@ start", self.name); | 374 | NSLog(@"%@ start", self.name); |
375 | 375 | ||
376 | - [assembly prepareImmediUploadDic:@"appId" sessionId:@"sessionId"]; | 376 | + [assembly prepareImmediUploadDic:@"appId" sessionId:@"sessionId" channelId:@"channelId"]; |
377 | YHError *data = [YHError new]; | 377 | YHError *data = [YHError new]; |
378 | OCMExpect([networkMock uploadLogData:[OCMArg any] completionBlock:[OCMArg any]]); | 378 | OCMExpect([networkMock uploadLogData:[OCMArg any] completionBlock:[OCMArg any]]); |
379 | 379 | ||
@@ -392,7 +392,7 @@ | @@ -392,7 +392,7 @@ | ||
392 | - (void)testUploadImmedilyWithDevice { | 392 | - (void)testUploadImmedilyWithDevice { |
393 | NSLog(@"%@ start", self.name); | 393 | NSLog(@"%@ start", self.name); |
394 | 394 | ||
395 | - [assembly prepareImmediUploadDic:@"appId" sessionId:@"sessionId"]; | 395 | + [assembly prepareImmediUploadDic:@"appId" sessionId:@"sessionId" channelId:@"channelId"]; |
396 | YHDevice *data = [YHDevice new]; | 396 | YHDevice *data = [YHDevice new]; |
397 | 397 | ||
398 | XCTAssertThrows([assembly uploadImmedilyWithEvent:data]); | 398 | XCTAssertThrows([assembly uploadImmedilyWithEvent:data]); |
@@ -403,7 +403,7 @@ | @@ -403,7 +403,7 @@ | ||
403 | - (void)testUploadImmedilyWithStatus { | 403 | - (void)testUploadImmedilyWithStatus { |
404 | NSLog(@"%@ start", self.name); | 404 | NSLog(@"%@ start", self.name); |
405 | 405 | ||
406 | - [assembly prepareImmediUploadDic:@"appId" sessionId:@"sessionId"]; | 406 | + [assembly prepareImmediUploadDic:@"appId" sessionId:@"sessionId" channelId:@"channelId"]; |
407 | YHStatus *data = [YHStatus new]; | 407 | YHStatus *data = [YHStatus new]; |
408 | 408 | ||
409 | XCTAssertThrows([assembly uploadImmedilyWithEvent:data]); | 409 | XCTAssertThrows([assembly uploadImmedilyWithEvent:data]); |
@@ -499,7 +499,7 @@ | @@ -499,7 +499,7 @@ | ||
499 | OCMExpect([partialMock updateLocation:newLocation]).andReturn(YES); | 499 | OCMExpect([partialMock updateLocation:newLocation]).andReturn(YES); |
500 | OCMExpect([partialMock updateImmediUploadDic]); | 500 | OCMExpect([partialMock updateImmediUploadDic]); |
501 | 501 | ||
502 | - [assembly prepareImmediUploadDic:@"appId" sessionId:@"seesionId"]; | 502 | + [assembly prepareImmediUploadDic:@"appId" sessionId:@"sessionId" channelId:@"channelId"]; |
503 | [(FakeLocationManager *)assembly.locationManager updateLocations:@[newLocation]]; | 503 | [(FakeLocationManager *)assembly.locationManager updateLocations:@[newLocation]]; |
504 | 504 | ||
505 | OCMVerifyAll(partialMock); | 505 | OCMVerifyAll(partialMock); |
@@ -517,7 +517,7 @@ | @@ -517,7 +517,7 @@ | ||
517 | OCMExpect([partialMock updateLocation:newLocation]).andReturn(NO); | 517 | OCMExpect([partialMock updateLocation:newLocation]).andReturn(NO); |
518 | [[partialMock reject] updateImmediUploadDic]; | 518 | [[partialMock reject] updateImmediUploadDic]; |
519 | 519 | ||
520 | - [assembly prepareImmediUploadDic:@"appId" sessionId:@"seesionId"]; | 520 | + [assembly prepareImmediUploadDic:@"appId" sessionId:@"sessionId" channelId:@"channelId"]; |
521 | [(FakeLocationManager *)assembly.locationManager updateLocations:@[newLocation]]; | 521 | [(FakeLocationManager *)assembly.locationManager updateLocations:@[newLocation]]; |
522 | 522 | ||
523 | OCMVerifyAll(partialMock); | 523 | OCMVerifyAll(partialMock); |
@@ -130,8 +130,8 @@ | @@ -130,8 +130,8 @@ | ||
130 | - (void)testPrepareImmediUploadDicMethod { | 130 | - (void)testPrepareImmediUploadDicMethod { |
131 | NSLog(@"%@ start", self.name); | 131 | NSLog(@"%@ start", self.name); |
132 | 132 | ||
133 | - [[mock expect] prepareImmediUploadDic:@"appId" sessionId:@"sessionId"]; | ||
134 | - [mock prepareImmediUploadDic:@"appId" sessionId:@"sessionId"]; | 133 | + [[mock expect] prepareImmediUploadDic:@"appId" sessionId:@"sessionId" channelId:@"channelId"]; |
134 | + [mock prepareImmediUploadDic:@"appId" sessionId:@"sessionId" channelId:@"channelId"]; | ||
135 | [mock verify]; | 135 | [mock verify]; |
136 | 136 | ||
137 | NSLog(@"%@ end", self.name); | 137 | NSLog(@"%@ end", self.name); |
@@ -75,7 +75,7 @@ | @@ -75,7 +75,7 @@ | ||
75 | NSLog(@"%@ start", self.name); | 75 | NSLog(@"%@ start", self.name); |
76 | 76 | ||
77 | OCMExpect(ClassMethod([crashReporterMock sharedInstance])); | 77 | OCMExpect(ClassMethod([crashReporterMock sharedInstance])); |
78 | - OCMExpect([assemblyAssistantMock prepareImmediUploadDic:@"appId" sessionId:[OCMArg any]]); | 78 | + OCMExpect([assemblyAssistantMock prepareImmediUploadDic:@"appId" sessionId:[OCMArg any] channelId:[OCMArg any]]); |
79 | 79 | ||
80 | [analytics startWithAppId:@"appId"]; | 80 | [analytics startWithAppId:@"appId"]; |
81 | 81 |
-
Please register or login to post a comment