C#google联系api删除了联系人

时间:2014-12-16 15:55:41

标签: c# events outlook history google-contacts

目前我正在编写一个outlook插件,用于将goolge联系人与outlook同步,但我必须介绍一些特殊情况:

当在谷歌方面删除联系人时,我的应用程序会检测到丢失的联系人,并根据Outlook中的联系人信息创建新联系人。 有没有办法从谷歌获取事件或历史记录,告诉我用户删除了这个联系人?

编辑1: 这是我的代码如何访问联系人(什么工作FINE):

public GoogleAccessor()
{
    var parameters = new OAuth2Parameters()
    {
        ClientId = CLIENTID,
        ClientSecret = CLIENTSECRET,
        RedirectUri = REDIRECTURI,
        Scope = SCOPES
    };

    string url = OAuthUtil.CreateOAuth2AuthorizationUrl(parameters);
    //An own webbrowser for processing the access tokens
    IAuthorizationCodeProvider authcodeProvider = new Presentation.BrowserAuthorizationCodeProvider(new Presentation.BrowserAuthentificatorVM());
    parameters.AccessCode = authcodeProvider.GetAuthorizationCode(url);

    if(parameters.AccessCode == null)
        throw new GoogleOAuthException("AccesCode returned 'null' and failed!");

    OAuthUtil.GetAccessToken(parameters);

    this._contactsRequest = new ContactsRequest(new RequestSettings(APPLICATIONNAME, parameters) {AutoPaging = true});
}
public IList<IContact> GetAllMappedContacts()
{
    Feed<Google.Contacts.Contact> f = _contactsRequest.GetContacts();
    this._feedUri = new Uri(f.AtomFeed.Feed);
    var photoList = new List<PhotoObject>();

    foreach (var entry in f.Entries)
    {
        var photoObject = GetContactPhoto(entry);
        if(photoObject != null)
            photoList.Add(photoObject);
    }
    _googleMapper = new GoogleMapper(f.Entries);
    return _googleMapper.MapToLocalContacts();;
}

1 个答案:

答案 0 :(得分:0)

关于同步的事情一般是同步通常意味着在一个方向上工作。

来源数据 - &gt;数据流 - &gt;收到的数据。

在这种情况下,Outlook是您的源数据,Google是您收到的数据。所有信息都需要来自您的来源。由于这是一个Outlook加载项,因此您创建我的建议是添加一个按钮到您的加载项功能区。你可以随意调用按钮(也许是“dontSyncButton”),但它的目的是成为你的联系人的分类。

使其成为当选择联系人然后单击按钮时,联系人将获得特殊分类(可能是“Dont Sync”)。

现在为执行同步的代码提供一些逻辑,并让逻辑决定是否同步联系人。此外,如果联系人包含特殊类别,请给出一些逻辑来告诉程序删除Google中的联系人。下面的半伪代码:

 if(contact.Categories.ToString() == "Dont Sync")
 {
     //Don't Sync Contact
     If(googleContact.Exists())
     {
         //Delete contact from Google if it exist
         googleContact.Delete();
     } 
 }
 else
 {
     //Sync Contact
 }

如果Outlook有许多用户看不到的可修改属性会很好,但是因为它不是我能想到的最佳选择之一。我这样做是为了将共享Outlook文件夹中的联系人同步到个人文件夹,到目前为止它一直运行良好。

希望这有帮助!