152 lines
5.0 KiB
Objective-C
152 lines
5.0 KiB
Objective-C
//
|
|
// 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];
|
|
|
|
// 可以根据需要保存服务器返回的其他信息(如 token、userId 等)
|
|
// 例如:
|
|
// 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
|