initial commit

This commit is contained in:
Caleb
2026-03-01 15:59:27 +08:00
commit a9e97d56cb
1426 changed files with 172367 additions and 0 deletions

View File

@@ -0,0 +1,151 @@
//
// AVUserManager.m
// AVDemo
//
#import "AVUserManager.h"
#import <AFNetworking/AFNetworking.h>
static NSString * const kUserLoggedInKey = @"AVUserLoggedIn";
static NSString * const kUserUsernameKey = @"AVUserUsername";
@interface AVUserManager ()
@property (nonatomic, strong) AFHTTPSessionManager *sessionManager;
@end
@implementation AVUserManager
+ (instancetype)sharedManager {
static AVUserManager *instance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[self alloc] init];
});
return instance;
}
- (instancetype)init {
self = [super init];
if (self) {
// UserDefaults
_isLoggedIn = [[NSUserDefaults standardUserDefaults] boolForKey:kUserLoggedInKey];
_currentUsername = [[NSUserDefaults standardUserDefaults] stringForKey:kUserUsernameKey];
//
self.sessionManager = [AFHTTPSessionManager manager];
self.sessionManager.responseSerializer = [AFJSONResponseSerializer serializer];
self.sessionManager.requestSerializer = [AFJSONRequestSerializer serializer];
self.sessionManager.requestSerializer.timeoutInterval = 10;
}
return self;
}
- (void)loginWithUsername:(NSString *)username
password:(NSString *)password
completion:(void (^)(BOOL success, NSString * _Nullable errorMessage))completion {
//
if (username.length == 0) {
if (completion) {
completion(NO, @"用户名不能为空");
}
return;
}
if (password.length == 0) {
if (completion) {
completion(NO, @"密码不能为空");
}
return;
}
// API
NSString *loginURL = @"http://rtmp.sellycloud.io:8089/live/sdk/demo/login";
//
NSDictionary *parameters = @{
@"username": username,
@"password": password
};
NSLog(@"🚀 开始登录请求: %@", username);
// POST
[self.sessionManager POST:loginURL parameters:parameters headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
//
NSLog(@"✅ 登录成功,服务器响应: %@", responseObject);
//
[self saveLoginStateWithUsername:username];
// tokenuserId
//
// if (responseObject[@"token"]) {
// [[NSUserDefaults standardUserDefaults] setObject:responseObject[@"token"] forKey:@"AVUserToken"];
// }
//
if (completion) {
completion(YES, nil);
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
//
NSLog(@"❌ 登录失败: %@", error.localizedDescription);
NSString *errorMessage = @"登录失败,请检查用户名和密码";
// HTTP
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)task.response;
if (httpResponse) {
NSLog(@"❌ HTTP 状态码: %ld", (long)httpResponse.statusCode);
}
//
if (error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey]) {
NSData *errorData = error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey];
NSDictionary *errorDict = [NSJSONSerialization JSONObjectWithData:errorData options:0 error:nil];
NSLog(@"❌ 服务器错误响应: %@", errorDict);
//
if (errorDict[@"message"]) {
errorMessage = errorDict[@"message"];
} else if (errorDict[@"error"]) {
errorMessage = errorDict[@"error"];
} else if (errorDict[@"msg"]) {
errorMessage = errorDict[@"msg"];
}
} else {
//
errorMessage = [NSString stringWithFormat:@"网络请求失败: %@", error.localizedDescription];
}
//
if (completion) {
completion(NO, errorMessage);
}
}];
}
- (void)saveLoginStateWithUsername:(NSString *)username {
_isLoggedIn = YES;
_currentUsername = username;
//
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:kUserLoggedInKey];
[[NSUserDefaults standardUserDefaults] setObject:username forKey:kUserUsernameKey];
[[NSUserDefaults standardUserDefaults] synchronize];
}
- (void)logout {
_isLoggedIn = NO;
//
[[NSUserDefaults standardUserDefaults] setBool:NO forKey:kUserLoggedInKey];
[[NSUserDefaults standardUserDefaults] synchronize];
NSLog(@"✅ 用户已登出");
}
@end