// // ViewController.m // xplan-ios // // Created by zu on 2021/8/31. // #import ///Third #import #import #import ///Tool #import "XPMacro.h" #import "ThemeColor.h" #import "UIImage+Utils.h" #import "XCHUDTool.h" #import "AccountInfoStorage.h" ///Model #import "AccountModel.h" ///VC #import "TabbarViewController.h" #import "BaseViewController.h" #import "LoginViewController.h" #import "BaseNavigationController.h" #import "LoginBindPhoneViewController.h" #import "LoginFullInfoViewController.h" #import "XplanFBFlutterViewContainer.h" #import "XPMineViewController.h" #import "SessionListViewController.h" ///Present #import "MainPresenter.h" #import "MainProtocol.h" @interface TabbarViewController () @property (nonatomic, strong) MainPresenter *presenter; @end @implementation TabbarViewController - (void)viewDidLoad { [super viewDidLoad]; [self configTheme]; [self initTabs:NO]; [[NIMSDK sharedSDK].loginManager addDelegate:self]; [self.presenter juliandAdCallBackApi]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self.navigationController setNavigationBarHidden:YES animated:YES]; [self.presenter autoLogin]; [self.presenter checkTranscation]; } - (MainPresenter *)presenter { if (_presenter == nil) { _presenter = [[MainPresenter alloc] init]; [_presenter attatchView:self]; } return _presenter; } /** 登录成功(通过token且换取ticket后)。 1. 登录云信。 2. 获取用户信息。 3. 其实目前多余回调V层,可以在P层里自行做这个逻辑。 */ - (void)autoLoginSuccess { [self.presenter loginNIM]; [self.presenter getUserInfo]; } /// 获取用户信息后检查:1、是否绑定手机号;2、是否需要完善用户信息。 /// 该逻辑仅在刷新ticket后执行一次。 /// 当前服务端接口是有未完善信息的全局拦截的,在BaseMvpPresenter里会触发1415去完善用户信息。 - (void)getUserInfoSuccess:(UserInfoModel *)userInfo { ///TODO : 先去掉绑定手机号 因为苹果审核会用apple 登录 无法绑定手机号 可能导致流程无法进行 导致被拒 // if (!userInfo.isBindPhone) { // LoginBindPhoneViewController * bindPhoneVC = [[LoginBindPhoneViewController alloc] init]; // BaseNavigationController * nav = [[BaseNavigationController alloc] initWithRootViewController:bindPhoneVC]; // nav.modalPresentationStyle = UIModalPresentationFullScreen; // [self.navigationController presentViewController:nav animated:YES completion:nil]; // return; // } if (userInfo.nick == nil || userInfo.avatar == nil) { [self completeUserInfo]; return; } [self initTabs:YES]; } #pragma mark - BaseMvpProtocol - (void)tokenInvalid { LoginViewController *lvc = [[LoginViewController alloc] init]; BaseNavigationController * nav = [[BaseNavigationController alloc] initWithRootViewController:lvc]; nav.modalPresentationStyle = UIModalPresentationFullScreen; [self.navigationController presentViewController:nav animated:YES completion:nil]; } - (void)completeUserInfo { LoginFullInfoViewController * bindPhoneVC = [[LoginFullInfoViewController alloc] init]; BaseNavigationController * nav = [[BaseNavigationController alloc] initWithRootViewController:bindPhoneVC]; nav.modalPresentationStyle = UIModalPresentationFullScreen; [self.navigationController presentViewController:nav animated:YES completion:nil]; } #pragma mark - NIMLoginManagerDelegate - (void)onAutoLoginFailed:(NSError *)error { // 如果非上次登录设备 autoLogin 会返回 417 if (error.code == 417) { @weakify(self); AccountModel* accountModel = [AccountInfoStorage instance].getCurrentAccountInfo; [[NIMSDK sharedSDK].loginManager login:accountModel.uid token:accountModel.netEaseToken completion:^(NSError * _Nullable error) { if (error) { @strongify(self); [self.presenter logout]; } }]; return; } [self.presenter logout]; } - (void)onKickout:(NIMLoginKickoutResult *)result { [self.presenter logout]; } - (void)configTheme { [[UITabBar appearance] setBackgroundImage:[UIImage imageWithColor:[ThemeColor appCellBackgroundColor] size:CGSizeMake(KScreenWidth, kTabBarHeight)]]; [[UITabBar appearance] setShadowImage:[[UIImage alloc]init]]; if (@available(iOS 10.0, *)) { [[UITabBar appearance] setUnselectedItemTintColor:[ThemeColor tabbarNormalColor]]; } } - (void)initTabs:(BOOL)logined { NSArray *normalImageNames = @[@"tab_game_normal", @"tab_message_normal", @"tab_mine_normal"]; NSArray *selectImageNames = @[@"tab_game_selected", @"tab_message_selected", @"tab_mine_selected"]; NSArray *tabLabel = @[@"赛事", @"消息", @"我的"]; UIViewController *game; UIViewController *msg; UIViewController *me; if (logined) { XplanFBFlutterViewContainer *fvcGame = XplanFBFlutterViewContainer.new; #ifdef DEBUG [fvcGame setName:@"debug" uniqueId:nil params:nil]; #else [fvcGame setName:@"/" uniqueId:nil params:nil]; #endif game = fvcGame; msg = [[SessionListViewController alloc] init]; me = [[XPMineViewController alloc] init]; } else { game = [[BaseViewController alloc]init]; msg = [[SessionListViewController alloc]init]; me = [[BaseViewController alloc]init]; } [self createTabBarItem:game title:tabLabel[0] image:normalImageNames[0] selectedImage:selectImageNames[0]]; [self createTabBarItem:msg title:tabLabel[1] image:normalImageNames[1] selectedImage:selectImageNames[1]]; [self createTabBarItem:me title:tabLabel[2] image:normalImageNames[2] selectedImage:selectImageNames[2]]; self.viewControllers = @[game, msg, me]; self.selectedIndex = 0; } - (BaseNavigationController *)createTabBarItem:(UIViewController *)itemVc title:(NSString *)title image:(NSString *)image selectedImage:(NSString *)selectedImage{ itemVc.title = title; itemVc.tabBarItem.image = [[UIImage imageNamed:image] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; itemVc.tabBarItem.selectedImage = [[UIImage imageNamed:selectedImage] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]; [itemVc.tabBarItem setTitleTextAttributes:@{NSForegroundColorAttributeName:[ThemeColor appMainColor]} forState:UIControlStateSelected]; [itemVc.tabBarItem setTitleTextAttributes:@{NSForegroundColorAttributeName:[ThemeColor tabbarNormalColor]} forState:UIControlStateNormal]; BaseNavigationController *nav = [[BaseNavigationController alloc] initWithRootViewController:itemVc]; return nav; } - (void)showSuccessToast:(NSString *)msg { [XCHUDTool showSuccessWithMessage:msg]; } - (void)showErrorToast:(NSString *)msg { [XCHUDTool showErrorWithMessage:msg]; } - (void)showLoading { [XCHUDTool showLoading]; } - (void)hideHUD { [XCHUDTool hideHUD]; } @end