initial commit
This commit is contained in:
151
Example/SellyCloudSDK/Controllers/AVUserManager.m
Normal file
151
Example/SellyCloudSDK/Controllers/AVUserManager.m
Normal 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];
|
||||
|
||||
// 可以根据需要保存服务器返回的其他信息(如 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
|
||||
Reference in New Issue
Block a user