美文网首页
一些机制总结

一些机制总结

作者: 未来可期me | 来源:发表于2016-07-10 09:31 被阅读159次

    登录及自动登录机制研究

    首次登录,调用登录接口
    之后登录,判断是否存在token【未过期】,调用自动登录接口
    后台,对token进行控制,token在本地的有效期为七天
    若用户经常登录,后台负责在合适的时机【即将过期】,自动登录的时候,更新本地token,保证经常登录的用户身份不会过期
    若身份过期,提示重新登录

    手势密码应用场景及机制

    在每次调用自动登录接口时候,如果有设置手势密码,则进入手势密码界面输入手势,与系统保存的手势密码相同则登录,多次输入,不对,直接进入登录界面,手动输入密码

    【与QQ登录机制一样】

    手势密码的原理
    将九宫格中的九个圆形用1-9标记,设置最少连四个点,就是最少四位数
    如果两次手势最后的数字都一样就可以进行本地化保存了
    手势的保存可以通过系统单例保存,如果手势密码在服务器也保存,换手机也可以使用手势密码了
    [[NSUserDefaults standardUserDefaults] objectForKey:key];

    引导页机制

    在应用启动时,判断一个未存储过的字段是否存在,不存在则进入引导界面,并设置为根视图,在引导视图滚动结束进入登录界面,并将登录界面设置为根视图,登录成功,进入主页面,在将主页面设置为根视图

    极光机制

    针对用户推送消息,针对手机客户端推送消息
    在应用启动的时候,对极光进行一些配置

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
       
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
        
        if([UINavigationBar conformsToProtocol:@protocol(UIAppearanceContainer)]) {
            [UINavigationBar appearance].tintColor = [UIColor whiteColor];
            //        //保证导航栏颜色与设置的颜色值一样
            //        [UINavigationBar appearance].translucent = NO;
            //        //去掉导航栏与视图间的线
            //        [[UINavigationBar appearance] setBackgroundImage:[[UIImage alloc] init] forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];
            //        [[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];
            [[UINavigationBar appearance] setTitleTextAttributes:@{NSFontAttributeName : [UIFont boldSystemFontOfSize:18], NSForegroundColorAttributeName : [UIColor whiteColor]}];
            
            [[UINavigationBar appearance] setBarTintColor:naviBarAndButtonColor];
        }
            
        //极光部分
        [JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
                                                          UIRemoteNotificationTypeSound |
                                                          UIRemoteNotificationTypeAlert)
         
                                              categories:nil];
        NSString *str = [[NSBundle mainBundle] pathForResource:@"PushConfig" ofType:@"plist"];
        NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:str];
        [JPUSHService setupWithOption:launchOptions appKey:[dic objectForKey:@"APP_KEY"] channel:[dic objectForKey:@"CHANNEL"] apsForProduction:[[dic objectForKey:@"APS_FOR_PRODUCTION"] boolValue]];
        [JPUSHService crashLogON];
        [JPUSHService registrationID];
               
            return YES;
    }
    
    

    登录成功,设置别名

    为安装了应用程序的用户,取个别名来标识。以后给该用户 Push 消息时,就可以用此别名来指定。

    每个用户只能指定一个别名。

    同一个应用程序内,对不同的用户,建议取不同的别名。这样,尽可能根据别名来唯一确定用户。

    标签 tag

    为安装了应用程序的用户,打上标签。其目的主要是方便开发者根据标签,来批量下发 Push 消息。

    可为每个用户打多个标签。

    -(void)loginSuccessed:(NSObject *)obj
    {
        /*设置极光推送的唯一标识,与群体标识*/
        NSString *alias = [NSString stringWithFormat:@"NT_%@",g_loginUser.userId];
        [JPUSHService setTags:nil alias:alias callbackSelector:@selector(tagsAliasCallback:tags:alias:) target:self];
        
        //判断是否是通过别的app打开我们的应用
        //登录(包括自动登录)成功,判断是否是通过外部应用登录(crm调用聊天)
        if (_schemeUserDic) {
            //判断登录身份[该数组中的第一个数据是本人工号,第二个是要找的人工号]
            if ([g_loginUser.userName isEqualToString:_schemeUserDic[@"userName"]]) {
                [self showMainUIWithIndex:0];
                [g_notify postNotificationName:@"usernameArrNoti" object:nil userInfo:_schemeUserDic];
                
            }else {
                [self goLoginVC];
            }
            
        }else {
            [self showMainUIWithIndex:1];
        }
        
        
        [NTDatabaseHelper refreshDatabase];
        NTLastMessage *systemMsg = [[NTLastMessage alloc]init];
        [systemMsg createNoticCenter];
    }
    
    

    退出取消用户的极光别名,保证退出后,不再收到有关用户的别名

    [JPUSHService setTags:nil alias:@"" callbackSelector:@selector(tagsAliasCallback:tags:alias:) target:self];
    

    版本更新机制

    1.在应用启动的时候,调用配置文件接口,获取到我们应用所有需要的接口
    2.调用成功后,开始调用[检查更新]接口

    获取配置文件接口

    #pragma mark -- getConfigInfo
    -(void)configInfo
    {
        [NTServiceShell ConfigInfo:nil completion:^(NSDictionary *response) {
            [g_config didReceive:response];
            dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
                [self checkUpdate : nil];
            });
        } withError:^(NSString *errorMsg) {
            [HUDNotificationCenter showMessage:[errorMsg description] hideAfter:2.0f];
        }];
    }
    
    

    检查更新接口

    #pragma mark - checkUpdate
    -(void)checkUpdate:(NSObject *)obj
    {
        NSDictionary *infoDic = [[NSBundle mainBundle] infoDictionary];
        NSString *appVersion = [infoDic objectForKey:@"CFBundleShortVersionString"];
        
        //请求服务器检查版本
        NSDictionary *dic = @{@"os":@"ios", @"version":appVersion};
        [NTServiceShell CheckUpdateInfo:dic completion:^(NSDictionary *response) {
            NSString *ret = nil;
            NSString *newNote = @"是否更新?";
            NSString *titleStr = @"发现新版本";
            if (response != nil) {
                if (response[@"ret"]) {
                    ret = response[@"ret"];
                    newNote = response[@"newNote"];
                    titleStr = [NSString stringWithFormat:@"%@%@",titleStr,response[@"newVer"]];
                }
            }
            if ([ret isEqualToString:@"0"]) {
                dispatch_async(dispatch_get_main_queue(), ^{
                    UIAlertView *avUpdate = [[UIAlertView alloc] initWithTitle:titleStr
                                                                       message:newNote
                                                                      delegate:self
                                                             cancelButtonTitle:@"立刻访问"
                                                             otherButtonTitles:@"下次再说", nil];
                    avUpdate.tag = 100;
                    [avUpdate show];
                });
            }
            
            if ([ret isEqualToString:@"-1"]) {
                dispatch_async(dispatch_get_main_queue(), ^{
                    UIAlertView *avUpdate = [[UIAlertView alloc] initWithTitle:titleStr
                                                                       message:newNote
                                                                      delegate:self
                                                             cancelButtonTitle:nil
                                                             otherButtonTitles:@"立刻访问", nil];
                    avUpdate.tag = 101;
                    [avUpdate show];
                });
            }
            
            
            
        } withError:^(NSString *error) {
        }];
    }
    
    

    相关文章

      网友评论

          本文标题:一些机制总结

          本文链接:https://www.haomeiwen.com/subject/upltjttx.html