1
votes

I am having trouble to Create a contact in google using google api v3. I can successfully call cr.GetContacts() to get all the contacts (for the user I'm specifying), but cr.Insert is giving me the error:

Execution of request failed: https://www.google.com/m8/feeds/contacts/[email protected]/full

Am I missing something?

    string serviceAccountEmail = "111111111111-aaaa1a1aa11a1aaaaaaa11aaaa1aaa11@developer.gserviceaccount.com";
    X509Certificate2 certificate = new X509Certificate2(@"C:\All\ContactsManager-1aa1bbb1ab11.p12", "notasecret", X509KeyStorageFlags.Exportable);

    ServiceAccountCredential credential = new ServiceAccountCredential(new ServiceAccountCredential.Initializer(serviceAccountEmail)
    {
        Scopes = new[]
            {
                "https://www.google.com/m8/feeds"
            },
        User = "[email protected]"
    }.FromCertificate(certificate));

    credential.RequestAccessTokenAsync(System.Threading.CancellationToken.None).Wait();

    RequestSettings rs = new RequestSettings("ContactsManager", credential.Token.AccessToken);
    //rs.AutoPaging = true;

    ContactsRequest cr = new ContactsRequest(rs);
    //var contacts = cr.GetContacts();  //////THIS LINE WORKS AND GETS ALL THE CONTACTS

    Uri feedUri = new Uri(ContactsQuery.CreateContactsUri("[email protected]"));
    //feedUri will now be    https://www.google.com/m8/feeds/contacts/someuser%40mydomain.com/full

    Contact createdEntry = cr.Insert(feedUri, newContact);

    Console.WriteLine("Contact's ID: " + createdEntry.Id);
1
and you gave the service account write access?DaImTo

1 Answers

1
votes

EDIT: I figured out the problem, just want to update for anybody else who has the same issue. If you followed the v3 documentation for creating a contact: they have a section on that contact entity like this:

newEntry.IMs.Add(new IMAddress()
  {
    Primary = true,
    Rel = ContactsRelationships.IsHome,
    Protocol = ContactsProtocols.IsGoogleTalk,
  });

if you remove this IMAddress, then the contact creates fine.