// // SocialShareManager.m // YuMi // // Created by P on 2025/3/18. // #import "SocialShareManager.h" #import "Api.h" @implementation ShareItmeInfo @end @interface SocialShareManager() @property (strong, nonatomic) NSString *scheme; @property (strong, nonatomic) NSString *host; @property (strong, nonatomic) NSMutableDictionary *queryParams; @property (nonatomic, strong) ShareItmeInfo *shareItem; @end @implementation SocialShareManager + (instancetype)sharedManager { static SocialShareManager *_sharedManager = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ _sharedManager = [[self alloc] init]; }); return _sharedManager; } - (void)handleURL:(NSURL *)url { // 存储 URL 信息 self.scheme = url.scheme; self.host = url.host; self.queryParams = [NSMutableDictionary dictionary]; // 解析 query 参数 if (url.query) { NSArray *queryComponents = [url.query componentsSeparatedByString:@"&"]; for (NSString *component in queryComponents) { NSArray *pair = [component componentsSeparatedByString:@"="]; if (pair.count == 2) { NSString *key = [pair[0] stringByRemovingPercentEncoding]; NSString *value = [pair[1] stringByRemovingPercentEncoding]; self.queryParams[key] = value; } } } // 获取具体的参数值 NSString *code = self.queryParams[@"code"]; if (![NSString isEmpty:code]) { [self loadShareItem:code]; } // if (self.tabBarViewController) { // // 已登录,调用 API // NSString *code = self.queryParams[@"code"]; // if (code) { // [self callAPIWithCode:code]; // } // } else { // // 未登录,不做操作 // NSLog(@"User not logged in, do nothing"); // } } - (void)checkSocialShareItem { if (self.shareItem) { // 添加类型安全检查 if (![self.shareItem isKindOfClass:[ShareItmeInfo class]]) { NSLog(@"警告:shareItem不是ShareItmeInfo类型,而是%@类型", NSStringFromClass([self.shareItem class])); return; } if (self.handleJumpToRoom) { self.handleJumpToRoom(self.shareItem); [self cleanCache]; } } } - (void)reset { self.shareItem = nil; self.handleJumpToRoom = nil; } - (void)loadShareItem:(NSString *)shareCode { @kWeakify(self); [Api shareGetInfo:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) { @kStrongify(self); if (code == 200) { // 添加类型安全检查 id jsonData = data.data; if ([jsonData isKindOfClass:[NSDictionary class]]) { self.shareItem = [ShareItmeInfo modelWithJSON:jsonData]; // 确保shareItem是正确的类型 if (![self.shareItem isKindOfClass:[ShareItmeInfo class]]) { NSLog(@"警告:解析后的shareItem不是ShareItmeInfo类型,而是%@类型", NSStringFromClass([self.shareItem class])); return; } if (self.handleJumpToRoom) { self.handleJumpToRoom(self.shareItem); [self cleanCache]; } } else { NSLog(@"警告:API返回的data.data不是字典类型,而是%@类型", NSStringFromClass([jsonData class])); } } } code:shareCode]; } - (void)cleanCache { self.shareItem = nil; } @end