This commit is contained in:
2025-12-03 13:31:02 +08:00
parent 27aa723e7d
commit b87998549c
11 changed files with 104 additions and 12 deletions

View File

@@ -18,6 +18,8 @@
// 兼容旧命名(如有使用 API_APPLE_LOGIN 的位置,映射到统一命名)
#define API_APPLE_LOGIN @"/user/appleLogin" // Apple 登录
#define API_LOGOUT @"/user/logout" // 退出登录
// 应用配置
#ifndef KB_API_APP_CONFIG

View File

@@ -14,6 +14,10 @@
#import <Foundation/Foundation.h>
#import "KBAPI.h" // 引入 SUCCESS_CODE/ERROR_CODE 等基础定义
#define KBMessage @"message"
#define KBCode @"code"
#define KBData @"data"
/// 服务端业务状态码(按项目实际调整)
typedef NS_ENUM(NSInteger, KBBizCode) {
/// 业务成功SUCCESS(0, "ok")
@@ -93,7 +97,7 @@ static inline NSInteger KBBizCodeFromJSONObject(id obj) {
static inline NSString *KBBizMessageFromJSONObject(id obj) {
if (![obj isKindOfClass:NSDictionary.class]) return nil;
NSDictionary *d = (NSDictionary *)obj;
NSString *msg = d[@"message"] ?: d[@"msg"] ?: d[@"error"];
NSString *msg = d[KBMessage] ?: d[@"msg"] ?: d[@"error"];
if (![msg isKindOfClass:NSString.class]) return nil;
return msg;
}

View File

@@ -98,6 +98,7 @@
04890A042EC0BBBB00FABA60 /* KBCategoryTitleImageCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 04890A012EC0BBBB00FABA60 /* KBCategoryTitleImageCell.m */; };
04890A052EC0BBBB00FABA60 /* KBCategoryTitleImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 04890A032EC0BBBB00FABA60 /* KBCategoryTitleImageView.m */; };
04890B122EC2F00000FABA60 /* KBMyHeaderView.m in Sources */ = {isa = PBXBuildFile; fileRef = 04890B112EC2F00000FABA60 /* KBMyHeaderView.m */; };
0498BD622EDFFC12006CC1D5 /* KBMyVM.m in Sources */ = {isa = PBXBuildFile; fileRef = 0498BD612EDFFC12006CC1D5 /* KBMyVM.m */; };
049FB20B2EC1C13800FAB05D /* KBSkinBottomActionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 049FB20A2EC1C13800FAB05D /* KBSkinBottomActionView.m */; };
049FB20E2EC1CD2800FAB05D /* KBAlert.m in Sources */ = {isa = PBXBuildFile; fileRef = 049FB20D2EC1CD2800FAB05D /* KBAlert.m */; };
049FB2112EC1F72F00FAB05D /* KBMyListCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 049FB2102EC1F72F00FAB05D /* KBMyListCell.m */; };
@@ -364,6 +365,8 @@
04890B102EC2F00000FABA60 /* KBMyHeaderView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBMyHeaderView.h; sourceTree = "<group>"; };
04890B112EC2F00000FABA60 /* KBMyHeaderView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBMyHeaderView.m; sourceTree = "<group>"; };
0498BD5E2EDF2157006CC1D5 /* KBBizCode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBBizCode.h; sourceTree = "<group>"; };
0498BD602EDFFC12006CC1D5 /* KBMyVM.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBMyVM.h; sourceTree = "<group>"; };
0498BD612EDFFC12006CC1D5 /* KBMyVM.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBMyVM.m; sourceTree = "<group>"; };
049FB2092EC1C13800FAB05D /* KBSkinBottomActionView.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBSkinBottomActionView.h; sourceTree = "<group>"; };
049FB20A2EC1C13800FAB05D /* KBSkinBottomActionView.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = KBSkinBottomActionView.m; sourceTree = "<group>"; };
049FB20C2EC1CD2800FAB05D /* KBAlert.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = KBAlert.h; sourceTree = "<group>"; };
@@ -854,6 +857,15 @@
path = UICollectionViewLeftAlignedLayout;
sourceTree = "<group>";
};
0498BD5F2EDFFBFC006CC1D5 /* VM */ = {
isa = PBXGroup;
children = (
0498BD602EDFFC12006CC1D5 /* KBMyVM.h */,
0498BD612EDFFC12006CC1D5 /* KBMyVM.m */,
);
path = VM;
sourceTree = "<group>";
};
049FB2162EC20A6600FAB05D /* BMLongPressDragCellCollectionView */ = {
isa = PBXGroup;
children = (
@@ -1135,6 +1147,7 @@
04FC95BE2EB1E3B1007BD342 /* Me */ = {
isa = PBXGroup;
children = (
0498BD5F2EDFFBFC006CC1D5 /* VM */,
04FC95BB2EB1E3B1007BD342 /* M */,
04FC95BC2EB1E3B1007BD342 /* V */,
04FC95BD2EB1E3B1007BD342 /* VC */,
@@ -1742,6 +1755,7 @@
0477BE042EBC83130055D639 /* HomeMainVC.m in Sources */,
0477BDFD2EBC6A170055D639 /* HomeHotVC.m in Sources */,
04122FAA2EC73C0100EF7AB3 /* KBVipPayHeaderView.m in Sources */,
0498BD622EDFFC12006CC1D5 /* KBMyVM.m in Sources */,
049FB2432EC4BBB700FAB05D /* KBLoginPopView.m in Sources */,
048908CC2EBE373500FABA60 /* KBSearchBarView.m in Sources */,
04122F872EC6198C00EF7AB3 /* WMDragView.m in Sources */,

View File

@@ -10,6 +10,6 @@
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (nonatomic, strong) UIWindow *window;
- (void)setupRootVC;
@end

View File

@@ -92,20 +92,25 @@
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
BaseTabBarController *vc = [[BaseTabBarController alloc] init];
self.window.rootViewController = vc;
// token TabBar
BOOL loggedIn = [[KBUserSessionManager shared] isLoggedIn];
UIViewController *rootVC = nil;
if (loggedIn) {
rootVC = [[BaseTabBarController alloc] init];
} else {
rootVC = [[KBLoginVC alloc] init];
}
self.window.rootViewController = rootVC;
}
///
- (void)setupSexSelectRootVC {
KBLoginVC *vc = [[KBLoginVC alloc] init];
KBSexSelVC *vc = [[KBSexSelVC alloc] init];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
self.window.rootViewController = vc;
return;
KBSexSelVC *sexVC = [KBSexSelVC new];
__weak typeof(self) weakSelf = self;
sexVC.didFinishSelectBlock = ^{

View File

@@ -70,7 +70,7 @@ typedef NS_ENUM(NSInteger, KBSexOption) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
[[KBNetworkManager shared] GET:KB_API_APP_CONFIG parameters:nil headers:nil completion:^(id _Nullable jsonOrData, NSURLResponse * _Nullable response, NSError * _Nullable error) {
[[KBNetworkManager shared] GET:@"https://www.apple.com.cn/" parameters:nil headers:nil completion:^(id _Nullable jsonOrData, NSURLResponse * _Nullable response, NSError * _Nullable error) {
NSLog(@"====");
}];
});

View File

@@ -8,6 +8,7 @@
#import "KBLoginVC.h"
#import <AuthenticationServices/AuthenticationServices.h>
#import "KBLoginVM.h"
#import "AppDelegate.h"
@interface KBLoginVC () <UITextViewDelegate>
@@ -155,11 +156,18 @@
#pragma mark - Actions
- (void)onTapAppleLogin {
// Apple Sign-In
KBLOG(@"onTapAppleLogin");
[[KBLoginVM shared] signInWithAppleFromViewController:KB_CURRENT_NAV completion:^(BOOL success, NSError * _Nullable error) {
if (success) {
[KBHUD showInfo:KBLocalized(@"Signed in successfully")];
// TabBar
dispatch_async(dispatch_get_main_queue(), ^{
id<UIApplicationDelegate> appDelegate = UIApplication.sharedApplication.delegate;
if ([appDelegate respondsToSelector:@selector(setupRootVC)]) {
AppDelegate *delegate = (AppDelegate *)appDelegate;
[delegate setupRootVC];
}
});
} else {
NSString *msg = error.localizedDescription ?: KBLocalized(@"Sign-in failed");
[KBHUD showInfo:msg];

View File

@@ -17,7 +17,7 @@
#import "LSTPopView.h"
#import "KBChangeNicknamePopView.h"
#import "KBGenderPickerPopView.h"
#import "KBMyVM.h"
@interface KBPersonInfoVC () <UITableViewDelegate, UITableViewDataSource, PHPickerViewControllerDelegate, UINavigationControllerDelegate, UIImagePickerControllerDelegate>
//
@@ -37,6 +37,8 @@
// JPEG
@property (nonatomic, strong) NSData *avatarJPEGData;
@property (nonatomic, strong) KBMyVM *myVM;
@end
@implementation KBPersonInfoVC
@@ -185,7 +187,7 @@
- (void)onTapAvatarEdit { [self presentImagePicker]; }
- (void)onTapLogout {
[[KBUserSessionManager shared] logout];
[self.myVM logout];
}
#pragma mark - Lazy UI
@@ -366,4 +368,11 @@
return result;
}
- (KBMyVM *)myVM{
if (!_myVM) {
_myVM = [[KBMyVM alloc] init];
}
return _myVM;
}
@end

View File

@@ -0,0 +1,16 @@
//
// KBMyVM.h
// keyBoard
//
// Created by Mac on 2025/12/3.
//
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface KBMyVM : NSObject
- (void)logout;
@end
NS_ASSUME_NONNULL_END

View File

@@ -0,0 +1,33 @@
//
// KBMyVM.m
// keyBoard
//
// Created by Mac on 2025/12/3.
//
#import "KBMyVM.h"
#import "AppDelegate.h"
@implementation KBMyVM
- (void)logout{
[KBHUD show];
[[KBNetworkManager shared] GET:API_LOGOUT parameters:nil headers:nil completion:^(NSDictionary * jsonOrData, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (error != nil) {
return;
}
NSString *message = jsonOrData[KBMessage];
// if (code == KBBizCodeSuccess) {
[KBHUD showSuccess:message];
[[KBUserSessionManager shared] logout];
// TabBar
dispatch_async(dispatch_get_main_queue(), ^{
id<UIApplicationDelegate> appDelegate = UIApplication.sharedApplication.delegate;
if ([appDelegate respondsToSelector:@selector(setupRootVC)]) {
AppDelegate *delegate = (AppDelegate *)appDelegate;
[delegate setupRootVC];
}
});
// }
}];
}
@end

View File

@@ -32,6 +32,7 @@
/// 项目
#import "KBBizCode.h"
#import "KBNetworkManager.h"
#import "UIView+KBShadow.h"
#import "UIImage+KBColor.h"