Sample code for 30+ languages & platforms
Objective-C

Google Contacts - Create New Contact

See more Google APIs Examples

Demonstrates how to create a new contact for the Google Contacts API.

Chilkat Objective-C Downloads

Objective-C
#import <CkoXml.h>
#import <CkoJsonObject.h>
#import <CkoAuthGoogle.h>
#import <CkoRest.h>
#import <CkoStringBuilder.h>

BOOL success = NO;

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

// First create a new contact XML.
CkoXml *xml = [[CkoXml alloc] init];
xml.Tag = @"atom:entry";
[xml AddAttribute: @"xmlns:atom" value: @"http://www.w3.org/2005/Atom"];
[xml AddAttribute: @"xmlns:gd" value: @"http://schemas.google.com/g/2005"];
[xml UpdateAttrAt: @"atom:category" autoCreate: YES attrName: @"scheme" attrValue: @"http://schemas.google.com/g/2005#kind"];
[xml UpdateAttrAt: @"atom:category" autoCreate: YES attrName: @"term" attrValue: @"http://schemas.google.com/contact/2008#contact"];
[xml UpdateChildContent: @"gd:name|gd:givenName" value: @"Elizabeth"];
[xml UpdateChildContent: @"gd:name|gd:familyName" value: @"Bennet"];
[xml UpdateChildContent: @"gd:name|gd:fullName" value: @"Elizabeth Bennet"];
[xml UpdateAttrAt: @"atom:content" autoCreate: YES attrName: @"type" attrValue: @"text"];
[xml UpdateChildContent: @"atom:content" value: @"Notes"];
[xml UpdateAttrAt: @"gd:email" autoCreate: YES attrName: @"rel" attrValue: @"http://schemas.google.com/g/2005#work"];
[xml UpdateAttrAt: @"gd:email" autoCreate: YES attrName: @"primary" attrValue: @"true"];
[xml UpdateAttrAt: @"gd:email" autoCreate: YES attrName: @"address" attrValue: @"liz@gmail.com"];
[xml UpdateAttrAt: @"gd:email" autoCreate: YES attrName: @"displayName" attrValue: @"E. Bennet"];
[xml UpdateAttrAt: @"gd:email" autoCreate: YES attrName: @"rel" attrValue: @"http://schemas.google.com/g/2005#home"];
[xml UpdateAttrAt: @"gd:email" autoCreate: YES attrName: @"address" attrValue: @"liz@example.org"];
[xml UpdateAttrAt: @"gd:phoneNumber" autoCreate: YES attrName: @"rel" attrValue: @"http://schemas.google.com/g/2005#work"];
[xml UpdateAttrAt: @"gd:phoneNumber" autoCreate: YES attrName: @"primary" attrValue: @"true"];
[xml UpdateChildContent: @"gd:phoneNumber" value: @"(206)555-1212"];
[xml UpdateAttrAt: @"gd:phoneNumber" autoCreate: YES attrName: @"rel" attrValue: @"http://schemas.google.com/g/2005#home"];
[xml UpdateChildContent: @"gd:phoneNumber" value: @"(206)555-1213"];
[xml UpdateAttrAt: @"gd:im" autoCreate: YES attrName: @"address" attrValue: @"liz@gmail.com"];
[xml UpdateAttrAt: @"gd:im" autoCreate: YES attrName: @"protocol" attrValue: @"http://schemas.google.com/g/2005#GOOGLE_TALK"];
[xml UpdateAttrAt: @"gd:im" autoCreate: YES attrName: @"primary" attrValue: @"true"];
[xml UpdateAttrAt: @"gd:im" autoCreate: YES attrName: @"rel" attrValue: @"http://schemas.google.com/g/2005#home"];
[xml UpdateAttrAt: @"gd:structuredPostalAddress" autoCreate: YES attrName: @"rel" attrValue: @"http://schemas.google.com/g/2005#work"];
[xml UpdateAttrAt: @"gd:structuredPostalAddress" autoCreate: YES attrName: @"primary" attrValue: @"true"];
[xml UpdateChildContent: @"gd:structuredPostalAddress|gd:city" value: @"Mountain View"];
[xml UpdateChildContent: @"gd:structuredPostalAddress|gd:street" value: @"1600 Amphitheatre Pkwy"];
[xml UpdateChildContent: @"gd:structuredPostalAddress|gd:region" value: @"CA"];
[xml UpdateChildContent: @"gd:structuredPostalAddress|gd:postcode" value: @"94043"];
[xml UpdateChildContent: @"gd:structuredPostalAddress|gd:country" value: @"United States"];
[xml UpdateChildContent: @"gd:structuredPostalAddress|gd:formattedAddress" value: @"1600 Amphitheatre Pkwy Mountain View"];

NSLog(@"%@",[xml GetXml]);

// Created the following XML:

// 	<?xml version="1.0" encoding="utf-8" ?>
// 	<atom:entry xmlns:atom="http://www.w3.org/2005/Atom" xmlns:gd="http://schemas.google.com/g/2005">
// 	    <atom:category scheme="http://schemas.google.com/g/2005#kind" term="http://schemas.google.com/contact/2008#contact" />
// 	    <gd:name>
// 	        <gd:givenName>Elizabeth</gd:givenName>
// 	        <gd:familyName>Bennet</gd:familyName>
// 	        <gd:fullName>Elizabeth Bennet</gd:fullName>
// 	    </gd:name>
// 	    <atom:content type="text">Notes</atom:content>
// 	    <gd:email primary="true" displayName="E. Bennet" rel="http://schemas.google.com/g/2005#home" address="liz@example.org" />
// 	    <gd:phoneNumber primary="true" rel="http://schemas.google.com/g/2005#home">(206)555-1213</gd:phoneNumber>
// 	    <gd:im address="liz@gmail.com" protocol="http://schemas.google.com/g/2005#GOOGLE_TALK" primary="true" rel="http://schemas.google.com/g/2005#home" />
// 	    <gd:structuredPostalAddress rel="http://schemas.google.com/g/2005#work" primary="true">
// 	        <gd:city>Mountain View</gd:city>
// 	        <gd:street>1600 Amphitheatre Pkwy</gd:street>
// 	        <gd:region>CA</gd:region>
// 	        <gd:postcode>94043</gd:postcode>
// 	        <gd:country>United States</gd:country>
// 	        <gd:formattedAddress>1600 Amphitheatre Pkwy Mountain View</gd:formattedAddress>
// 	    </gd:structuredPostalAddress>
// 	</atom:entry>

// --------------------------------------------------------------------------------------------------------
// Note: The code for setting up the Chilkat REST object and making the initial connection can be done once.
// Once connected, the REST object may be re-used for many REST API calls.
// (It's a good idea to put the connection setup code in a separate function/subroutine.)
// --------------------------------------------------------------------------------------------------------

// It is assumed we previously obtained an OAuth2 access token.
// This example loads the JSON access token file 
// saved by this example: Get Google Contacts OAuth2 Access Token

CkoJsonObject *jsonToken = [[CkoJsonObject alloc] init];
success = [jsonToken LoadFile: @"qa_data/tokens/googleContacts.json"];
if (success != YES) {
    NSLog(@"%@",@"Failed to load googleContacts.json");
    return;
}

CkoAuthGoogle *gAuth = [[CkoAuthGoogle alloc] init];
gAuth.AccessToken = [jsonToken StringOf: @"access_token"];

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

// Connect using TLS.
BOOL bAutoReconnect = YES;
success = [rest Connect: @"www.google.com" port: [NSNumber numberWithInt: 443] tls: YES autoReconnect: bAutoReconnect];

// Provide the authentication credentials (i.e. the access token)
[rest SetAuthGoogle: gAuth];

// ----------------------------------------------
// OK, the REST connection setup is completed..
// ----------------------------------------------

// To create a contact, we need to send the following:

// 	POST /m8/feeds/contacts/default/full
// 	Content-Type: application/atom+xml
// 	GData-Version: 3.0

[rest AddHeader: @"Content-Type" value: @"application/atom+xml"];
[rest AddHeader: @"GData-Version" value: @"3.0"];

CkoStringBuilder *sbRequestBody = [[CkoStringBuilder alloc] init];
CkoStringBuilder *sbResponseBody = [[CkoStringBuilder alloc] init];
[xml GetXmlSb: sbRequestBody];
success = [rest FullRequestSb: @"POST" uriPath: @"/m8/feeds/contacts/default/full" requestBody: sbRequestBody responseBody: sbResponseBody];
if (success != YES) {
    NSLog(@"%@",rest.LastErrorText);
    return;
}

// A successful response will have a status code equal to 201.
if ([rest.ResponseStatusCode intValue] != 201) {
    NSLog(@"%@%d",@"response status code = ",[rest.ResponseStatusCode intValue]);
    NSLog(@"%@%@",@"response status text = ",rest.ResponseStatusText);
    NSLog(@"%@%@",@"response header: ",rest.ResponseHeader);
    NSLog(@"%@%@",@"response body: ",[sbResponseBody GetAsString]);
    return;
}

// If the 201 response was received, then the contact was successfully created,
// and there is no response body.
NSLog(@"%@",@"Contact created.");