Отправить запрос, когда интернет активен из неактивного состояния Afnetworking 3.0

Как этого добиться, когда появится интернет, отправить запрос, до этого ставить в очередь. Мой код менеджера сеансов выглядит примерно так:

- (void)communicateUsingPOSTMethod:(NSString*)pBaseURL parameterDictionary:(id)pParameterDictionary
                       success:(void(^)(id successResponse))pSuccessCallback failure:(void(^)(NSError* error))pFailiureCallback {

NSMutableURLRequest *req = [[AFJSONRequestSerializer serializer] requestWithMethod:@"POST" URLString:pBaseURL parameters:pParameterDictionary error:nil];
[req setValue:@"text/plain" forHTTPHeaderField:@"Content-Type"];
[req setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[req addValue:@"text/plain" forHTTPHeaderField:@"Accept"];

if ([GSCommonUtil isUserLoggedIn]) {
    [req setValue:authenticationHeader forHTTPHeaderField:@"Authorization"];
    [req setValue:[GSCommonUtil currentTimeZoneId] forHTTPHeaderField:@"Accept-Timezone"];
}

NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:pParameterDictionary options:0 error:&error];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
[req setHTTPBody:[jsonString dataUsingEncoding:NSUTF8StringEncoding]];

[[_sessionManager dataTaskWithRequest:req completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
    if (!error) {
        pSuccessCallback(responseObject);
    } else {
        pFailiureCallback(error);
    }
}] resume];
}

И я использую класс достижимости для проверки интернет-соединения. Который выглядит примерно так,

+ (BOOL)isNetworkConnected {
    Reachability *internet = [Reachability     reachabilityWithHostName:@"www.google.com"];
    NetworkStatus netStatus = [internet currentReachabilityStatus];
    bool netConnection = false;

switch (netStatus) {
    case NotReachable: {
        netConnection = false;
        break;
    }
    case ReachableViaWWAN: {
        netConnection = true;
        break;
    }
    case ReachableViaWiFi: {
        netConnection = true;
        break;
    }
}
    return netConnection;
}

Там было много предложений, которые сказали, использовать AFNetworkReachabilityManager, Как это поможет в достижении моей цели?

Каковы будут правильные шаги, чтобы сделать это?

1 ответ

Я думаю, что вам нужен наблюдатель для вашей сети. (извините, у меня есть только Swift пример кода)

let reach = Reachability.reachabilityForInternetConnection()

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

    NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(networkChanged), name: kReachabilityChangedNotification, object: reach)
    reach.startNotifier()
    let connected = internetReachability.currentReachabilityStatus().value == 0 ? false : true
    // do stuffs if connected
    return true
}

func networkChanged() {
    let connected = reach.currentReachabilityStatus().value == 0 ? false : true
    // do stuffs if connected
}
Другие вопросы по тегам