| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414 |
- //
- // UserInfoManager.m
- // KulexiuForTeacher
- //
- // Created by Kyle on 2022/3/20.
- //
- #import "UserInfoManager.h"
- #import "ArchiveTools.h"
- #import "JPUSHService.h"
- #import <Bugly/Bugly.h>
- #import "AppDelegate+AppService.h"
- #import "KSTipsAlert.h"
- #import <UMCommon/MobClick.h>
- #import "TXIMLinsenter.h"
- #import "KSEnterLiveroomManager.h"
- @interface UserInfoManager ()
- @property (nonatomic, copy) UserInfoCallback callback;
- @property (nonatomic, copy) ConnectIMCallback IMConnCallback;
- @end
- @implementation UserInfoManager
- + (instancetype)shareInstance {
- static UserInfoManager *manager = nil;
- static dispatch_once_t onceToken;
- dispatch_once(&onceToken, ^{
- manager = [[UserInfoManager alloc] init];
- });
- return manager;
- }
- - (instancetype)init {
- if (self = [super init]) {
- self.userInfo = [[UserInfo alloc] init];
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(otherLogin) name:@"otherLogin" object:nil];
- [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refreshLiveClickStatus) name:@"refreshLiveClickStatus" object:nil];
- }
- return self;
- }
- - (void)refreshLiveClickStatus {
- [KSEnterLiveroomManager refreshClickStatus];
- }
- - (void)otherLogin {
- dispatch_main_async_safe(^{
- UIWindow *window = [NSObject getKeyWindow];
- UIViewController *vc = [UIApplication sharedApplication].keyWindow.rootViewController;
-
- if ([vc isKindOfClass:[UITabBarController class]]) {
- UITabBarController *tab = (UITabBarController *)window.rootViewController;
- CustomNavViewController *ctrl = (CustomNavViewController *)tab.selectedViewController;
- if ([ctrl.visibleViewController isKindOfClass:NSClassFromString(@"TXClassroomViewController")]) {
-
- [[NSNotificationCenter defaultCenter] postNotificationName:@"classroomLogout" object:nil];
- return;
- }
- else if ([vc.presentedViewController isKindOfClass:NSClassFromString(@"CustomNavViewController")]) {
- CustomNavViewController *nav = (CustomNavViewController *)vc.presentedViewController;
- if ([nav.visibleViewController isKindOfClass:NSClassFromString(@"TXLiveRoomViewController")] || [nav.visibleViewController isKindOfClass:NSClassFromString(@"KSLiveWebViewController")]) {
-
- [[NSNotificationCenter defaultCenter] postNotificationName:@"liveroomLogout" object:nil];
- return;
- }
- }
-
- [self showMessage:@"登录过期,请重新登录"];
- [APPLOGIN_MANAGER logoutAction];
- }
- });
- }
- - (void)showTipsAlert {
- [KSTipsAlert shareInstanceWithTitle:@"提示" descMessage:@"聊天功能已断开,是否重新连接?" leftTitle:@"取消" rightTitle:@"连接" callback:^(BOOL isSure) {
- if (isSure) {
- [self connectIM];
- }
- }];
- }
- // 提示信息
- - (void)showMessage:(NSString *)message {
- MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:[[UIApplication sharedApplication].windows lastObject] animated:YES];
- hud.removeFromSuperViewOnHide =YES;
- hud.mode = MBProgressHUDModeText;
- hud.label.text = message;
- hud.minSize = CGSizeMake(132.f, 60.0f);
- hud.label.textColor = [UIColor whiteColor];
- hud.bezelView.style = MBProgressHUDBackgroundStyleSolidColor;
- hud.bezelView.backgroundColor = [UIColor colorWithHexString:@"#000000" alpha:0.8];
- [hud hideAnimated:YES afterDelay:2];
- }
- // 获取信息回调
- - (void)queryUserInfoCallback:(UserInfoCallback)callback {
- if (callback) {
- self.callback = callback;
- }
- [self queryUserInfoConnectIM];
- }
- // 获取信息并连接IM
- - (void)queryUserInfoConnectionIMCallback:(UserInfoCallback)callback {
- if (callback) {
- self.callback = callback;
- }
- [self queryUserInfoConnectIM];
- }
- - (void)checkTokenEnableCallback:(void(^)(BOOL enable))checkCallback {
- NSString *token = UserDefault(TokenKey);
- if ([NSString isEmptyString:token]) {
- checkCallback(NO);
- return;
- }
- [KSNetworkingManager checkTokenRequest:KS_GET success:^(NSDictionary * _Nonnull dic) {
- if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
- checkCallback(YES);
- }
- else {
- checkCallback(NO);
- }
- } faliure:^(NSError * _Nonnull error) {
- checkCallback(NO);
- }];
- }
- - (void)addRequestHeader {
- NSInteger tenantId = [UserDefaultObjectForKey(TENANT_ID) integerValue];
- if (tenantId > 0) {
- [KSNetworkingManager addHeader:[NSString stringWithFormat:@"%zd", tenantId] forKey:@"coopId"];
- }
- }
- - (void)queryUserInfoConnectIM {
-
- [KSNetworkingManager queryStudentInfoRequest:KS_GET success:^(NSDictionary * _Nonnull dic) {
- if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
- // 保存用户信息
- self.userInfo = [[UserInfo alloc] initWithDictionary:[dic ks_dictionaryValueForKey:@"data"]];
- // 判断是否实名
- if (![NSString isEmptyString:self.userInfo.realName] && ![NSString isEmptyString:self.userInfo.idCardNo]) {
- self.hasAuth = YES;
- }
- else {
- self.hasAuth = NO;
- }
-
- NSString *uid = [NSString stringWithFormat:@"%.0f",self.userInfo.userId];
- UserDefaultSet(uid, UIDKey);
-
- NSString *imUserID = self.userInfo.imUserId;
- UserDefaultSet(imUserID, IM_USERID);
-
- UserDefaultSet(self.userInfo.imToken, IM_TOKEN);
- UserDefaultSet(self.userInfo.username, NicknameKey);
- UserDefaultSet(self.userInfo.heardUrl, AvatarUrlKey);
- if (self.userInfo.tenantId != 0) {
- UserDefaultSetObjectForKey(@(self.userInfo.tenantId), TENANT_ID);
- }
- [[NSUserDefaults standardUserDefaults] synchronize];
- [self addRequestHeader];
- NSString *imToken = UserDefault(IM_TOKEN);
- BOOL needConnect = NO;
- if (![NSString isEmptyString:imToken] && [TXIM_LINSENTER isCurrentUserLoginIM] == NO) {
- needConnect = YES;
- }
-
- if (needConnect) {
- NSString *access_token = UserDefault(TokenKey);
- // 设置推送别名
- [JPUSHService setAlias:UserDefault(UIDKey) completion:nil seq:0];
- // 上传registrationID
- [JPUSHService registrationIDCompletionHandler:^(int resCode, NSString *registrationID) {
- if (![NSString isEmptyString:registrationID] && ![NSString isEmptyString:access_token]) {
- [self saveRegisterId:registrationID accessToken:access_token];
- }
- }];
- [Bugly setUserIdentifier:UserDefault(UIDKey)];
- [self connectIM];
- }
-
- if (self.callback) {
- self.callback(self.userInfo);
- self.callback = nil;
- }
- }
- else {
- if (self.callback) {
- self.callback(self.userInfo);
- self.callback = nil;
- }
- }
- } faliure:^(NSError * _Nonnull error) {
- if (self.callback) {
- self.callback(self.userInfo);
- self.callback = nil;
- }
- }];
- }
- - (void)checkTokenEnableConnectIM {
- [self checkTokenEnableCallback:^(BOOL enable) {
- if (enable) {
- [self connectIM];
- }
- }];
- }
- - (BOOL)checkIMConnected {
- if ([TXIM_LINSENTER isCurrentUserLoginIM]) {
- return YES;
- }
- else {
- return NO;
- }
- }
- - (void)connectionIMCallback:(ConnectIMCallback)callback {
- if (callback) {
- self.IMConnCallback = callback;
- }
- [self delayCheckIMConnection];
- }
- - (void)delayCheckIMConnection {
- __block BOOL isConnected = [self checkIMConnected];
- if (isConnected) {
- if (self.IMConnCallback) {
- self.IMConnCallback(YES);
- }
- return;
- }
- else {
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
- isConnected = [self checkIMConnected];
- if (isConnected) {
- if (self.IMConnCallback) {
- self.IMConnCallback(YES);
- }
- }
- else {
- [self delayCheckIMConnection];
- }
- });
- }
- }
- - (void)connectIM {
- NSString *imToken = UserDefault(IM_TOKEN);
- if ([NSString isEmptyString:imToken]) {
- return;
- }
- [TXIM_LINSENTER TXIMLoginWithUserId:UserDefault(IM_USERID) sig:imToken callback:^(BOOL isSuccess, NSString * _Nullable msg) {
- if (isSuccess) {
- dispatch_async(dispatch_get_main_queue(), ^{
- AppDelegate *appDelegate = (AppDelegate *)[UIApplication sharedApplication].delegate;
- [appDelegate displayUnreadMessageCount];
- });
- }
- else {
- // NSString *message = [NSString stringWithFormat:@"IM连接错误:%@",msg];
- // dispatch_main_async_safe(^{
- // [self showMessage:message];
- // });
- }
- }];
- }
- - (NSString *)getCurrentVersion {
- return [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleShortVersionString"];
- }
- - (void)requsetconfigCallback:(void(^)(BOOL success))callback {
- [KSNetworkingManager appVersionInfoRequest:KS_GET success:^(NSDictionary * _Nonnull dic) {
- if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
- NSString *serviceVersion = [[dic ks_dictionaryValueForKey:@"data"] ks_stringValueForKey:@"version"];
- NSString *currentVersion = [self getCurrentVersion];
- if ([self isLowerVersionCompareLocalVersion:currentVersion serviceVersion:serviceVersion]) {
- callback(YES);
- }
- else {
- callback(NO);
- }
- }
- else {
- callback(NO);
- }
- } faliure:^(NSError * _Nonnull error) {
- callback(NO);
- }];
- }
- - (BOOL)isLowerVersionCompareLocalVersion:(NSString *)localVersion serviceVersion:(NSString *)version {
- localVersion = [localVersion stringByReplacingOccurrencesOfString:@"." withString:@""];
- if (localVersion.length == 3) {
- localVersion = [localVersion stringByAppendingString:@"0"];
- }
- else if (localVersion.length==2) {
- localVersion = [localVersion stringByAppendingString:@"00"];
- }else if (localVersion.length==1){
- localVersion = [localVersion stringByAppendingString:@"000"];
- }
-
- version = [version stringByReplacingOccurrencesOfString:@"." withString:@""];
- if (version.length == 3) {
- version = [version stringByAppendingString:@"0"];
- }
- else if (version.length==2) {
- version = [version stringByAppendingString:@"00"];
- }else if (version.length==1){
- version = [version stringByAppendingString:@"000"];
- }
- if (([localVersion floatValue] > [version floatValue])) {
- return NO;
- }
- else {
- return YES;
- }
- }
- - (void)queryUserInfoSendLoginUMCount {
- [KSNetworkingManager queryStudentInfoRequest:KS_GET success:^(NSDictionary * _Nonnull dic) {
- if ([dic ks_integerValueForKey:@"code"] == 200 && [dic ks_boolValueForKey:@"status"]) {
- // 保存用户信息
- self.userInfo = [[UserInfo alloc] initWithDictionary:[dic ks_dictionaryValueForKey:@"data"]];
- // 判断是否实名
- if (![NSString isEmptyString:self.userInfo.realName] && ![NSString isEmptyString:self.userInfo.idCardNo]) {
- self.hasAuth = YES;
- }
- else {
- self.hasAuth = NO;
- }
-
- NSString *uid = [NSString stringWithFormat:@"%.0f",self.userInfo.userId];
- UserDefaultSet(uid, UIDKey);
-
- // IM ID
- NSString *IMUserId = self.userInfo.imUserId;
- UserDefaultSet(IMUserId, IM_USERID);
- UserDefaultSet(self.userInfo.imToken, IM_TOKEN);
- UserDefaultSet(self.userInfo.username, NicknameKey);
- UserDefaultSet(self.userInfo.heardUrl, AvatarUrlKey);
- if (self.userInfo.tenantId != 0) {
- UserDefaultSetObjectForKey(@(self.userInfo.tenantId), TENANT_ID);
- }
- [[NSUserDefaults standardUserDefaults] synchronize];
- // 请求头
- [self addRequestHeader];
- NSString *access_token = UserDefault(TokenKey);
- // 设置推送别名
- [JPUSHService setAlias:UserDefault(UIDKey) completion:nil seq:0];
- // 上传registrationID
- [JPUSHService registrationIDCompletionHandler:^(int resCode, NSString *registrationID) {
- if (![NSString isEmptyString:registrationID] && ![NSString isEmptyString:access_token]) {
- [self saveRegisterId:registrationID accessToken:access_token];
- }
- }];
- [Bugly setUserIdentifier:UserDefault(UIDKey)];
- [self connectIM];
- [self startUMCountAndLoginCount];
-
- }
- else {
-
- }
- } faliure:^(NSError * _Nonnull error) {
-
- }];
- }
- - (void)startUMCountAndLoginCount {
- [self startCountUMEvent];
- [self sendUMEvent:@"klx_login"];
- }
- - (BOOL)startCountUMEvent {
- NSString *userId = UserDefault(UIDKey);
- if ([NSString isEmptyString:userId]) {
- return NO;
- }
- else {
- [MobClick profileSignInWithPUID:userId];
- return YES;
- }
- }
- - (void)stopCountUMEvent {
- [MobClick profileSignOff];
- }
- - (void)sendUMEvent:(NSString *)eventId {
- [MobClick event:eventId];
- }
- - (void)dealloc {
- [[NSNotificationCenter defaultCenter] removeObserver:self];
- }
- - (void)saveRegisterId:(NSString *)registerId accessToken:(NSString *)accessToken {
- [KSNetworkingManager updateRemotePushInfoRequest:KS_POST pushDeviceId:registerId access_token:accessToken success:^(NSDictionary * _Nonnull dic) {
- NSLog(@"---");
- } faliure:^(NSError * _Nonnull error) {
- NSLog(@"---");
- }];
- }
- @end
|