我们将各种组件(accessToken、refreshToken 等)存储在符合 NSCoding 协议的令牌类中。然后我们归档对象并将其作为字符串存储在钥匙串中。
我们的 TokenModel 协议如下所示:
@protocol TokenModel <NSCoding, NSObject>
@property(nonatomic, strong, readonly) NSString *accessToken;
@property(nonatomic, strong, readonly) NSDate *expirationDate;
@property(nonatomic, assign, readonly) NSTimeInterval expiresIn;
@property(nonatomic, strong, readonly) NSString *refreshToken;
@property(nonatomic, strong, readonly) NSString *tokenType;
- (BOOL)isAccessTokenExpired;
@end
我们使用钥匙串服务助手,它让我们可以像访问 NSUserDefaults 一样简单地访问钥匙串,同样要求存储的对象必须符合 NSCoding 协议。
@protocol KeychainService <NSObject>
- (id)objectForKey:(id)key error:(NSError * __autoreleasing *)error;
- (BOOL)setObject:(id)object forKey:(id)key error:(NSError * __autoreleasing *)error;
- (BOOL)removeObjectForKey:(id)key error:(NSError * __autoreleasing *)error;
@end