美文网首页
iOS 用户退出登录时可以干些啥?

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

作者: 天空中的球 | 来源:发表于2017-01-11 14:19 被阅读899次

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

    一、需要干些什么?

    当然具体也是根据 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 用户退出登录时可以干些啥?

          本文链接:https://www.haomeiwen.com/subject/kozlbttx.html