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);