iOS 用户退出登录时可以干些啥?

在我们平常中退出账号的时候,需要做些什么呢?简单的说清除个人相关的所有信息。

一、需要干些什么?

当然具体也是根据 App 产品的定位相关,以下我是从电商类的App这块分的:

  • 删除个人信息(用户具体信息)
[[NSFileManager defaultManager] removeItemAtPath:[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:kFileName] error:nil];
  • 某些特殊的标识信息 (用户的某些标识)
 [[NSUserDefaults standardUserDefaults] removeObjectForKey:kChooseInterestTime];
  • 删除网络缓存的信息 (用户在某些Web 页面留下的痕迹)
 [[NSURLSession sharedSession] resetWithCompletionHandler:^{}];
  • 第三方授权的信息 (用户在地三方平台登录的信息)
  [ShareSDK cancelAuthorize:SSDKPlatformTypeFacebook];
  [ShareSDK cancelAuthorize:SSDKPlatformTypeTwitter];

对于用户信息和标识这块,也可以笼统的放在一起,看具体项目需求和写法吧。

而再此特别留意下下面这个方法,因为感觉忘记这块的设置...

 [[NSURLSession sharedSession] resetWithCompletionHandler:^{}];
- (void)resetWithCompletionHandler:(void (^)(void))completionHandler; /

Empty all cookies, cache and credential stores, removes disk files, issues -flushWithCompletionHandler:. Invokes completionHandler() on the delegate queue if not nil.
清空所有的 Cookies ,Cache 有时还是很有必要的!

二、探讨下如何写的更合理?

然而又有一问题来了,如果此处集中了太多要删除的东东,难道都写在这一块吗?
自己目前是写在一起的,但是貌似又可以优化,但如何优化呢?
反正是离不开低耦合高内聚的。

  • 全部写在一起, 常规写法
[[NSFileManager defaultManager] removeItemAtPath:[[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:kFileName] error:nil];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:kChooseInterestTime];
[[NSURLSession sharedSession] resetWithCompletionHandler:^{}];
[ShareSDK cancelAuthorize:SSDKPlatformTypeFacebook];
[ShareSDK cancelAuthorize:SSDKPlatformTypeTwitter];

  • 对每一个需要清理的地方都进行模块化后,统一用一个通知发送
[[NSNotificationCenter defaultCenter] postNotificationName:kLogoutNotification object:nil];

暂时是用了常规写法,但是用通知进行统一处理,让每一个模块自己清理呢?貌似是确实是方便了,但是用通知的话感觉还是有点不妥:

  • 每一个地方增加了注册通知和移除通知,无形中增加了代码量和不确定的隐患 (甚至有很多通知都会无法移除的)
  • 有些固定好的第三方,例如 ShareSDK, 是不好再改变的,此时就是不适用的。
  • 通知发送的消息那个删除是无法控制顺序的。

  • 建议对每一个需要清理的地方都进行模块化后, 用外露方法直接移除:
[AccountManager removeSaveInfo]; 
[TimeManager removeSaveInfo];
[TestManager removeSaveInfo];
[[NSURLSession sharedSession] resetWithCompletionHandler:^{}];
[ShareSDK cancelAuthorize:SSDKPlatformTypeFacebook];

能直接用的还是直接用的,无需再封装......

感觉这样相比用通知或者所有一大串直接写在一起还是好一点的,尽量模块化,当然也不能为了封装而封装。
同时,如果另有朋友有好的建议,欢迎提出,谢谢。

你可能感兴趣的:(iOS 用户退出登录时可以干些啥?)