Saturday, 30 July 2016

API Helper Class File

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

NS_ASSUME_NONNULL_BEGIN

@interface APIHelper : NSObject

+ (nullable NSURLSessionDataTask *)GET:(NSString *)APIName
                            parameters:(nullable id)parameters
                              progress:(nullable void (^)(NSProgress *downloadProgress)) downloadProgressBlock
                               success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))successBlock
                               failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failureBlock;

+ (nullable NSURLSessionDataTask *)POST:(NSString *)APIName
                             parameters:(nullable id)parameters
              constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))constructBodyBlock
                               progress:(nullable void (^)(NSProgress *uploadProgress)) uploadProgressBlock
                                success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))successBlock
                                failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failureBlock;

@end

NS_ASSUME_NONNULL_END




------------- APIHelper.m --------------

#import "APIHelper.h"


@implementation APIHelper

+ (AFHTTPSessionManager *)sessionManager{
    
    // Get Manager
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    
    // Add Acceptable Content type
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html",@"application/json",nil];
    
    [manager.requestSerializer setValue:@"d4024c848c16e1cdbfc06b3217db72cb"
                     forHTTPHeaderField:@"X-Auth"
     ];
        
    return manager;
}

+ (NSString *)urlForAPI:(NSString *)APIName{
    
    NSString *apiUrl    = [NSString stringWithFormat:@"%@%@",kApiServer,APIName];
  
    return apiUrl;
}

/*+ (NSDictionary *)formFieldParameters:(NSDictionary *)parameters{
    
    NSMutableDictionary *apiParams = [NSMutableDictionary new];
    
//    [apiParams setObject:@1 forKey:@"customer_device"];
//    
//    NSString *deviceToken = KDEVICETOKEN;
//    if (deviceToken.length > 0) {
//        [apiParams setObject:deviceToken forKey:@"customer_regid"];
//    }
//    deviceToken = nil;
    
    for (NSString *paramName in parameters) {
        
        id paramValue = [parameters objectForKey:paramName];
        
        if ([paramValue isKindOfClass:[NSString class]]) {
            [apiParams setObject:paramValue forKey:paramName];
        }
        
    }
    
    NSLog(@"apiParams: is %@",apiParams);
    
    return [NSDictionary dictionaryWithDictionary:apiParams];
}

+ (id<AFMultipartFormData>)formData:(id<AFMultipartFormData>)formData appendMultipartData:(NSDictionary *)parameters{
    
    // Iterate all parameters
    for (NSString *paramName in parameters) {
        
        id paramValue = [parameters objectForKey:paramName];
        
        if ([paramValue isKindOfClass:[UIImage class]]) {
            
            NSData *imageData   = UIImageJPEGRepresentation((UIImage *)paramValue, 1.0);
            
            [formData appendPartWithFileData:imageData
                                        name:paramName
                                    fileName:[NSString stringWithFormat:@"%@.jpeg",paramName]
                                    mimeType:@"image/jpeg"
             ];
            
        }else{
            
        }
        
    }
    
    NSLog(@"formData is %@",formData);
    
    return formData;
}*/

+ (nullable NSURLSessionDataTask *)GET:(NSString *)APIName
                            parameters:(nullable id)parameters
                              progress:(nullable void (^)(NSProgress *downloadProgress)) downloadProgressBlock
                               success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))successBlock
                               failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failureBlock{

    // Get Manager
    AFHTTPSessionManager *manager = [self sessionManager];
    
    NSURLSessionDataTask *task = [manager GET:[self urlForAPI:APIName]
                                   parameters:parameters
                                     progress:^(NSProgress * _Nonnull downloadProgress) {
                                                downloadProgressBlock(downloadProgress);
                                     }success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
                                         successBlock(task,responseObject);
                                     }failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
                                         failureBlock(task,error);
                                     }
                                  ];
    
    return task;
    
}

+ (nullable NSURLSessionDataTask *)POST:(NSString *)APIName
                             parameters:(nullable id)parameters
              constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))constructBodyBlock
                               progress:(nullable void (^)(NSProgress *uploadProgress)) uploadProgressBlock
                                success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))successBlock
                                failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failureBlock{
    
    // Get Manager
    AFHTTPSessionManager *manager = [self sessionManager];
    
    NSURLSessionDataTask *task = [manager POST:[self urlForAPI:APIName]
                                    parameters:parameters
                     constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
                         constructBodyBlock(formData);
                     } progress:^(NSProgress * _Nonnull uploadProgress) {
                         uploadProgressBlock(uploadProgress);
                     } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
                         successBlock(task,responseObject);
                     } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
                         failureBlock(task,error);
                     }
                                  ];
    
    return task;
    
}

@end

No comments:

Post a Comment