/// <summary>
        /// 这里要替换Contact的Edit的Uri的原因是:
        /// EditUri的默认值为:           https://www.google.com/m8/feeds/contacts/{userEmail}/full
        /// 而我们的Token针对的授权Uri是:https://www.google.com/m8/feeds/contacts/default/full
        /// 对于读取某个谷歌用户的联系人的Url,正常应该要用邮箱指定当前要获取谁的联系人,但是也可以指定为default,表示默认为当前Token对应的谷歌用户。
        /// 所以,对于读取联系人时,上面这两个地址都可以,我们选择了第二种方式,因为这样做可以不需要知道用户的邮箱,代码可以通用,不用针对每个谷歌用户的邮箱生成
        /// 一个专用于操作联系人的Token;
        /// 但是当要更新时,EditUri的默认值里包含的不是default,而是一个具体的Email,这导致我们之前用defaut的方式获取的Token无法做更新或删除谷歌联系人的操作
        /// Googel也搞了,只有在读取数据时具体邮箱才可以和default值等价,而在更新数时则不能。幸亏你提供了源代码,费了好大功夫调试你的代码才知道这个原因。
        /// </summary>
        private void ReplaceContactEditUrl(global::Google.Contacts.Contact contact)
        {
            var contactId        = contact.Id;
            var updateContactUrl = GoogleSyncSettings.ContactScope + "/" + contactId.Substring(contactId.LastIndexOf('/') + 1);

            contact.ContactEntry.EditUri = new AtomUri(updateContactUrl);
        }
        /// <summary>
        /// 创建Google Contact
        /// </summary>
        private void CreateGoogleContact(GoogleContactSyncData contactData, ContactsRequest contactRequest, Group defaultContactGroup)
        {
            global::Google.Contacts.Contact contact = null;
            bool success = false;

            try
            {
                //设置联系人默认分组
                contactData.Contact.GroupMembership.Add(new GroupMembership()
                {
                    HRef = defaultContactGroup.Id
                });
                //调用API新增联系人
                contact = contactRequest.Insert(new Uri(GoogleSyncSettings.ContactScope), contactData.Contact);
                _logger.InfoFormat("新增Google联系人#{0}|{1}|{2}", contact.Id, contactData.Subject, _account.ID);
                success = true;
            }
            catch (Exception ex)
            {
                _logger.Error("CreateGoogleContact has exception.", ex);
            }

            if (success)
            {
                //更新联系人最后更新时间,确保与Google Contact的最后更新时间一致
                UpdateContactLastUpdateTime(int.Parse(contactData.SyncId), contact.Updated.ToLocalTime());

                //创建同步信息
                SyncInfo syncInfo = new SyncInfo();
                syncInfo.AccountId    = _account.ID;
                syncInfo.LocalDataId  = contactData.SyncId;
                syncInfo.SyncDataId   = contact.Id;
                syncInfo.SyncDataType = contactData.SyncType;
                InsertSyncInfo(syncInfo);
            }
        }