一些机制总结

2016-07-10  本文已影响159人  未来可期me

登录及自动登录机制研究

首次登录,调用登录接口
之后登录,判断是否存在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) {
    }];
}

上一篇下一篇

猜你喜欢

热点阅读