Objective-C
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
#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.");