Sample code for 30+ languages & platforms
Objective-C

Google Maps Geolocation Request

See more REST Examples

Demonstrates how make a Google Maps Geolocation REST API request.

Chilkat Objective-C Downloads

Objective-C
#import <CkoRest.h>
#import <CkoJsonObject.h>
#import <CkoJsonArray.h>
#import <NSString.h>

BOOL success = NO;

// This example duplicates the following CURL request:
// curl -d @your_filename.json -H "Content-Type: application/json" -i "https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY"

// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.

CkoRest *rest = [[CkoRest alloc] init];

// Connect to the Google API REST server.
BOOL bTls = YES;
int port = 443;
BOOL bAutoReconnect = YES;
success = [rest Connect: @"www.googleapis.com" port: [NSNumber numberWithInt: port] tls: bTls autoReconnect: bAutoReconnect];

// Add the Content-Type request header.
[rest AddHeader: @"Content-Type" value: @"application/json"];

// Add your API key as a query parameter
[rest AddQueryParam: @"key" value: @"YOUR_API_KEY"];

// The JSON query is contained in the body of the HTTP POST.
// This is a sample query (which we'll dynamically build in this example)
// { 
//  "homeMobileCountryCode": 310,
//  "homeMobileNetworkCode": 260,
//  "radioType": "gsm",
//  "carrier": "T-Mobile",
//  "cellTowers": [
//   {
//    "cellId": 39627456,
//    "locationAreaCode": 40495,
//    "mobileCountryCode": 310,
//    "mobileNetworkCode": 260,
//    "age": 0,
//    "signalStrength": -95
//   }
//  ],
//  "wifiAccessPoints": [
//   { 
//    "macAddress": "01:23:45:67:89:AB",
//    "signalStrength": 8,
//    "age": 0,
//    "signalToNoiseRatio": -65,
//    "channel": 8
//   },
//   { 
//    "macAddress": "01:23:45:67:89:AC",
//    "signalStrength": 4,
//    "age": 0
//   }
//  ]
// }

CkoJsonObject *json = [[CkoJsonObject alloc] init];
[json AppendInt: @"homeMobileCountryCode" value: [NSNumber numberWithInt: 310]];
[json AppendInt: @"homeMobileNetworkCode" value: [NSNumber numberWithInt: 260]];
[json AppendString: @"radioType" value: @"gsm"];
[json AppendString: @"carrier" value: @"T-Mobile"];

CkoJsonArray *aCellTowers = [[CkoJsonArray alloc] init];
[json AppendArray2: @"cellTowers" jarr: aCellTowers];

CkoJsonObject *oCellTower = [[CkoJsonObject alloc] init];
[aCellTowers AddObjectAt2: [NSNumber numberWithInt: 0] json: oCellTower];
[oCellTower AppendInt: @"cellId" value: [NSNumber numberWithInt: 39627456]];
[oCellTower AppendInt: @"locationAreaCode" value: [NSNumber numberWithInt: 40495]];
[oCellTower AppendInt: @"mobileCountryCode" value: [NSNumber numberWithInt: 310]];
[oCellTower AppendInt: @"mobileNetworkCode" value: [NSNumber numberWithInt: 260]];
[oCellTower AppendInt: @"age" value: [NSNumber numberWithInt: 0]];
[oCellTower AppendInt: @"signalStrength" value: [NSNumber numberWithInt: -95]];

CkoJsonArray *aWifi = [[CkoJsonArray alloc] init];
[json AppendArray2: @"wifiAccessPoints" jarr: aWifi];

CkoJsonObject *oPoint = [[CkoJsonObject alloc] init];
[aWifi AddObjectAt2: [NSNumber numberWithInt: 0] json: oPoint];
[oPoint AppendString: @"macAddress" value: @"01:23:45:67:89:AB"];
[oPoint AppendInt: @"signalStrength" value: [NSNumber numberWithInt: 8]];
[oPoint AppendInt: @"age" value: [NSNumber numberWithInt: 0]];
[oPoint AppendInt: @"signalToNoiseRatio" value: [NSNumber numberWithInt: -65]];
[oPoint AppendInt: @"channel" value: [NSNumber numberWithInt: 8]];

[aWifi AddObjectAt2: [NSNumber numberWithInt: 1] json: oPoint];
[oPoint AppendString: @"macAddress" value: @"01:23:45:67:89:AC"];
[oPoint AppendInt: @"signalStrength" value: [NSNumber numberWithInt: 4]];
[oPoint AppendInt: @"age" value: [NSNumber numberWithInt: 0]];

NSString *responseJson = [rest FullRequestString: @"POST" uriPath: @"/geolocation/v1/geolocate" bodyText: [json Emit]];
if (rest.LastMethodSuccess == NO) {
    NSLog(@"%@",rest.LastErrorText);
    return;
}

// When successful, the response code is 200.
if ([rest.ResponseStatusCode intValue] != 200) {
    // Examine the request/response to see what happened.
    NSLog(@"%@%d",@"response status code = ",[rest.ResponseStatusCode intValue]);
    NSLog(@"%@%@",@"response status text = ",rest.ResponseStatusText);
    NSLog(@"%@%@",@"response header: ",rest.ResponseHeader);
    NSLog(@"%@%@",@"response JSON: ",responseJson);
    NSLog(@"%@",@"---");
    NSLog(@"%@%@",@"LastRequestStartLine: ",rest.LastRequestStartLine);
    NSLog(@"%@%@",@"LastRequestHeader: ",rest.LastRequestHeader);
    return;
}

json.EmitCompact = NO;
NSLog(@"%@%@",@"JSON request body: ",[json Emit]);

// The JSON response should look like this:
// { 
//  "location": {
//   "lat": 37.4248297,
//   "lng": -122.07346549999998
//  },
//  "accuracy": 1145.0
// }

NSLog(@"%@%@",@"JSON response: ",responseJson);

CkoJsonObject *jsonResp = [[CkoJsonObject alloc] init];
[jsonResp Load: responseJson];

CkoJsonObject *jsonLoc = [[CkoJsonObject alloc] init];
[jsonResp ObjectOf2: @"location" jsonObj: jsonLoc];

// Any JSON value can be obtained as a string..
NSString *latitude = [jsonLoc StringOf: @"lat"];
NSLog(@"%@%@",@"latitude = ",latitude);
NSString *longitude = [jsonLoc StringOf: @"lng"];
NSLog(@"%@%@",@"longitude = ",longitude);

NSString *accuracy = [jsonResp StringOf: @"accuracy"];
NSLog(@"%@%@",@"accuracy = ",accuracy);