WHUtilsManager.m 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. //
  2. // WHUtilsManager.m
  3. // WHChatV
  4. //
  5. // Created by 刘必果 on 2023/4/19.
  6. //
  7. #import "WHUtilsManager.h"
  8. @implementation WHUtilsManager
  9. + (void)checkNetworkStatus:(void (^)(BOOL isAlways, AFNetworkReachabilityStatus status))response{
  10. //处理第一次安装时 网络访问问题
  11. //1.获取网络权限 根绝权限进行人机交互
  12. [self networkStatusDidFinishLaunching:^(BOOL isAlways, AFNetworkReachabilityStatus states) {
  13. response(isAlways, states);
  14. }];
  15. }
  16. /*
  17. CTCellularData在iOS9之前是私有类,权限设置是iOS10开始的,所以App Store审核没有问题
  18. 获取网络权限状态
  19. */
  20. + (void)networkStatusDidFinishLaunching:(void (^)(BOOL isAlways, AFNetworkReachabilityStatus states))response{
  21. //2.根据权限执行相应的交互
  22. CTCellularData *cellularData = [[CTCellularData alloc] init];
  23. /*
  24. 此函数会在网络权限改变时再次调用
  25. */
  26. cellularData.cellularDataRestrictionDidUpdateNotifier = ^(CTCellularDataRestrictedState state) {
  27. switch (state) {
  28. case kCTCellularDataRestricted: //关闭网络状态
  29. NSLog(@"Restricted");
  30. if(response){
  31. response(NO, AFNetworkReachabilityStatusNotReachable); // AFNetworkReachabilityStatusNotReachable 网络不通
  32. }
  33. break;
  34. case kCTCellularDataNotRestricted:{
  35. // WLAN
  36. //2.2已经开启网络权限 监听网络状态
  37. [self addReachabilityManagerDidFinishLaunching:^(BOOL isAlways, AFNetworkReachabilityStatus status) {
  38. if(response){
  39. response(YES, status);
  40. }
  41. }];
  42. break;
  43. }
  44. case kCTCellularDataRestrictedStateUnknown:{
  45. if(response){
  46. response(NO, AFNetworkReachabilityStatusUnknown); //没有授权
  47. }
  48. NSLog(@"Unknown");
  49. //2.3未知情况 (还没有遇到推测是有网络但是连接不正常的情况下)
  50. // [self getAppInfo];
  51. break;
  52. }
  53. default:
  54. break;
  55. }
  56. };
  57. }
  58. /**
  59. 实时检查当前网络状态
  60. */
  61. + (void)addReachabilityManagerDidFinishLaunching:(void (^)(BOOL isAlways, AFNetworkReachabilityStatus status))response{
  62. AFNetworkReachabilityManager *afNetworkReachabilityManager = [AFNetworkReachabilityManager sharedManager];
  63. //这个可以放在需要侦听的页面
  64. // [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(afNetworkStatusChanged:) name:AFNetworkingReachabilityDidChangeNotification object:nil];
  65. [afNetworkReachabilityManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
  66. switch (status) {
  67. case AFNetworkReachabilityStatusNotReachable:{
  68. NSLog(@"网络不通:%@",@(status) );
  69. if(response){
  70. response(NO, AFNetworkReachabilityStatusReachableViaWiFi);
  71. }
  72. break;
  73. }
  74. case AFNetworkReachabilityStatusReachableViaWiFi:{
  75. NSLog(@"网络通过WIFI连接:%@",@(status));
  76. if(response){
  77. response(YES, AFNetworkReachabilityStatusReachableViaWiFi);
  78. }
  79. break;
  80. }
  81. case AFNetworkReachabilityStatusReachableViaWWAN:{
  82. NSLog(@"网络通过蜂窝移动:%@",@(status) );
  83. if(response){
  84. response(YES, AFNetworkReachabilityStatusReachableViaWWAN);
  85. }
  86. // if (self.mallConfigModel == nil) {
  87. // [self getInfo_application:application didFinishLaunchingWithOptions:launchOptions];
  88. // }
  89. break;
  90. }
  91. default:
  92. break;
  93. }
  94. }];
  95. [afNetworkReachabilityManager startMonitoring]; //开启网络监视器;
  96. }
  97. @end