iOS/Sample/NetworkViewController.m (101 lines of code) (raw):

/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #import "NetworkViewController.h" @interface NetworkViewController () @end @implementation NetworkViewController - (void)viewDidLoad { [super viewDidLoad]; self.navigationItem.title = @"Network"; } - (IBAction)tappedGithubLitho:(UIButton*)sender { [[[NSURLSession sharedSession] dataTaskWithURL: [NSURL URLWithString: @"https://raw.githubusercontent.com/facebook/litho/main/docs/static/logo.png"] completionHandler:^( NSData* _Nullable data, NSURLResponse* _Nullable response, NSError* _Nullable error) { if (error && !data) { return; } NSLog(@"Got Image"); }] resume]; } - (IBAction)tappedPOSTAPI:(UIButton*)sender { NSString* post = @"https://demo9512366.mockable.io/FlipperPost"; NSURL* url = [NSURL URLWithString:post]; NSMutableURLRequest* urlRequest = [NSMutableURLRequest requestWithURL:url]; [urlRequest addValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; [urlRequest addValue:@"application/json" forHTTPHeaderField:@"Accept"]; NSDictionary* mapData = [[NSDictionary alloc] initWithObjectsAndKeys:@"Flipper", @"app", @"Its awesome", @"remarks", nil]; NSError* error = nil; NSData* postData = [NSJSONSerialization dataWithJSONObject:mapData options:0 error:&error]; [urlRequest setHTTPBody:postData]; [urlRequest setHTTPMethod:@"POST"]; __weak NetworkViewController* weakSelf = self; [[[NSURLSession sharedSession] dataTaskWithRequest:urlRequest completionHandler:^( NSData* _Nullable data, NSURLResponse* _Nullable response, NSError* _Nullable dataTaskError) { if (dataTaskError || !data) { [weakSelf showAlertWithMessage:@"Received error in POST API response"]; return; } NSDictionary* dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:&dataTaskError]; NSLog(@"MSG-POST: %@", dict[@"msg"]); [weakSelf showAlertWithMessage:@"Received response from POST API"]; }] resume]; } - (IBAction)tappedGetAPI:(UIButton*)sender { __weak NetworkViewController* weakSelf = self; [[[NSURLSession sharedSession] dataTaskWithURL: [NSURL URLWithString:@"https://demo9512366.mockable.io/FlipperGet"] completionHandler:^( NSData* _Nullable data, NSURLResponse* _Nullable response, NSError* _Nullable error) { if (error || !data) { [weakSelf showAlertWithMessage:@"Received error in GET API response"]; return; } NSDictionary* dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:&error]; NSLog(@"MSG-GET: %@", dict[@"msg"]); [weakSelf showAlertWithMessage:@"Received response from GET API"]; }] resume]; } - (void)showAlertWithMessage:(nonnull NSString*)msg { dispatch_async(dispatch_get_main_queue(), ^{ UIAlertController* alertController = [self alertControllerForMessage:msg]; [self presentViewController:alertController animated:true completion:nil]; }); } - (UIAlertController*)alertControllerForMessage:(nonnull NSString*)msg { UIAlertController* controller = [UIAlertController alertControllerWithTitle:@"Flipper" message:msg preferredStyle:UIAlertControllerStyleAlert]; UIAlertAction* action = [UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleDefault handler:nil]; [controller addAction:action]; return controller; } @end