一些机制总结

登录及自动登录机制研究

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,463评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,868评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,213评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,666评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,759评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,725评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,716评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,484评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,928评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,233评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,393评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,073评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,718评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,308评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,538评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,338评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,260评论 2 352

推荐阅读更多精彩内容