CNLiveUserSystemTools.m 5.32 KB
//
//  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"
#import "NSString+Keychain.h"

#define testStatUrl @"http://app.sta.cnlive.com/app.jpg"
#define formalStatUrl @"http://app.sta.cnlive.com/app.jpg"

@implementation CNLiveUserSystemTools

#pragma mark - uuid

+ (nullable NSString *)uidForStat:(NSString *)dateStr{
    
    NSString *uid = @"";
    
    NSUserDefaults *defauts = [NSUserDefaults standardUserDefaults];
    NSString *userKey = @"kCNLiveUserDefaultsUIDKey";
//    [NSString xw_deletes];
    if ([defauts objectForKey:userKey]) {
        //老用户升级新版本后,没删App
        uid = [[defauts objectForKey:userKey] copy];
        NSArray <NSString *>*arr = [uid componentsSeparatedByString:@"_"];
        NSString *uuid = arr[0];
        NSString *ts = arr[1];
        [NSString xw_saveUUID:uuid TS:ts];
        return uid;
    }else if (XW_UUID_Exist){//老用户,删了App
        uid = XW_UUID_Timestamp(dateStr);
        [defauts setObject:uid forKey:userKey];
        [defauts synchronize];
        return uid;
    }
    else {
        uid =  XW_UUID_Timestamp(dateStr);
        [defauts setObject:uid forKey:userKey];
        [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=%@&spid=&appid=%@&version=1005_%@&eventid=1000&uri=%@&sid=%@&plat=i_%@&objid=_",baseUrl,kSVer, [self uidForStat:realTime], stamp,[CNLiveUserManager manager].fromID?[CNLiveUserManager manager].fromID: @"apple", [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
{
    NSInteger time = [[NSDate date] timeIntervalSince1970];
    NSString *timeString = [NSString stringWithFormat:@"%ld", (long)time];
    realTime(timeString,[NSDate date]);
}

+ (BOOL)isTestEnvironment
{
    return [CNLiveUserManager manager].isTestEnvironment;
}
@end