//
|
// Copyright © 2019 dahua. All rights reserved.
|
//
|
|
#import "LCApplicationDataManager.h"
|
|
|
#define APPID @"GLOBAL_CONFIG_APPLICATION_APPID"
|
#define OVERSEAAPPID @"GLOBAL_CONFIG_APPLICATION_OVERSEA_APPID"
|
#define APPSECRET @"GLOBAL_CONFIG_APPLICATION_APPSECRET"
|
#define OVERSEAAPPSECRET @"GLOBAL_CONFIG_APPLICATION_OVERSEA_APPSECRET"
|
#define HOSTAPI @"GLOBAL_CONFIG_APPLICATION_HOSTAPI"
|
#define OVERSEAHOSTAPI @"GLOBAL_CONFIG_APPLICATION_OVERSEA_HOSTAPI"
|
#define MANAGERTOKEN @"GLOBAL_AUTH_MANAGER_TOKEN"
|
#define USERTOKEN @"GLOBAL_AUTH_USER_TOKEN"
|
#define EXPIRETIME @"GLOBAL_AUTH_EXPIRE_TIME"
|
#define CURRENTMODE @"GLOBAL_JOINT_CURRENT_MODE"
|
|
///默认请求基地址
|
//#define DEFAULTHOSTAPICHN @"https://funcopenapi.lechange.cn:443/openapi" //中国大陆(测试)
|
//#define DEFAULTHOSTAPIOVS @"https://openapifunc.easy4ip.com:443/openapi" //海外(测试)
|
#define DEFAULTHOSTAPICHN @"https://openapi.lechange.cn:443" //中国大陆(正式)
|
#define DEFAULTHOSTAPIOVS @"https://openapi.easy4ip.com:443" //海外(正式)
|
static NSMutableDictionary *serialCachePool;
|
//设备信息缓存
|
static NSMutableDictionary *deviceInfosPool;
|
|
@implementation LCApplicationDataManager
|
|
+ (NSString *)appId {
|
return (NSString *)[[NSUserDefaults standardUserDefaults] objectForKey:[LCApplicationDataManager isChinaMainland]?APPID:OVERSEAAPPID];
|
}
|
|
+ (NSString *)appSecret {
|
return (NSString *)[[NSUserDefaults standardUserDefaults] objectForKey:[LCApplicationDataManager isChinaMainland]?APPSECRET:OVERSEAAPPSECRET];
|
}
|
|
+ (NSString *)hostApi {
|
//若没有自定义地址直接返回默认地址
|
NSString *hostApi = (NSString *)[[NSUserDefaults standardUserDefaults] objectForKey:[LCApplicationDataManager isChinaMainland]?HOSTAPI:OVERSEAHOSTAPI];
|
hostApi = ((hostApi == nil || [hostApi isNull]) ? ([LCApplicationDataManager isChinaMainland] ? DEFAULTHOSTAPICHN : DEFAULTHOSTAPIOVS) : hostApi);
|
return hostApi;
|
}
|
|
+ (void)setAppIdWith:(NSString *)appId {
|
[[NSUserDefaults standardUserDefaults] setObject:appId forKey:[LCApplicationDataManager isChinaMainland]?APPID:OVERSEAAPPID];
|
[[NSUserDefaults standardUserDefaults] synchronize];
|
}
|
|
+ (void)setAppSecretWith:(NSString *)appSecret {
|
[[NSUserDefaults standardUserDefaults] setObject:appSecret forKey:[LCApplicationDataManager isChinaMainland]?APPSECRET:OVERSEAAPPSECRET];
|
[[NSUserDefaults standardUserDefaults] synchronize];
|
}
|
|
+ (void)setHostApiWith:(NSString *)api {
|
[[NSUserDefaults standardUserDefaults] setObject:api forKey:[LCApplicationDataManager isChinaMainland]?HOSTAPI:OVERSEAHOSTAPI];
|
[[NSUserDefaults standardUserDefaults] synchronize];
|
}
|
|
///保存管理员模式Token
|
+ (void)setManagerToken:(NSString *)token {
|
[[NSUserDefaults standardUserDefaults] setObject:token forKey:MANAGERTOKEN];
|
[[NSUserDefaults standardUserDefaults] removeObjectForKey:USERTOKEN];
|
[[NSUserDefaults standardUserDefaults] synchronize];
|
}
|
|
///保存用户模式Token
|
+ (void)setUserToken:(NSString *)token {
|
[[NSUserDefaults standardUserDefaults] setObject:token forKey:USERTOKEN];
|
[[NSUserDefaults standardUserDefaults] removeObjectForKey:MANAGERTOKEN];
|
[[NSUserDefaults standardUserDefaults] synchronize];
|
}
|
|
///保存Token过期时间
|
+ (void)setExpireTime:(NSInteger)second {
|
NSDate *date = [NSDate dateWithTimeIntervalSince1970:second];
|
[[NSUserDefaults standardUserDefaults] setObject:date forKey:EXPIRETIME];
|
[[NSUserDefaults standardUserDefaults] synchronize];
|
}
|
|
///获取Token过期时间
|
+ (BOOL)isVaildToken {
|
NSDate *date = [[NSUserDefaults standardUserDefaults] objectForKey:EXPIRETIME];
|
NSInteger now = [date timeIntervalSinceNow];
|
if (now > 300) {
|
//如果五分钟内不过期则认为是有效的
|
return YES;
|
}
|
return NO;
|
}
|
|
///获取当前Token(自动判断当前用户类型)
|
+ (NSString *)token {
|
NSString *managerToken = [[NSUserDefaults standardUserDefaults] objectForKey:MANAGERTOKEN];
|
NSString *userToken = [[NSUserDefaults standardUserDefaults] objectForKey:USERTOKEN];
|
return managerToken ? managerToken : userToken;
|
}
|
|
+ (NSString *)SDKHost {
|
|
NSString *host = [NSString stringWithFormat:@"%@/openapi",[LCApplicationDataManager hostApi]];
|
NSString *textStr = [[[[[[host componentsSeparatedByString:@"//"] objectAtIndex:1] componentsSeparatedByString:@"/"] objectAtIndex:0] componentsSeparatedByString:@":"] objectAtIndex:0];
|
return textStr;
|
}
|
|
+ (NSInteger)SDKPort {
|
// (([a-zA-Z0-9\._-]+\.[a-zA-Z]{2,6})|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,4})?
|
|
NSString *host = [LCApplicationDataManager hostApi];
|
NSString *regex = @"(:[0-9]{1,4})";
|
NSRegularExpression *regular = [[NSRegularExpression alloc]initWithPattern:regex options:NSRegularExpressionDotMatchesLineSeparators error:nil];
|
NSArray *resultArray = [regular matchesInString:host options:0 range:NSMakeRange(0, host.length)];
|
if (resultArray.count == 0) {
|
return [host containsString:@"https"]?443:80;
|
}
|
NSTextCheckingResult *result = resultArray[0];
|
NSString *textStr = [[host substringWithRange:result.range] substringFromIndex:1];
|
return [textStr integerValue];
|
}
|
|
///当前是否管理员模式
|
+ (BOOL)isManagerMode {
|
NSString *managerToken = [[NSUserDefaults standardUserDefaults] objectForKey:MANAGERTOKEN];
|
return managerToken ? YES : NO;
|
}
|
|
///存储当前对接模式
|
+ (void)setCurrentMode:(LCJointModeType)type {
|
[[NSUserDefaults standardUserDefaults] setInteger:type forKey:CURRENTMODE];
|
[[NSUserDefaults standardUserDefaults] synchronize];
|
}
|
|
///是否对接国内版本
|
+ (BOOL)isChinaMainland {
|
LCJointModeType type = [[NSUserDefaults standardUserDefaults] integerForKey:CURRENTMODE];
|
return type == LCJointModeChinaMainland ? YES : NO;
|
}
|
|
//MARK: - Private Methods
|
|
#define kRandomLength 32 ///随机数位数
|
+ (NSString *)serial
|
{
|
//1.UUIDString
|
NSString *string = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
|
|
//2.时间戳
|
NSTimeInterval time = [[NSDate date] timeIntervalSince1970];
|
NSString *timeStr = [NSString stringWithFormat:@"%.0f", time];
|
|
//3.随机字符串kRandomLength位
|
static const NSString *kRandomAlphabet = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
NSMutableString *randomString = [NSMutableString stringWithCapacity:kRandomLength];
|
for (int i = 0; i < kRandomLength; i++) {
|
[randomString appendFormat:@"%C", [kRandomAlphabet characterAtIndex:arc4random_uniform((u_int32_t)[kRandomAlphabet length])]];
|
}
|
|
//==> UUIDString去掉最后一项,再拼接上"时间戳"-"随机字符串kRandomLength位"
|
NSMutableArray *array = [[NSMutableArray alloc] initWithArray:[string componentsSeparatedByString:@"-"]];
|
[array removeLastObject];
|
[array addObject:timeStr];
|
[array addObject:randomString];
|
NSString *serialStr = [array componentsJoinedByString:@"-"];
|
//保证5分钟内不重复逻辑,如果数据池中已存在该key则递归调用,否则检查数据池中大于5分钟的key并将其删除,然后将新key存入数据池
|
if ([serialCachePool objectForKey:serialStr]) {
|
return [LCApplicationDataManager serial];
|
}
|
NSRecursiveLock *lock = [[NSRecursiveLock alloc] init];
|
[lock lock];
|
for (NSString *key in serialCachePool) {
|
NSDate *date = (NSDate *)[serialCachePool objectForKey:key];
|
NSTimeInterval timeInterval = [date timeIntervalSinceNow];
|
timeInterval = -timeInterval;
|
if (timeInterval > 5) {
|
[serialCachePool removeObjectForKey:key];
|
}
|
}
|
[serialCachePool setObject:[NSDate new] forKey:serialStr];
|
[lock unlock];
|
return serialStr;
|
}
|
|
//获取当前时间戳
|
+ (NSString *)getCurrentTimeStamp {
|
return [NSString stringWithFormat:@"%.0f", [[NSDate new] timeIntervalSince1970]];
|
}
|
|
+ (NSMutableDictionary *)defaultPool {
|
if (!serialCachePool) {
|
static dispatch_once_t onceToken;
|
dispatch_once(&onceToken, ^{
|
serialCachePool = [NSMutableDictionary dictionary];
|
});
|
}
|
return serialCachePool;
|
}
|
|
+ (NSMutableDictionary *)defaultDeviceInfosPool {
|
if (!deviceInfosPool) {
|
static dispatch_once_t onceToken;
|
dispatch_once(&onceToken, ^{
|
deviceInfosPool = [NSMutableDictionary dictionary];
|
});
|
}
|
return deviceInfosPool;
|
}
|
|
@end
|