// // AppDelegate.m // MiMoLive // // Created by SuperC on 2023/10/7. // #import "AppDelegate.h" #import "MOLoginChooseVC.h" #import "IQKeyboardManager.h" #import "POLanguageVC.h" #import "MOFirstInfoSetVC.h" #import "MOTopUpVC.h" #import "MOMineEditInfoVC.h" #import "MOShowLivePagesVC.h" #import "MOVipDetailVC.h" #import "MOGradeCenterVC.h" #import "MOCreateLiveVC.h" #import "NSObject+MOLaunchImage.h" #import "MOShopBaseVC.h" #import "MOUserHomePageVC.h" #import "MOGetGiftView.h" #import "MOWebViewController.h" #import "MODiaWinVC.h" #import "MODrawOpenView.h" #import "MODrawOpenVC.h" #import "MOWameListVC.h" #import "MOFanClubListVC.h"//粉丝团 #import "MOBindingEmailVC.h"//绑定邮箱 #import "MOBingMobileVC.h"//绑定手机 #import "MOMobileDataModels.h" #import "MOSetPasswordSMS.h"//设置交易密码界面 #import "MOTopUpView.h"//半屏充值弹窗 #import "MOPackageViewController.h"//背包 #import "MOEasemobEvent.h" //#import #import #if !TARGET_IPHONE_SIMULATOR #import #endif #import "TencentCaptcha.h"//腾讯验证码 #import "TIMPush/TIMPush.h" #if DEBUG #import "MOLogFormatter.h" #import "DoraemonKit.h" #import "NEHTTPEye.h" #endif @interface AppDelegate () @property (nonatomic, assign) BOOL isFromBackground; @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. #if DEBUG [self setupLogger]; [self setupNetworkMonitor]; #endif //IQKeyboardManager [IQKeyboardManager sharedManager].shouldResignOnTouchOutside = YES; //APNs [self setAPNsWithApplication:application]; //Adjust [self setAdjustConfig]; //腾讯验证码 [self setTencentCaptcha]; //腾讯推送 [self toRegisterTencentPush]; [self parpareIAP];//内购 self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; self.window.backgroundColor = [UIColor whiteColor]; [MOEventDeliver notifyAppLaunchFinished]; NSString *token = [NSString stringWithFormat:@"%@",GetToken]; if (token != nil && ![token isEqualToString:@"(null)"]) { //登录过 [self mainPageAction]; [self showFirstLaunchImage]; self.isShowAdView = YES; // 检查应用程序是否通过推送通知启动 NSDictionary *remoteNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; if (remoteNotification) { [self handlePushNotification:remoteNotification]; } [MOEventDeliver notifyUserLogin]; } else { //没有登录过 [self loginPageAction]; } #if !TARGET_IPHONE_SIMULATOR [[FBSDKApplicationDelegate sharedInstance] application:application didFinishLaunchingWithOptions:launchOptions]; #endif #if DEBUG [self setupDoraemonKit]; #endif return YES; } - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray> * _Nullable))restorationHandler { if ([[userActivity activityType] isEqualToString:NSUserActivityTypeBrowsingWeb]) { NSURL *incomingURL = [userActivity webpageURL]; [self handleAdjustLink:incomingURL]; SendNotification(@"kNotification_adjustAgent")//如果app没被杀死,需要通知绑定 //#if kAPP_Environment == 2 // if (inviteCode.length > 0) { // dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ // [MBProgressHUD showInfoMessage:[NSString stringWithFormat:@"continueUserActivity code = %@", inviteCode]]; // }); // } //#endif } else { return NO; } return YES; } - (BOOL)adjustDeferredDeeplinkReceived:(NSURL *)deeplink { [self handleAdjustLink:deeplink]; return NO; } - (void)mainPageAction{ MOMainTabController *mainTabbar = [MOMainTabController sharedSingleton]; mainTabbar.isNormalOpen = YES; [mainTabbar toResetSetupTabbar]; self.window.rootViewController = mainTabbar; //MOFirstInfoSetVC //POLanguageVC // MOFirstInfoSetVC *vc = [[MOFirstInfoSetVC alloc] init]; // UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc]; // [nav.navigationBar setHidden:YES]; // self.window.rootViewController = nav; [self.window makeKeyAndVisible]; } - (void)loginPageAction{ MOLoginChooseVC *vc = [[MOLoginChooseVC alloc] init]; UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc]; [nav.navigationBar setHidden:YES]; self.window.rootViewController = nav; [self.window makeKeyAndVisible]; } //推送注册 - (void)setAPNsWithApplication:(UIApplication *)application{ [self setApsConfigWithApplication:application]; } - (void)setTencentCaptcha{ [TencentCaptcha setupWithConfigurationHandler:^(TencentCaptchaConfiguration * _Nonnull config) { config.appID = kTentCaptchaAppIdStr; }]; } - (void)setAdjustConfig{ NSString *appToken = @"s78jipv8axhc"; #if kAPP_Environment == 1 NSString *environment = ADJEnvironmentProduction; ADJConfig *adjustConfig = [[ADJConfig alloc] initWithAppToken:appToken environment:environment]; adjustConfig.logLevel = ADJLogLevelSuppress; [adjustConfig enableCostDataInAttribution]; [adjustConfig setDelegate:self]; #elif kAPP_Environment == 2 NSString *environment = ADJEnvironmentSandbox; ADJConfig *adjustConfig = [[ADJConfig alloc] initWithAppToken:appToken environment:environment]; adjustConfig.logLevel = ADJLogLevelVerbose; [adjustConfig enableCostDataInAttribution]; [adjustConfig setDelegate:self]; #endif [Adjust initSdk:adjustConfig]; } - (void)adjustAttributionChanged:(ADJAttribution *)attribution{ } - (void)setApsConfigWithApplication:(UIApplication *)application{ if (NSClassFromString(@"UNUserNotificationCenter")) { //注册推送,用于 iOS 10 及以上版本。 UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; center.delegate = self; // 设置 UNUserNotificationCenter 的代理 [center requestAuthorizationWithOptions:UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert completionHandler:^(BOOL granted, NSError *error) { if (granted) { dispatch_async(dispatch_get_main_queue(), ^{ [application registerForRemoteNotifications]; }); } }]; return; } if([application respondsToSelector:@selector(registerUserNotificationSettings:)]) { //iOS 8 至 iOS 10 推送样式设置。 UIUserNotificationType notificationTypes = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert; UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:notificationTypes categories:nil]; [application registerUserNotificationSettings:settings]; } if ([application respondsToSelector:@selector(registerForRemoteNotifications)]) { //注册推送,用于 iOS 8 及以上版本。 [application registerForRemoteNotifications]; } else { //注册推送,用于 iOS 8 之前版本。 UIRemoteNotificationType notificationTypes = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert; [[UIApplication sharedApplication] registerForRemoteNotificationTypes:notificationTypes]; } MOLogV(@"注册完毕"); } // 将得到的deviceToken传给SDK - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { // 异步方法 [Adjust setPushToken:deviceToken]; // dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // EMError *error = [[EMClient sharedClient] bindDeviceToken:deviceToken]; // MOLogV(@"deviceToken 回调完毕"); // }); } // 注册deviceToken失败 - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{ MOLogV(@"注册deviceToken失败 error -- %@",error); } // 当应用在前台时收到通知 - (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler { // 处理通知内容 NSDictionary *userInfo = notification.request.content.userInfo; MOLogV(@"Foreground Notification received: %@", userInfo); // [[EMLocalNotificationManager sharedManager] userNotificationCenter:center willPresentNotification:notification withCompletionHandler:completionHandler]; } - (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)(void))completionHandler { // [[EMLocalNotificationManager sharedManager] userNotificationCenter:center didReceiveNotificationResponse:response withCompletionHandler:completionHandler]; UNNotificationRequest *request = response.notification.request; UNNotificationContent *content = request.content; NSDictionary *userInfo = content.userInfo; UIApplicationState state = [[UIApplication sharedApplication] applicationState]; if (state == UIApplicationStateInactive){ } completionHandler(); } // 处理推送通知数据并跳转到指定界面 - (void)handlePushNotification:(NSDictionary *)userInfo { // 解析推送通知数据 NSString *targetViewController = userInfo[@"targetViewController"]; NSString *additionalData = userInfo[@"additionalData"]; } - (void)emDidRecivePushSilentMessage:(NSDictionary *)messageDic{ //透传消息 MOLogV(@"emDidRecivePushSilentMessage : %@",messageDic); kMainThreadBlock(^{ MOEasemobEvent *baseModel = [MOEasemobEvent modelWithDictionary:messageDic]; //每日任务 if([baseModel.event isEqualToString:@"task.dialog"]){ TaskPublishEvent *publishInfo = [TaskPublishEvent modelWithJSON:baseModel.value]; MOGetGiftView *view = [MOGetGiftView moGetGiftView]; view.viewModel = publishInfo; [view showGetGiftView]; } //钻石大赢家 else if ([baseModel.event isEqualToString:@"activity.big.winner"]){ UIViewController *currentVC = [MOTools currentViewController]; ActivityBigWinnerPublishEvent *diaWinObject = [ActivityBigWinnerPublishEvent modelWithJSON:baseModel.value]; MODrawOpenVC *vc = [[MODrawOpenVC alloc] init]; vc.viewModel = diaWinObject; UINavigationController *newNav = [[UINavigationController alloc] initWithRootViewController:vc]; newNav.modalPresentationStyle = UIModalPresentationOverFullScreen; [currentVC presentViewController:newNav animated:NO completion:nil]; } }) } - (void)toOpenTheSchemeUrlWith:(NSString *)schemeUrl{ if(schemeUrl.length == 0){ return; } NSURL *url = [NSURL URLWithString:schemeUrl]; if ([[UIApplication sharedApplication]respondsToSelector:@selector(openURL:options:completionHandler:)]) { [[UIApplication sharedApplication] openURL:url options:@{UIApplicationOpenURLOptionUniversalLinksOnly:@NO} completionHandler:^(BOOL success) {}]; } else { [[UIApplication sharedApplication] openURL:url]; } } - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { if ([[userInfo objectForKey:@"adjust_purpose"] isEqualToString:@"uninstall detection"]) { // No handling required for Adjust data payload completionHandler(UIBackgroundFetchResultNoData); } else { // Handle other types of push messages here // Pass the appropriate value to the completionHandler: // UIBackgroundFetchResultNewData, UIBackgroundFetchResultNoData, // or UIBackgroundFetchResultFailed completionHandler(UIBackgroundFetchResultNewData); } } - (void)handleAdjustLink:(NSURL *)link { NSString *inviteCode = [MOTools getValueWithKey:kAgentInviteCodeKey url:link]; [[MODataCache sharedYYCache] setObject:inviteCode forKey:kAgentInviteCode]; NSString *jumpRoomId = [MOTools getValueWithKey:kAgentJumpRoomIdKey url:link]; [[MODataCache sharedYYCache] setObject:jumpRoomId forKey:kAgentJumpRoomId]; //#if kAPP_Environment == 2 // if (jumpRoomId.length > 0) { // dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ // [MBProgressHUD showInfoMessage:[NSString stringWithFormat:@"jumpRoomId = %@", link]]; // }); // } //#endif } //MARK: - Scheme 跳转 - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options { MOLogV(@"从哪个app跳转而来 Bundle ID: %@", options[UIApplicationOpenURLOptionsSourceApplicationKey]); MOLogV(@"URL scheme:%@", [url scheme]);//mimo MOLogV(@"URL query:%@", [url query]); MOLogV(@"URL query:%@", [url path]); //live_boot if ([url.scheme isEqualToString:@"mimo"]){ NSString *urlString = url.absoluteString; NSString *roomId; if ([urlString rangeOfString:@"roomId="].location != NSNotFound) { roomId = [urlString componentsSeparatedByString:@"roomId="].lastObject; } NSString *userId; if ([urlString rangeOfString:@"userId="].location != NSNotFound) { userId = [urlString componentsSeparatedByString:@"userId="].lastObject; } if([urlString containsString:@"jump_native"]){ //跳转 if([urlString containsString:@"live_room"]){ if(roomId.length == 0){ return YES; } //直播间 MOMainTabController *mainTabbar = [MOMainTabController sharedSingleton]; if ([mainTabbar isInLiveRoom]) { return YES; } [MOShowAgoraKitManager shareManager].isFirstShow = YES; MOLiveList *model = [[MOLiveList alloc] init]; model.id = roomId; MOShowLivePagesVC *vc = [[MOShowLivePagesVC alloc] init]; vc.userType = MOShowLiveAudienceType; vc.roomList = @[model].mutableCopy; vc.focusIndex = 0; // UINavigationController *newNav = [[UINavigationController alloc] initWithRootViewController:vc]; // newNav.modalPresentationStyle = UIModalPresentationFullScreen; // [nav presentViewController:newNav animated:YES completion:nil]; vc.hidesBottomBarWhenPushed = YES; [mainTabbar.selectedViewController pushViewController:vc animated:YES]; } if([urlString containsString:@"recharge"]){ //充值 MOMainTabController *mainTabbar = [MOMainTabController sharedSingleton]; UINavigationController *nav = mainTabbar.selectedViewController; if (nav.presentedViewController) { if ([nav isKindOfClass:[UINavigationController class]]) { UINavigationController *presentingNavigationController = (UINavigationController *)nav.presentedViewController; MOTopUpVC *vc = [[MOTopUpVC alloc] init]; vc.hidesBottomBarWhenPushed = YES; [presentingNavigationController pushViewController:vc animated:YES]; } } else { MOTopUpVC *vc = [[MOTopUpVC alloc] init]; vc.hidesBottomBarWhenPushed = YES; [nav pushViewController:vc animated:YES]; } } if([urlString containsString:@"live_half_topup"]){//半屏充值弹窗 MOTopUpView *view = [MOTopUpView moTopUpView]; [view showTopUpView]; } if([urlString containsString:@"follow"]){ //关注 if(roomId.length == 0){ return YES; } MOMainTabController *mainTabbar = [MOMainTabController sharedSingleton]; UINavigationController *nav = mainTabbar.selectedViewController; if (nav.presentedViewController) { if ([nav isKindOfClass:[UINavigationController class]]) { UINavigationController *presentingNavigationController = (UINavigationController *)nav.presentedViewController; BOOL isHaveLive = NO; for (UIViewController *vc in presentingNavigationController.viewControllers) { if([vc isKindOfClass:[MOShowLivePagesVC class]]){ isHaveLive = YES; break; } } if(isHaveLive){ [MBProgressHUD showTipMessageInWindow:NSLocalString(@"mimo_joined_live_room_tip")]; return YES; } } } if ([nav isKindOfClass:[UINavigationController class]]) { BOOL isHaveLive = NO; for (UIViewController *vc in nav.viewControllers) { if([vc isKindOfClass:[MOShowLivePagesVC class]]){ isHaveLive = YES; break; } } if(isHaveLive){ [MBProgressHUD showTipMessageInWindow:NSLocalString(@"mimo_joined_live_room_tip")]; return YES; } } [MOShowAgoraKitManager shareManager].isFirstShow = YES; MOLiveList *model = [[MOLiveList alloc] init]; model.id = roomId; MOShowLivePagesVC *vc = [[MOShowLivePagesVC alloc] init]; vc.userType = MOShowLiveAudienceType; vc.roomList = @[model].mutableCopy; vc.focusIndex = 0; // UINavigationController *newNav = [[UINavigationController alloc] initWithRootViewController:vc]; // newNav.modalPresentationStyle = UIModalPresentationFullScreen; // [nav presentViewController:newNav animated:YES completion:nil]; vc.hidesBottomBarWhenPushed = YES; [nav pushViewController:vc animated:YES]; } if([urlString containsString:@"edit"]){ //编辑 MOMainTabController *mainTabbar = [MOMainTabController sharedSingleton]; UINavigationController *nav = mainTabbar.selectedViewController; if (nav.presentedViewController) { if ([nav isKindOfClass:[UINavigationController class]]) { UINavigationController *presentingNavigationController = (UINavigationController *)nav.presentedViewController; MOMineEditInfoVC *vc = [[MOMineEditInfoVC alloc] init]; vc.hidesBottomBarWhenPushed = YES; [presentingNavigationController pushViewController:vc animated:YES]; } } else { MOMineEditInfoVC *vc = [[MOMineEditInfoVC alloc] init]; vc.hidesBottomBarWhenPushed = YES; [nav pushViewController:vc animated:YES]; } } if([urlString containsString:@"live_boot"]){ //主播-开播 //直播间 MOMainTabController *mainTabbar = [MOMainTabController sharedSingleton]; UINavigationController *nav = mainTabbar.selectedViewController; if (nav.presentedViewController) { if ([nav isKindOfClass:[UINavigationController class]]) { UINavigationController *presentingNavigationController = (UINavigationController *)nav.presentedViewController; BOOL isHaveLive = NO; for (UIViewController *vc in presentingNavigationController.viewControllers) { if([vc isKindOfClass:[MOShowLivePagesVC class]]){ isHaveLive = YES; break; } } if(isHaveLive){ [MBProgressHUD showTipMessageInWindow:NSLocalString(@"mimo_joined_live_room_tip")]; return YES; } } } SendNotification(@"kNotification_OpenTheLiveRoom"); } if([urlString containsString:@"level"]){ //等级 MOMainTabController *mainTabbar = [MOMainTabController sharedSingleton]; UINavigationController *nav = mainTabbar.selectedViewController; if (nav.presentedViewController) { if ([nav isKindOfClass:[UINavigationController class]]) { UINavigationController *presentingNavigationController = (UINavigationController *)nav.presentedViewController; MOWebViewController *vc = [[MOWebViewController alloc] init]; NSString *urlStr = [NSString stringWithFormat:@"%@/#/userLevel",kNetPath_Web_Base]; vc.webUrl = [NSURL URLWithString:urlStr]; vc.hidesBottomBarWhenPushed = YES; [presentingNavigationController pushViewController:vc animated:YES]; } } else { MOWebViewController *vc = [[MOWebViewController alloc] init]; NSString *urlStr = [NSString stringWithFormat:@"%@/#/userLevel",kNetPath_Web_Base]; vc.webUrl = [NSURL URLWithString:urlStr]; vc.hidesBottomBarWhenPushed = YES; [nav pushViewController:vc animated:YES]; } } if([urlString containsString:@"vip"]){ //编辑 MOMainTabController *mainTabbar = [MOMainTabController sharedSingleton]; UINavigationController *nav = mainTabbar.selectedViewController; NSURLComponents *components = [NSURLComponents componentsWithString:urlString]; NSArray *queryItems = components.queryItems; NSInteger showType = 0; for (NSURLQueryItem *item in queryItems) { if ([item.name isEqualToString:@"showType"]) { showType = [item.value integerValue]; break; } } if (nav.presentedViewController) { if ([nav isKindOfClass:[UINavigationController class]]) { UINavigationController *presentingNavigationController = (UINavigationController *)nav.presentedViewController; MOVipDetailVC *vc = [[MOVipDetailVC alloc] init]; vc.showType = showType; vc.hidesBottomBarWhenPushed = YES; [presentingNavigationController pushViewController:vc animated:YES]; } } else { MOVipDetailVC *vc = [[MOVipDetailVC alloc] init]; vc.showType = showType; vc.hidesBottomBarWhenPushed = YES; [nav pushViewController:vc animated:YES]; } } if([urlString containsString:@"shop"]){ //编辑 MOMainTabController *mainTabbar = [MOMainTabController sharedSingleton]; UINavigationController *nav = mainTabbar.selectedViewController; if (nav.presentedViewController) { if ([nav isKindOfClass:[UINavigationController class]]) { UINavigationController *presentingNavigationController = (UINavigationController *)nav.presentedViewController; MOShopBaseVC *vc = [[MOShopBaseVC alloc] init]; vc.hidesBottomBarWhenPushed = YES; [presentingNavigationController pushViewController:vc animated:YES]; } } else { MOShopBaseVC *vc = [[MOShopBaseVC alloc] init]; vc.hidesBottomBarWhenPushed = YES; [nav pushViewController:vc animated:YES]; } } if([urlString containsString:@"homePage"]){ if(userId.length == 0){ return YES; } //个人主页 MOMainTabController *mainTabbar = [MOMainTabController sharedSingleton]; UINavigationController *nav = mainTabbar.selectedViewController; if (nav.presentedViewController) { if ([nav isKindOfClass:[UINavigationController class]]) { UINavigationController *presentingNavigationController = (UINavigationController *)nav.presentedViewController; MOUserHomePageVC *vc = [[MOUserHomePageVC alloc] init]; vc.userId = userId; vc.hidesBottomBarWhenPushed = YES; [presentingNavigationController pushViewController:vc animated:YES]; } } else{ MOUserHomePageVC *vc = [[MOUserHomePageVC alloc] init]; vc.userId = userId; vc.hidesBottomBarWhenPushed = YES; [nav pushViewController:vc animated:YES]; } } if([urlString containsString:@"fans_club"]){ //粉丝团 MOMainTabController *mainTabbar = [MOMainTabController sharedSingleton]; UINavigationController *nav = mainTabbar.selectedViewController; if (nav.presentedViewController) { if ([nav isKindOfClass:[UINavigationController class]]) { UINavigationController *presentingNavigationController = (UINavigationController *)nav.presentedViewController; MOFanClubListVC *vc = [[MOFanClubListVC alloc] init]; vc.hidesBottomBarWhenPushed = YES; [presentingNavigationController pushViewController:vc animated:YES]; } } else{ MOFanClubListVC *vc = [[MOFanClubListVC alloc] init]; vc.hidesBottomBarWhenPushed = YES; [nav pushViewController:vc animated:YES]; } } if([urlString containsString:@"webview"]){ NSString *webUrlStr; if ([urlString rangeOfString:@"url="].location != NSNotFound) { webUrlStr = [urlString componentsSeparatedByString:@"url="].lastObject; } NSString *decodedString = [webUrlStr stringByRemovingPercentEncoding]; BOOL isShowTitle = YES; if([decodedString containsString:@"FullScreen=1"]){ isShowTitle = NO; } MOWebViewController *vc = [[MOWebViewController alloc] init]; vc.webUrl = [NSURL URLWithString:decodedString]; vc.isShowTitle = isShowTitle; vc.hidesBottomBarWhenPushed = YES; UIViewController *currentVC = [MOTools currentViewController]; [currentVC.navigationController pushViewController:vc animated:YES]; } if([urlString containsString:[MOTextAESTools toGetHameList]]){ //中心 MOMainTabController *mainTabbar = [MOMainTabController sharedSingleton]; UINavigationController *nav = mainTabbar.selectedViewController; if (nav.presentedViewController) { if ([nav isKindOfClass:[UINavigationController class]]) { UINavigationController *presentingNavigationController = (UINavigationController *)nav.presentedViewController; MOWameListVC *vc = [[MOWameListVC alloc] init]; vc.hidesBottomBarWhenPushed = YES; [presentingNavigationController pushViewController:vc animated:YES]; } } else{ MOWameListVC *vc = [[MOWameListVC alloc] init]; vc.hidesBottomBarWhenPushed = YES; [nav pushViewController:vc animated:YES]; } } //钻石夺宝 if([urlString containsString:@"diamondWinner"]){ MODiaWinVC *vc = [[MODiaWinVC alloc] init]; UIViewController *currentVC = [MOTools currentViewController]; vc.hidesBottomBarWhenPushed = YES; [currentVC.navigationController pushViewController:vc animated:YES]; } //绑定邮箱 if([urlString containsString:@"bind_email"]){ UIViewController *currentVC = [MOTools currentViewController]; MOBindingEmailVC *vc = [[MOBindingEmailVC alloc] init]; vc.hidesBottomBarWhenPushed = YES; [currentVC.navigationController pushViewController:vc animated:YES]; } //绑定手机 if([urlString containsString:@"bind_phone_number"]){ UIViewController *currentVC = [MOTools currentViewController]; MOBingMobileVC *vc = [[MOBingMobileVC alloc] init]; vc.hidesBottomBarWhenPushed = YES; [currentVC.navigationController pushViewController:vc animated:YES]; } //设置密码2 - 手机 if([urlString containsString:@"set_password_phone_number"]){ [self toSetThePsw2With:1]; } //设置密码2 - 邮箱 if([urlString containsString:@"set_password_email"]){ [self toSetThePsw2With:2]; } //忘记密码2 - 邮箱 if([urlString containsString:@"forget_email"]){ [self toSetThePsw2With:4]; } //忘记密码2 - 手机号码 if([urlString containsString:@"forget_phone_number"]){ [self toSetThePsw2With:3]; } //修改密码 if([urlString containsString:@"change_password"]){ UIViewController *currentVC = [MOTools currentViewController]; MOSetPasswordSMS *vc = [[MOSetPasswordSMS alloc] init]; vc.vcType = MOChangePsw2EnterOldPsw; vc.hidesBottomBarWhenPushed = YES; [currentVC.navigationController pushViewController:vc animated:YES]; } //跳转wame列表 if([urlString containsString:@"wames"]){ UIViewController *currentVC = [MOTools currentViewController]; MOWameListVC *vc = [[MOWameListVC alloc] init]; vc.hidesBottomBarWhenPushed = YES; [currentVC.navigationController pushViewController:vc animated:YES]; } //跳转背包列表 if([urlString containsString:@"user_backpack"]){ UIViewController *currentVC = [MOTools currentViewController]; MOPackageViewController *vc = [[MOPackageViewController alloc] init]; vc.hidesBottomBarWhenPushed = YES; [currentVC.navigationController pushViewController:vc animated:YES]; } } } // 允许打开 return YES; } //1 为手机 2为邮箱 3手机找回 4邮箱找回 - (void)toSetThePsw2With:(NSInteger)type{ WEAKSELF [kHttpManager toGetTheUserSecurityInfoWithParams:nil andBlock:^(id _Nonnull data, NSError * _Nonnull error) { if(kCode_Success){ MOLogV(@"%@",[[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:data options:0 error:nil] encoding:NSUTF8StringEncoding]); MOSecurityData *baseData = [MOSecurityData modelObjectWithDictionary:data[@"data"]]; UIViewController *currentVC = [MOTools currentViewController]; MOSetPasswordSMS *vc = [[MOSetPasswordSMS alloc] init]; if(type == 1){ //手机 vc.vcType = MOEnterCodeSetPsw2Type; vc.code = baseData.mobileInfo.code; vc.num = baseData.mobileInfo.num; vc.psw2Type = 1; } else if (type == 2){ //邮箱 vc.vcType = MOEnterCodeSetPsw2Type; vc.email = baseData.email; vc.psw2Type = 2; } else if (type == 3){ vc.vcType = MOEnterCodeSetPsw2Type; vc.isForgetPsw2 = YES; vc.code = baseData.mobileInfo.code; vc.num = baseData.mobileInfo.num; vc.psw2Type = 1; } else if (type == 4){ vc.vcType = MOEnterCodeSetPsw2Type; vc.isForgetPsw2 = YES; //邮箱找回 vc.email = baseData.email; vc.psw2Type = 2; } vc.hidesBottomBarWhenPushed = YES; [currentVC.navigationController pushViewController:vc animated:YES]; } else{ MOLogV(@"toGetTheUserSecurityInfoWithParams 接口报错了"); kShowNetError(data) } }]; } - (void)applicationDidEnterBackground:(UIApplication *)application { self.isFromBackground = YES; } - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { #if !TARGET_IPHONE_SIMULATOR return [[FBSDKApplicationDelegate sharedInstance] application:application openURL:url sourceApplication:sourceApplication annotation:annotation]; #else return NO; #endif } - (void)applicationDidBecomeActive:(UIApplication *)application { MOLogV(@"APP进入活动状态"); NSString *token = [NSString stringWithFormat:@"%@",GetToken]; if (token != nil && ![token isEqualToString:@"(null)"]) { if(!self.isShowAdView){ [AppDelegate toJudgeThePastboard]; } [UIApplication sharedApplication].applicationIconBadgeNumber = 0; [self performSelector:@selector(toRecoveryTheLive) withObject:nil afterDelay:1.0]; [self performSelector:@selector(toCheckTheIMStatus) withObject:nil afterDelay:5.0]; //是否从后台切换到前台 if (self.isFromBackground) { self.isFromBackground = NO; SendNotification(@"kNotification_FromBackgroundStatus"); } } #if !TARGET_IPHONE_SIMULATOR [FBSDKAppEvents.shared activateApp]; #endif } - (void)toRecoveryTheLive{ SendNotification(@"kNotification_RecoveryTheLive");//如果在直播间 通知一下服务器 } - (void)toCheckTheIMStatus{ SendNotification(@"kNotification_CheckTheIMStatus"); } + (void)toJudgeThePastboard{ if (@available(iOS 14.0, *)) { WEAKSELF NSSet *patterns = [[NSSet alloc] initWithObjects:UIPasteboardDetectionPatternProbableWebURL, nil]; [[UIPasteboard generalPasteboard] detectPatternsForPatterns:patterns completionHandler:^(NSSet * _Nullable result, NSError * _Nullable error) { if (result && result.count) { // 当前剪切板中存在 URL [weakSelf toReadThePasteboard]; } }]; } else { // Fallback on earlier versions // 读取剪贴板内容 [AppDelegate toReadThePasteboard]; } } + (void)toReadThePasteboard{ WEAKSELF kMainThreadBlock(^{ UIPasteboard *pasteboard = [UIPasteboard generalPasteboard]; NSString *pasteboardString = pasteboard.string; // 检查是否有内容,并且满足特定的 Scheme 格式 if (pasteboardString.length > 0 && [pasteboardString hasPrefix:@"mimo://"]) { // 处理 Scheme 跳转 NSURL *url = [NSURL URLWithString:pasteboardString]; if ([[UIApplication sharedApplication] canOpenURL:url]) { [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil]; } // 将剪贴板内容清空 pasteboard.string = @""; } AppDelegate *app = (AppDelegate *) [UIApplication sharedApplication].delegate; app.isShowAdView = NO; }) } /** 内购准备环境(在appDelegateAPP每次启动时调用) */ - (void)parpareIAP { NSString *productID = MOCurrentIAProductID; if(productID.length == 0){ productID = MODefaultProductID; } [[MOInAppPurchaseManager shareManager] queryByPuoductId:productID productInfoReuslts:^(SKProductsResponse * _Nonnull resp) { MOLogV(@"123123"); }]; } - (void)showFirstLaunchImage{ MOBannerData *bannerData = (MOBannerData *)[[MODataCache sharedYYCache] objectForKey:kFirstLaunchInfo]; if(bannerData.JumpList.count != 0){ MOJumpList *jumpData = bannerData.JumpList.firstObject; NSString *bannerStr = jumpData.img; NSString *jumpStr = jumpData.jump; if(bannerStr.length != 0){ [NSObject mo_makeLBLaunchImageAdView:^(MOLaunchImageAdView *imgAdView) { //设置广告的类型 imgAdView.mo_getLBlaunchImageAdViewType(FullScreenAdType); //设置本地启动图片 imgAdView.mo_imgUrl = bannerStr; //自定义跳过按钮 imgAdView.mo_skipBtn.backgroundColor = [MOTools colorWithHexString:@"#000000" alpha:0.5]; //各种点击事件的回调 imgAdView.mo_clickBlock = ^(MOClickType type){ switch (type) { case clickAdType:{ MOLogV(@"点击广告回调"); jumpData.isFirstAdWeb = YES; SendObjNotification(@"MOSquareListVC_H5Jump", jumpData); } break; case skipAdType:{ MOLogV(@"点击跳过回调"); SendNotification(@"kNotification_FirstShowNoti"); [AppDelegate toJudgeThePastboard]; } break; case overtimeAdType:{ MOLogV(@"倒计时完成后的回调"); SendNotification(@"kNotification_FirstShowNoti"); [AppDelegate toJudgeThePastboard]; } break; default: break; } }; }]; } else{ SendNotification(@"kNotification_FirstShowNoti"); [AppDelegate toJudgeThePastboard]; } } else{ SendNotification(@"kNotification_FirstShowNoti"); [AppDelegate toJudgeThePastboard]; } } #pragma mark - TIMPush - (int)businessID { //上一步控制台给的证书ID int kBusinessID = kTentPushID; return kBusinessID; } - (BOOL)onRemoteNotificationReceived:(NSString *)notice { // custom navigate return NO; } - (void)toRegisterTencentPush{ [TIMPushManager addPushListener:self]; [TIMPushManager disablePostNotificationInForeground:YES];//关闭 App 在前台时弹出通知栏 } #pragma mark - TIMPushListener - (void)onNotificationClicked:(NSString *)ext { // 获取 ext 自定义跳转 MOLogV(@"onNotificationClicked ext - %@",ext); NSDictionary *dict = [MOTools dictionaryWithJsonString:ext]; NSString *jumpUrl = [MODataManager objectOrNilForKey:@"jump" fromDictionary:dict]; [self toOpenTheSchemeUrlWith:jumpUrl]; } - (void)onRecvPushMessage:(TIMPushMessage *)message{ MOLogV(@"Received TIMPushMessage:"); MOLogV(@"Title: %@", message.title); MOLogV(@"Content: %@", message.desc); MOLogV(@"Ext: %@", message.ext); MOLogV(@"Message ID: %@", message.messageID); kMainThreadBlock(^{ MOEasemobEvent *baseModel = [MOEasemobEvent modelWithJSON:message.ext]; //每日任务 if([baseModel.event isEqualToString:@"task.dialog"]){ TaskPublishEvent *publishInfo = [TaskPublishEvent modelWithJSON:baseModel.value]; MOGetGiftView *view = [MOGetGiftView moGetGiftView]; view.viewModel = publishInfo; [view showGetGiftView]; } //钻石大赢家 else if ([baseModel.event isEqualToString:@"activity.big.winner"]){ UIViewController *currentVC = [MOTools currentViewController]; ActivityBigWinnerPublishEvent *diaWinObject = [ActivityBigWinnerPublishEvent modelWithJSON:baseModel.value]; MODrawOpenVC *vc = [[MODrawOpenVC alloc] init]; vc.viewModel = diaWinObject; UINavigationController *newNav = [[UINavigationController alloc] initWithRootViewController:vc]; newNav.modalPresentationStyle = UIModalPresentationOverFullScreen; [currentVC presentViewController:newNav animated:NO completion:nil]; } }) } #if DEBUG - (void)setupDoraemonKit { [[DoraemonManager shareInstance] install]; } - (void)setupLogger { DDOSLogger *consoleLogger = [DDOSLogger sharedInstance]; consoleLogger.logFormatter = [[MOLogFormatter alloc] init]; // 设置格式器 [DDLog addLogger:consoleLogger]; DDFileLogger *fileLogger = [[DDFileLogger alloc] init]; fileLogger.logFormatter = [[MOLogFormatter alloc] init]; // 文件日志也使用相同格式 fileLogger.rollingFrequency = 60 * 60 * 24; // 1 天轮转 fileLogger.logFileManager.maximumNumberOfLogFiles = 7; fileLogger.maximumFileSize = 5 * 1024 * 1024; [DDLog addLogger:fileLogger]; } - (void)setupNetworkMonitor { [NSURLProtocol registerClass:[NEHTTPEye class]]; if ([[NSUserDefaults standardUserDefaults] objectForKey:@"NetworkEyeEnable"] == nil) { // 默认开启 [NEHTTPEye setEnabled:YES]; } } #endif @end