异地登录: 如何通过容联云获取异地登录的提示并弹窗

如题,今天我来给大家介绍, 如果你的app接入的是容联云即时通讯,则可以参考如下:

一, 如何通过容联云获取异地登录的提示 ;(如果不是容联云, 此提示请另找, 下面两个无所谓)

二, 如何在app上出现弹窗提示;

三, 如何解决立即重新登录操作;

现在开始讲解:

一, 如何通过容联云获取异地登录的提示 :

首先, 接入过容联云的同学都知道有这个文件:DeviceDelegateHelper.m (前面接入容联云, 参考官方文档最刺激,我不做详述)

在.m文件中找到方法: 接入容联云的app, 在账号他人异地登录时, 会调这个方法

#pragma mark - 判断异地登录等

-(void)onConnected:(ECError *)error{

switch (error.errorCode) {

case ECErrorType_KickedOff:{

NSLog(@"异地登录");

[YLDLoginManager loginOutWithReason:@"您的账号已在另一台设备登录" title:@"异地登录通知:"];

}break;

default:

break;

}}

#pragma mark - 异地登录 token过期等

如果有异地登录, 请直接删除本地原来token, 反正token也已经过期的; 直接给用户注销掉; 发送一个通知: YLDYuntxKickOutOffNotifationID

+(void)loginOutWithReason:(NSString *)reason title:(NSString *)title{

[[YLDLoginJushManager sharedManager] sendNewMsgWithTitle:title andMsgBody:reason];

[YLDLoginManager loginOutUserSuccess:^(BOOL isLoginOut, NSString *result) {

if (isLoginOut) {

[[NSNotificationCenter defaultCenter] postNotificationName:YLDYuntxKickOutOffNotifationID object:nil];

}

}];}

二, 如何在app上出现弹窗提示:

在appdelegate.m的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法里 写上如下代码: 获取通知

/* -----------  1.2监听异地登录通知  -----------*/

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loginInAndLoginOut) name:YLDYuntxKickOutOffNotifationID object:nil];

#pragma mark - 异地登录弹出登录界面

-(void)loginInAndLoginOut{

[[[UIAlertView alloc] initWithTitle:@"提示"

message:@"您的账号已在另一台设备登录"

delegate:self

cancelButtonTitle:@"取消"

otherButtonTitles:@"重新登录", nil] show];

}

注: 此方法会在任何界面都会有弹窗

三, 如何解决立即重新登录操作:

在appdelegate里调用UIAlertViewDelegate

#pragma mark - UIAlertViewDelegate

-(void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex{

switch (buttonIndex) {

case 0:{  //取消, 取消则退出当前页, 直接跳回主页去, 然后弹出登录界面 [self selectedVC] 请参考下面的方法:

/* -----------  返回首页  -----------*/

[[self selectedVC].navigationController popToRootViewControllerAnimated:NO];

YLDLoginController *login = [[YLDLoginController alloc]init];

BaseNavigationController *loginVc = [[BaseNavigationController alloc]initWithRootViewController:login];

login.title = @"登录";

[self selectedVC].hidesBottomBarWhenPushed=YES;

[[self selectedVC].navigationController presentViewController:loginVc animated:YES completion:nil];

[self selectedVC].hidesBottomBarWhenPushed=NO;

}break;

case 1:{    //重新登录, 这里直接登录, 就是将以前登录时获取的账号密码存本地, 然后调用

NSString *userName = [[NSUserDefaults standardUserDefaults] valueForKey:YLDUserNameLastDefualtKey];

NSString *password = [[NSUserDefaults standardUserDefaults] valueForKey:YLDUserPasswordLastDefualtKey];

if (userName.length > 0 && password.length > 0) {  //有历史登录数据

[YLDLoginManager loginUserWithMobile:userName andPwd:password success:^(NSString *loginResult,BOOL isLoginSuccess) {

if (isLoginSuccess) {

[[NSNotificationCenter defaultCenter] postNotificationName:LoginSuccessNotificationID object:nil];

}else{

[[[UIAlertView alloc] initWithTitle:loginResult

message:nil

delegate:nil

cancelButtonTitle:@"确定"

otherButtonTitles:nil, nil] show];

}

}];

}else{  //无历史登录数据

YLDLoginController *login = [[YLDLoginController alloc]init];

BaseNavigationController *loginVc = [[BaseNavigationController alloc]initWithRootViewController:login];

login.title = @"登录";

[self selectedVC].hidesBottomBarWhenPushed=YES;

[[self selectedVC].navigationController presentViewController:loginVc animated:YES completion:nil];

[self selectedVC].hidesBottomBarWhenPushed=NO;

}

}break;

default:

break;

}}

通过TabBarController获取当前控制器

-(UIViewController *)selectedVC{

YLDTabBarController * tabVC = (YLDTabBarController *)[AppDelegate shareInstance].window.rootViewController;

BaseNavigationController *baseNav = tabVC.selectedViewController;

UIViewController *selectedVC=[baseNav.viewControllers lastObject];

return selectedVC;

}

你可能感兴趣的:(异地登录: 如何通过容联云获取异地登录的提示并弹窗)