如题,今天我来给大家介绍, 如果你的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;
}