CNLiveUserSystemTools.m
6.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
//
// CNLiveUserSystemTools.m
// CNLiveUserSystemDemo
//
// Created by iOS on 16/9/13.
// Copyright © 2016年 zhulin. All rights reserved.
//
#import "CNLiveUserSystemTools.h"
#import <UIKit/UIKit.h>
#import "CommonCrypto/CommonDigest.h"
#import "Common.h"
#import "CNLiveUserManager.h"
#define testStatUrl @"http://testappsta.cnlive.com/app.js"
#define formalStatUrl @"http://app.sta.cnlive.com/app.js"
@implementation CNLiveUserSystemTools
#pragma mark - uuid
+ (nullable NSString *)uidForStat:(NSString *)dateStr{
NSString *uid = @"";
NSUserDefaults *defauts = [NSUserDefaults standardUserDefaults];
if ([defauts objectForKey:@"kCNLiveUserDefaultsUIDKey"]) {
uid = [[defauts objectForKey:@"kCNLiveUserDefaultsUIDKey"] copy];
return uid;
}
else {
NSString *stamp = dateStr;
stamp = [stamp stringByReplacingOccurrencesOfString:@"." withString:@""];
NSString *idfv = [[[[UIDevice currentDevice] identifierForVendor] UUIDString] stringByReplacingOccurrencesOfString:@"-" withString:@""];
uid = [NSString stringWithFormat:@"%@_%@", idfv, stamp];
[defauts setObject:uid forKey:@"kCNLiveUserDefaultsUIDKey"];
[defauts synchronize];
}
return uid;
}
#pragma mark - 加密
+ (NSString *)sha1:(NSString *)string
{
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
uint8_t digest[CC_SHA1_DIGEST_LENGTH];
CC_SHA1(data.bytes, (int)data.length, digest);
NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
[output appendFormat:@"%02x", digest[i]];
while ([[output substringToIndex:1] isEqualToString:@"0"]) {
output = [[NSMutableString alloc] initWithString:[output substringFromIndex:1]];
}
return output;
}
+ (NSString *)signvalue:(NSDictionary*)parameter
{
//对所有传入参数按照字段名的 ASCII 码从小到大排序
NSArray *keyArr=[parameter allKeys];
NSArray *arr = [keyArr sortedArrayUsingSelector:@selector(compare:)];
NSMutableString *string1 = [[NSMutableString alloc]init];
for (int i=0; i<arr.count; i++) {
NSString *parameterString = [NSString stringWithFormat:@"%@",parameter[[arr objectAtIndex:i]]];
if (parameterString.length > 0) {
[string1 appendString:[NSString stringWithFormat:@"%@=%@&",[arr objectAtIndex:i],parameter[[arr objectAtIndex:i]]]];
}
}
if (string1.length > 0) {
[string1 deleteCharactersInRange:NSMakeRange(string1.length-1, 1)];
}
return string1;
}
//null处理
+ (NSString *)verify:(NSString *)string
{
NSString *newString;
if ([string isKindOfClass:[NSNumber class]]) {
newString = [NSString stringWithFormat:@"%@",string];
} else {
newString = string;
}
if ([newString isKindOfClass:[NSString class]] || newString.length > 0) {
return string;
} else {
return @"";
}
}
+ (void)errorStat:(NSString *)errorString
{
errorString = [self urlEncodeUsingEncodingString:errorString];
[CNLiveUserSystemTools getRealTimeString:^(NSString * _Nullable realTime, NSDate * _Nullable netDate) {
NSString *stamp = realTime;
stamp = [stamp stringByReplacingOccurrencesOfString:@"." withString:@""];
NSString *baseUrl = self.isTestEnvironment ? formalStatUrl : testStatUrl;
NSString *vvUrl = [NSString stringWithFormat:@"%@?sver=%@&uid=%@&tm=%@&from=apple&spid=&appid=%@&version=1005_%@&eventid=1000&uri=%@&sid=%@&plat=i_%@&objid=_",baseUrl,kSVer, [self uidForStat:realTime], stamp, [CNLiveUserManager manager].appId, SDKVersion, errorString,[self getSid],StatAppVersion];
[NSURLConnection connectionWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:vvUrl]] delegate:nil];
}];
}
+ (NSString *)urlEncodeUsingEncodingString:(NSString *)string {
return (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
(__bridge CFStringRef)string,
NULL,
(CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ",
CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));
}
+ (NSString *)getSid
{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
if ([userDefaults objectForKey:@"CNLiveUserSid"]) {
return [userDefaults objectForKey:@"CNLiveUserSid"];
}
return @"";
}
+ (void)getRealTimeString:(void (^_Nullable)(NSString * __nullable realTime,NSDate * _Nullable netDate))realTime
{
[NSURLConnection sendAsynchronousRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"https://m.baidu.com"]] queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
if (!response) {
NSInteger time = [[NSDate date] timeIntervalSince1970];
NSString *timeString = [NSString stringWithFormat:@"%ld", (long)time];
dispatch_sync(dispatch_get_main_queue(), ^{
realTime(timeString,[NSDate date]);
});
return ;
}
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response;
NSString *timestamp = [[httpResponse allHeaderFields] objectForKey:@"Date"];
NSString *timeStr = [timestamp substringWithRange:NSMakeRange(5, 20)];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"GMT"];
NSLocale *local = [[NSLocale alloc]initWithLocaleIdentifier:@"en_US_POSIX"];
[formatter setLocale:local];//需要配置区域,不然会造成模拟器正常,真机日期为null的情况
[formatter setTimeZone:timeZone];
[formatter setDateFormat:@"dd MMM yyyy HH:mm:ss"];//设置源时间字符串的格式
NSDate *date = [formatter dateFromString:timeStr];//将源时间字符串转化为NSDate
NSString *timeString = [NSString stringWithFormat:@"%.0f", [date timeIntervalSince1970]];
dispatch_sync(dispatch_get_main_queue(), ^{
realTime(timeString,date);
});
}];
}
+ (BOOL)isTestEnvironment
{
return [CNLiveUserManager manager].isTestEnvironment;
}
@end