Friday, 2 March 2018

web service calling best way



APIMANAGER.H

#import <Foundation/Foundation.h>
#import <AFNetworking/AFHTTPSessionManager.h>

@interface APIManager : AFHTTPSessionManager
+(void)  startNetworkMonitoring ;
+(BOOL)  Connected;
+(id)_sharedAPIManager;

-(void)postRequest:(NSString *)urlStr parameters:(NSDictionary *)parametersDictionary completionHandler:(void (^)(NSError*, NSDictionary*))completionBlock;
-(void)getRequest:(NSString *)urlStr parameters:(NSDictionary *)parametersDictionary completionHandler:(void (^)(NSError*, NSDictionary*))completionBlock;


@end







//
//  APIManager.m
//  CREWZ
//
//  Created by Amruta on 19/09/17.
//  Copyright © 2017 Optim. All rights reserved.
//

#import "APIManager.h"
#import <AFNetworking/AFHTTPSessionManager.h>

#import "CommonFunctions.h"
@implementation APIManager

//let _sharedAPIManager = APIManager(baseURL: NSURL(string: WebServiceURL))
static  APIManager *_sharedAPIManager;

+(id)_sharedAPIManager
{
    if (!_sharedAPIManager)
    {
        _sharedAPIManager = [[APIManager alloc]init];
    }
    
    return  _sharedAPIManager;
    
}
//    override init(baseURL url: NSURL!, sessionConfiguration session:NSURLSessionConfiguration? ) {

- (instancetype)initWithBaseURL:(nullable NSURL *)url
           sessionConfiguration:(nullable NSURLSessionConfiguration *)configuration
{
    self = [super initWithBaseURL:url sessionConfiguration:configuration];
    self.responseSerializer = [AFHTTPResponseSerializer serializer];
    self.requestSerializer = [AFJSONRequestSerializer serializer];
    //    super.init(baseURL: url, sessionConfiguration: session)
    //  self.responseSerializer = AFJSONResponseSerializer() as AFJSONResponseSerializer
    //self.requestSerializer = AFJSONRequestSerializer() as AFJSONRequestSerializer
    
    return self;
}

-(void)postRequest:(NSString *)urlStr parameters:(NSDictionary *)parametersDictionary completionHandler:(void (^)(NSError*, NSDictionary*))completionBlock{
    
    NSURL *URL = [NSURL URLWithString:[WEBSERVICE_URL stringByAppendingString:urlStr]];
    //    request header
    //
    // Client-Service:frontend-client
    //        Auth-Key:beautyfaceapi
    //        Authorization:Basic c3lzdGVtOm1hbmFnZXI=
    //        Content-Type:application/json
    //
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    
    [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    
    
    
    NSDictionary *dicHeaders  = [[CommonFunctions sharedInstance] getHeaders:urlStr];
    
    for(NSString *strKey in [dicHeaders allKeys])
    {
        [manager.requestSerializer setValue:[dicHeaders valueForKey:strKey] forHTTPHeaderField:strKey];
        
    }
    [manager POST:URL.absoluteString parameters:parametersDictionary progress:nil success:^(NSURLSessionDataTask *task, id responseObject) {
        NSError* error;
        
        NSMutableDictionary* json = (NSMutableDictionary *)[NSJSONSerialization JSONObjectWithData:responseObject
                                                                                           options:kNilOptions
                                                                                             error:&error];
        NSLog(@"Success %@", json);
        //get response
        NSMutableDictionary *resposneData = [[NSMutableDictionary alloc]initWithDictionary:json copyItems:YES];
        //get haeder
        NSHTTPURLResponse *response = ((NSHTTPURLResponse *)[task response]);
        
        NSDictionary *headers = [response allHeaderFields];
        
        [resposneData setValue:headers forKey:@"header"];
        
        // NSLog(@"Success headers%@", headers);
        
        completionBlock(nil,resposneData);
    } failure:^(NSURLSessionDataTask *task, NSError *error) {
        NSHTTPURLResponse *response = (NSHTTPURLResponse *) [task response];
        NSInteger statusCode = [response statusCode];
        NSLog(@"RESPONSE CODE: %li", (long)statusCode);
        
        NSMutableDictionary *dicRes = [[NSMutableDictionary alloc]init];
        [dicRes setObject:[NSString stringWithFormat:@"%li",statusCode] forKey:@"status"];
        
        NSLog(@"Error: %@", error);
        completionBlock(error,dicRes);
    }];
}

-(void)getRequest:(NSString *)urlStr parameters:(NSDictionary *)parametersDictionary completionHandler:(void (^)(NSError*, NSDictionary*))completionBlock{
    
    NSURL *URL = [NSURL URLWithString:[WEBSERVICE_URL stringByAppendingString:urlStr]];
    
    //    request header
    //
    // Client-Service:frontend-client
    //        Auth-Key:beautyfaceapi
    //        Authorization:Basic c3lzdGVtOm1hbmFnZXI=
    //        Content-Type:application/json
    //
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    manager.requestSerializer = [AFJSONRequestSerializer serializer];
    
    [manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    
    NSDictionary *dicHeaders  = [[CommonFunctions sharedInstance] getHeaders:urlStr];
    
    for(NSString *strKey in [dicHeaders allKeys])
    {
        [manager.requestSerializer setValue:[dicHeaders valueForKey:strKey] forHTTPHeaderField:strKey];
        
    }
    
    [manager GET:URL.absoluteString parameters:parametersDictionary progress:nil success:^(NSURLSessionDataTask *task, id responseObject) {
        NSError* error;
        NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseObject
                                                             options:kNilOptions
                                                               error:&error];
        NSLog(@"Success %@", json);
        
        completionBlock(nil,json);
    } failure:^(NSURLSessionDataTask *task, NSError *error)
     {
         NSHTTPURLResponse *response = (NSHTTPURLResponse *) [task response];
         NSInteger statusCode = [response statusCode];
         NSLog(@"RESPONSE CODE: %li", (long)statusCode);
         
         NSMutableDictionary *dicRes = [[NSMutableDictionary alloc]init];
         [dicRes setObject:[NSString stringWithFormat:@"%li",statusCode] forKey:@"status"];
         
         NSLog(@"Error: %@", error);
         completionBlock(error,dicRes);
     }];
}


static id _sharedAPIManager ;

+(void)  startNetworkMonitoring {
    [[AFNetworkReachabilityManager sharedManager] startMonitoring];
}

+(BOOL)  Connected{
    return [[AFNetworkReachabilityManager sharedManager] isReachable];
}


@end




//
//  WebHelper.h
//  CREWZ
//
//  Created by Amruta on 15/09/17.
//  Copyright © 2017 Optim. All rights reserved.
//

#import <Foundation/Foundation.h>

@protocol WebHelperDelegate <NSObject>

-(void) didFinishLoadingData:(NSString *) strWebMethod  data:(NSDictionary *)data ;
-(void) didFailed:(NSString *) strWebMethod  data:(NSDictionary *)data ;

@end

@interface WebHelper : NSObject
{
    
}
@property (nonatomic, retain) id <WebHelperDelegate> _webdelegate;

-(WebHelper *)initWeb;

-(void)postData:strAPIName parameters:dicParameter;
-(void)getData:strAPIName parameters:dicParameter;

@end




#import "WebHelper.h"
#import <AFNetworking.h>
#import "APIManager.h"
#import <SVProgressHUD.h>
#import "PrefixHeader.pch"

@implementation WebHelper


-(WebHelper *)initWeb
{
    return [[WebHelper alloc]init];
}
-(void)postData:strAPIName parameters:dicParameter {
    @try {
        
        // NSLog(@"Parameters = %@", dicParameter);
        //        for (id key in dicParameter)
        //        {
        //            NSLog(@"key: %@, value: %@ \n", key, [dicParameter objectForKey:key]);
        //        }
        //
        if ([APIManager Connected])
        {
            [SVProgressHUD showWithStatus:Please_Wait_Msg];
            [SVProgressHUD setDefaultMaskType:SVProgressHUDMaskTypeBlack];
            
            //call post
            [[APIManager _sharedAPIManager] postRequest:strAPIName parameters:dicParameter completionHandler:^(NSError *error , NSDictionary *dicResponse)
             {
                 
                 if(!error)//success
                 {
                     [SVProgressHUD dismiss];
                     
                     if([[dicResponse valueForKey:@"status"] intValue] == 1)
                     {
                         
                         [self._webdelegate didFinishLoadingData:strAPIName data:dicResponse];
                     } else if ([[dicResponse valueForKey:@"status"] intValue] == 21)
                     {
                         [self._webdelegate didFinishLoadingData:strAPIName data:dicResponse];
                    
                     }
                     else
                     {
                         [self._webdelegate didFailed:strAPIName data:dicResponse];
                         
                     }
                     
                 }
                 else //failure
                 {
                     [SVProgressHUD dismiss];
                     
                     [self._webdelegate didFailed:strAPIName data:dicResponse];
                     
                 }
                 
             }];
            
        }
        else
        {
            [self._webdelegate didFailed:strAPIName data:[NSDictionary dictionaryWithObjectsAndKeys:NO_InternetConnectivy_Msg, @"message" ,  nil]];
            
            
        }
        
        
        
        
    } @catch (NSException *exception) {
        
        NSLog(@"exception = %@", exception.description);
        
    } @finally {
        
    }
    
}

-(void)getData:strAPIName parameters:dicParameter{
    @try {
        
        //        if ([APIManager Connected])
        //        {
        [SVProgressHUD showWithStatus:Please_Wait_Msg];
        [SVProgressHUD setDefaultMaskType:SVProgressHUDMaskTypeBlack];
        
        
        //call get
        [[APIManager _sharedAPIManager] getRequest:strAPIName parameters:dicParameter completionHandler:^(NSError *error , NSDictionary *dicResponse)
         {
             
             if(!error)//success
             {
                 [SVProgressHUD dismiss];
                 
                 if([[dicResponse valueForKey:@"status"] intValue] == 1)
                 {
                     
                     [self._webdelegate didFinishLoadingData:strAPIName data:dicResponse];
                 }
                 else
                 {
                     [self._webdelegate didFailed:strAPIName data:dicResponse];
                     
                 }
                 
             }
             else //failure
             {
                 [SVProgressHUD dismiss];
                 
                 [self._webdelegate didFailed:strAPIName data:dicResponse];
                 
             }
             
         }];
        
        //}
        //        else
        //        {
        //            [self._webdelegate didFailed:strAPIName data:[NSDictionary dictionaryWithObjectsAndKeys:NO_InternetConnectivy_Msg, @"message" ,  nil]];
        //
        //
        //        }
        
        
        
        
    } @catch (NSException *exception) {
        NSLog(@"exception = %@", exception.description);
    } @finally {
        
    }
    
}
@end






IN CONTROLLER



- (IBAction)singUpClicked:(id)sender {
    
    [self resignKeybords];
    
    if(![self validateSignup])
    {
        return;
    }
    
    /*
     {
     "bFirstName":"Kuldeep",
     "bLastName":"Sonawane",
     "bEmail":"sonawane.kuldeep12@gmail.com",
     "bPassword":"kuldeep@123",
     "bPhoneNo":"9665813011",
     "bCity":"Nashik"
     
     }*/
    
    
    
    NSMutableDictionary *dicParameter = [[NSMutableDictionary alloc]init];
    [dicParameter setObject:_txtFirstName.text forKey:@"bFirstName"];
    [dicParameter setObject:_txtLastName.text forKey:@"bLastName"];
    [dicParameter setObject:[_txtEmail.text lowercaseString] forKey:@"bEmail"];
    [dicParameter setObject:_txtPassword.text forKey:@"bPassword"];
    [dicParameter setObject:_txtMobileNumber.text forKey:@"bPhoneNo"];
    [dicParameter setObject:_txtCity.text forKey:@"bCity"];
    WebHelper *web1 = [[WebHelper alloc]init];
    web1._webdelegate = self;
    [web1 postData:userSignup parameters:dicParameter];
    
    
}





#pragma mark Web delegate methods
-(void) didFinishLoadingData:(NSString *) strWebMethod  data:(NSDictionary *)dicResponse
{
    
    
    NSString  *strMessage = [dicResponse valueForKey:@"message"];
    
    [self.navigationController popViewControllerAnimated:YES];
    
    [[CommonFunctions sharedInstance] showAlertView:strMessage view:[[CommonFunctions sharedInstance] getAppDelegateInstance].loginController];

}

-(void) didFailed:(NSString *) strWebMethod  data:(NSDictionary *)dicResponse statusCode:(NSInteger )strStatusCode
{
    
    if (strStatusCode == blockedUserCode)
    {
        
        NSString *strMessage = Blocked_User_msg;
        
        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"" message:strMessage preferredStyle:UIAlertControllerStyleAlert];
        UIAlertAction *okAction = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action){
            //do something when click button
            
            // [[CommonFunctions sharedInstance] resetUserDetails];
            //   exit(0);
        }];
        
        [alertController addAction:okAction];
        
        [self presentViewController:alertController animated:YES completion:nil];
    }
    else
    {
        NSString *strMessage = [dicResponse valueForKey:@"message"];
        if(strMessage.length==0)
        {
            strMessage = Request_Failed_Msg;
        }
        
        [[CommonFunctions sharedInstance] showAlertView:strMessage view:self];
    }
}


Dependency Manager in iOS

What is Dependency Management? When working in iOS, there are plenty of amazing third party libraries that we can use to save us time an...