zoukankan      html  css  js  c++  java
  • SSKeychain的使用 钥匙串

    一.首先要理解keychain与userdefaults的区别:

    1.keychain是将数据加密后存储在本地,更安全.路径:Library/Application Support/iPhone Simulator/模拟器版本/Library/Keychains/

    userdefaults数据以明文的形式保存在.plist文件中.路径:Library/Application Support/iPhone Simulator/模拟器版本/Applications/应用对应的数字/Library/Preference/.plist文件

    2.当你删除APP后keychain存储的数据不会删除,user defaults存储的数据会随着APP而删掉

    二.SSkeychain是对keychain的封装 实现了添加/删除/查询用户名和密码.

    三.流程

    1.使用pod:(或者不使用pod,直接将下载好的SSKeychain文件夹拖进工程里)

    pod 'SSKeychain'

    2.代码

    //

    //  ViewController.m

    #import "ViewController.h"

    #import <SSKeychain.h>

    #import <SSKeychainQuery.h>

    //应用名称(保证唯一性)

    #define ServiceName @"com.zx.tec.SSKeychainTest"

    //账号

    #define Account @"test2"

    @interface ViewController ()

    @end

    @implementation ViewController

    - (void)viewDidLoad {

        

        [super viewDidLoad];

        /**

         *  SSKeychain 是一种本地存储方式 不会因为程序卸载而清除 用于存储 私密 及 唯一 的标示

         *

         *  五个方法:(用到两个)

         *  + (NSArray *)allAccounts;

         

         *  + (NSArray *)accountsForService:(NSString *)serviceName;

         

         *  + (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account;

         

         *  + (BOOL)deletePasswordForService:(NSString *)serviceName account:(NSString *)account;

         

         *  + (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account;

         

         */

        

    #pragma mark - 开始使用 SSKeychain

        

        //获取uuid(如果想获取唯一标示,存储以 uuid 为密码存储 下次登陆直接读取检测是否安装)

    //    CFUUIDRef uuid = CFUUIDCreate(NULL);

    //    assert(uuid != NULL);

    //    CFStringRef uuidStr = CFUUIDCreateString(NULL, uuid);

    //    NSLog(@"%@~~%@", uuidStr, [NSString stringWithFormat:@"%@", uuidStr]);

        

        /**

         *  + (NSString *)passwordForService:(NSString *)serviceName account:(NSString *)account;//获取指定 serviceName 和 account 的密码

         *

         *  + (BOOL)setPassword:(NSString *)password forService:(NSString *)serviceName account:(NSString *)account;//存储指定 serviceName 和 account 的密码

         *

         */

        NSString *passWord = @"123456";

        if (![SSKeychain passwordForService:ServiceName account:Account]) {//查看本地是否存储指定 serviceName 和 account 的密码

            

            //如果没设置密码则 设定密码 并存储

            [SSKeychain setPassword:passWord forService:ServiceName account:Account];

            

            //打印密码信息

            NSString *retrieveuuid = [SSKeychain passwordForService:ServiceNameaccount:Account];

            NSLog(@"SSKeychain存储显示: 未安装过:%@", retrieveuuid);

            

        }else{

            

            //曾经安装过 则直接能打印出密码信息(即使删除了程序 再次安装也会打印密码信息) 区别于 NSUSerDefault

            NSString *retrieveuuid = [SSKeychain passwordForService:ServiceNameaccount:Account];

            NSLog(@"SSKeychain存储显示 :已安装过:%@", retrieveuuid);

        

        }

        

    #warning 区别于 NSUSerDefault (删除应用程序后 存储的数据就会消失)

        

        if (![[NSUserDefaults standardUserDefaults]boolForKey:@"TestOne"]) {

            [[NSUserDefaults standardUserDefaults]setBool:YES forKey:@"TestOne"];

            

            NSLog(@"NSUSerDefault存储显示: 未安装");

        

        }else{

            

            NSLog(@"NSUSerDefault存储显示: 安装过");

            

        }

        

    }

  • 相关阅读:
    webgl glsl
    javascript 分号理解
    流的理解 1
    javascript 排序
    phaser3 微信小游戏若干问题
    layabox 3d 入手
    phaser2 微信小游戏入手
    取整你知道几中办法?
    script 执行的三种方式
    cl查看类的内存布局
  • 原文地址:https://www.cnblogs.com/daxueshan/p/6876804.html
Copyright © 2011-2022 走看看