在Lync 2013中显示用户图片

时间:2013-10-16 13:13:48

标签: c# lync lync-client-sdk lync-2013 instantmessenger

我正在使用lync 2013 sdk开发小型应用程序。在sdk中是否有任何方法可以实现允许用户使用SDK中提供的任何API上传其图片的功能。

如果可以,那么如果在活动目录中配置了用户,那么存储它的最佳方式是什么?在哪里?

等待你方的积极回应。

此致

阿米特

2 个答案:

答案 0 :(得分:0)

您可以使用

通过SDK获取照片流
var photoStream = Client.Self.Contact.GetContactInformation(ContactInformationType.Photo) as System.IO.Stream

虽然您可以阅读您无法写入的信息流,因为您此时正在查看AD的联系信息。

有点想要写一些东西来改变AD的photoThumbnails属性中的照片,而不是在Lync中。

答案 1 :(得分:0)

自12/11/2013起更新

最新的Lync更新( Lync Client CU3(11月更新))可以选择将照片添加回GUI。

有关解释和屏幕截图的文章可在此处找到:Lync Client CU3 (November Update) – Show a picture from a website!


原始答案

虽然这是一个不同的问题,但我对这个问题(Displaying a photo for an Application endpoint)的回答在这里也是有效的:

基本上,可以选择将用户的照片设置为URL,但不再显示在Lync 2013客户端界面中(它位于Lync 2010客户端中)。如果您可以将代码发布到可通过Web访问的位置,则可以将URL发布到该位置并以此方式更改用户图片。

供参考,另一个问题的答案是:


LocalEndpoint.LocalOwnerPresence上发布在线状态信息(包括照片设置)。 UserEndpointApplicationEndpoint都来自LocalEndpoint,所以这应该是可行的。

实际发布稍微复杂一些,因为要发布的“级别”有很多不同的组合:

首先,您需要了解一堆InstanceID值,请在此处阅读:Presence data source and category instance ID

其次,这种存在适用于哪个值,请参阅Microsoft.Rtc.Collaboration.Presence.PresenceRelationshipLevel。不要在Unknown上发布,您将获得例外。

public enum PresenceRelationshipLevel  
{  
    Unknown = -1,  
    Everyone = 0,  
    External = 100,  
    Colleagues = 200,  
    Workgroup = 300,  
    Personal = 400,  
    Blocked = 32000,  
}

您需要为用户照​​片属性发布PresenceCategoryWithMetaData,该属性是容器0x5的一部分,“现状信息”。

var photoPresence = new PresenceCategoryWithMetaData(
    0x5, // The container id
    (int)PresenceRelationshipLevel.Everyone,
    new ContactCard(0x5) // Same container ID again
    {
        IsAllowedToShowPhoto = true,
        PhotoUri = "<uri to your photo here"
    });

您也可以在此对象上设置ExpiryPolicy,应该是自我解释的。然后在端点上发布此状态对象:

Endpoint.LocalOwnerPresence.BeginPublishPresence(new[] { photoPresence  }, cb => { 
    Endpoint.LocalOwnerPresence.EndPublishPresence(cb);
}, null);

那应该这样做,真的。我最终明确地发布到所有关系级别,因为它没有按照逻辑预期将数据级联。