Lync Client 開発概観

Preview:

Citation preview

Lync Client 開発概観2012/09/29 RIA アーキテクチャ研究会 #4

亀谷 学人 (@Grabacr07)

Link ? LINQ ? いいえ、 Lync

ユニファイド コミュニケーション プラットフォーム

◦ Microsoft Lync 2010

◦ Microsoft Lync 2013 Preview

みなさん、 使っていますか?

Lync のお話です

2

Agenda

Lync Client 開発概観

What’s Lync ? Lync Client SDK

Lync 2013 SDK Conclusion

3

Microsoft Lync 2013 Preview

◦ プレビュー版に関する話題が含まれます

◦ 正式リリース時には変更される可能性があります

4

亀谷 学人 ( かめや まなと )

某メーカー系 SIer 勤務

◦ C# / WPF クライアント アプリケーション開発

◦ Microsoft Lync 2010 連携ソリューション

◦ # 定時退社マン

Blog:http://grabacr.net/

Twitter: @Grabacr07

自己紹介

(23 時 )

5

Agenda

Lync Client 開発概観

6

What’s Lync ? Lync Client SDK

Lync 2013 SDK Conclusion

Lync = Link + Sync

いつでも、どこからでも、人と人をつなぐ新しい方法

◦ Microsoft Office Communicator 2007

◦ Microsoft Lync 2010

◦ Microsoft Lync 2013 Preview

What’s Lync ?

7

つなぐ 同期する

Microsoft

プレゼンス情報

ユニファイド コミュニケーション

8

What’s Lync ?

IM ( チャット )音声 / ビデオ / 外線通話オンライン会議

Outlook 連絡先統合ユーザーの検索スキル検索 (SharePoint 連携 )

Conversation Window

9

What’s Lync ?

Lync 2010 Lync 2013 Preview

Conversation Window

10

What’s Lync ?

音声通話をしながらデスクトップやアプリケーションを共有

インスタント メッセージング / プレゼンス

音声 / ビデオ / オンライン会議

エンタープライズ ボイス(PBX 連携 / 代替、 VoIP 外線通話 )

What’s Lync ?

11

What’s Lync ?

12

Microsoft Lync 2013 Preview

Demonstration

Agenda

Lync Client 開発概観

What’s Lync ? Lync Client SDK

Lync 2013 SDK Conclusion

13

Lync 開発概観

14

Lync Client

Lync 2010 SDKLync 2013 SDK Preview

Lync ServerLync Server 2010 SDK

Lync Server 2013 Persistent Chat Server SDK (Preview)

UCMA ServerUnified Communications Managed API

3.0Unified Communications Managed API

4.0

Microsoft Lync 2010 SDKhttp://www.microsoft.com/en-us/download/details.aspx?id=30350

◦ Visual Studio 2008 SP1 / 2010

◦ .NET Framework 3.5 / 4.0

◦ Silverlight 4.0 runtimeMicrosoft Silverlight 4 Tools for Visual Studio 2010

Lync 2010 SDK  

15

1. アプリケーションに Lync 連携機能を追加

2. Lync クライアントを自分で構築

3. Lync クライアント内にカスタム機能を追加

Lync クライアント 開発スタイル

16

1. アプリケーションに Lync 連携機能を追加

2. Lync クライアントを自分で構築

3. Lync クライアント内にカスタム機能を追加

Lync クライアント 開発スタイル

17

Lync Extensibility API  

◦ Microsoft.Lync.Model.Extensibility 名前空間

◦ Automation クラス

Conversation の開始(Modality: IM, Audio, Video, File transfer, app sharing)

Conference への参加

Contact 追加ウィザード

◦ Lync Client の起動が前提

Lync クライアント 開発スタイル (1)

アプリケーションに Lync 連携機能

18

Automation クラス

19

Automation classBeginStartConversation method

Demonstration

Lync Controls

◦ Microsoft.Lync.Controls 名前空間

◦ WPF / Silverlight で使える Lync コントロール群

Lync クライアント 開発スタイル (1)

アプリケーションに Lync 連携機能

20

<lync:PresenceIndicator x:Name="Presence" Source="sip:patchouli@grabacr07.local" HoverAction="ShowContactBrief" PhotoDisplayMode="Large" />

<TextBlock Text="{Binding DisplayName, ElementName=Presence}" Margin="4,0,0,0" VerticalAlignment="Center" />

xmlns:lync="clr-namespace:Microsoft.Lync.Controls;assembly=Microsoft.Lync.Controls"

Lync Controls

21

Lync Controls Sample

Demonstration

Lync クライアントに対する操作

◦ Lync へのサイン イン / サイン アウト

◦ ユーザーの検索

◦ ユーザーの ( コンタクト リストへの ) 追加 / 移動 / 削除

会議に対する操作

◦ メッセージの送受信

◦ 音声会議の保留 / 再開 / 転送         など

Lync クライアント 開発スタイル (1)

アプリケーションに Lync 連携機能

22

23

Object Model  

Conversation

IDictionary<ModalityTypes, Modality>

InstantMessageModality class

ModalityTypes.InstantMessage

ModalityTypes.AudioVideo

AVModality class

Modalitiesproperty

IList<Participant>Participantsproperty

e.g.

BeginSendMessage method

InstantMessageReceived event

IsTyping property

e.g.

AudioChannel property

VideoChannel property

Instant message の場合

24

Object Model  

var imModality = conversation.Modalities[ModalityTypes.InstantMessage] as InstantMessageModality;

imModality.BeginSendMessage( " 会話を開始しました! ", ar => { var modality = ar.AsyncState as InstantMessageModality; modality.EndSendMessage(r); }, imModality);

1. アプリケーションに Lync 連携機能を追加

2. Lync クライアントを自分で構築

3. Lync クライアント内にカスタム機能を追加

Lync クライアント 開発スタイル

25

独自のコミュニケーション クライアントを実装

◦ Lync をベースに、でも Lync の UI は使いたくない?

UI Suppression Mode

◦ Lync クライアントの UI が表示されなくなる( プロセスは実行される )

◦ 設定方法はレジストリ( またはインストール オプション )

Lync クライアント 開発スタイル (2)

Lync クライアントを自分で構築

26

どういうときに使うべき?

◦ Lync 2010 はレジストリの HKLM で設定

◦ 例 1: 会議室の据え置き PC 上 + ホワイトボード

◦ 例 2: 会社の受付 ( 無人 ) … 担当呼び出し用クライアント

◦ Lync 2013 (Preview) は以下に変更

Lync クライアント 開発スタイル (2)

UI Suppression Mode

[HKEY_LOCAL_MACHINE\Software\Microsoft\Communicator]"UISuppressionMode"=dword:00000001

[HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Lync]"UISuppressionMode"=dword:00000001

27

ユーザー単位の使い分け不可

アプリケーションの起動と終了

◦ [ スタート ] メニューからは Lync が起動できなくなる

LyncClient.BeginInitialize メソッド

Lync クライアント 開発スタイル (2)

UI Suppression Mode

28

var lyncClient = LyncClient.GetClient();if (lyncClient.State == ClientState.Uninitialized){ lyncClient.BeginInitialize(ar => { var client = ar.AsyncState as LyncClient; client.EndInitialize(ar); }, lyncClient);}

アプリケーションの起動と終了

◦ サイン イン、 Lync のシャットダウン等も API から

Lync クライアント 開発スタイル (2)

UI Suppression Mode

29

if (lyncClient.State != ClientState.SignedIn){ lyncClient.BeginSignIn( @"sip:patchouli@grabacr07.local", @"grabacr07.local\patchouli", "password", ar => { var client = ar.AsyncState as LyncClient; client.EndSignIn(ar); }, lyncClient);} ※ サイン イン / サイン アウトの制御は

UI Suppression Mode でなくとも可能

注意点いろいろ

◦ Automation クラスは使えない

◦ Lync Controls も使えない

◦ Lync クライアント連携アプリは起動できなくすべき

LyncClient.InSuppressedMode プロパティ

Lync クライアント 開発スタイル (2)

UI Suppression Mode

30

if (LyncClient.GetClient().InSuppressedMode){ MessageBox.Show( "Lync is configured for full user interface suppression"); return;}

Lync クライアント 開発スタイル (2)

UI Suppression Mode

31

UI Suppression Mode

Demonstration

1. アプリケーションに Lync 連携機能を追加

2. Lync クライアントを自分で構築

3. Lync クライアント内にカスタム機能を追加

Lync クライアント 開発スタイル

32

CWE (Conversation Window Extension)

Lync クライアント 開発スタイル (3)

Lync クライアント内にカスタム機能

会話ウィンドウの右ペインでカスタム アプリケーションを提供

Lync の会話ウィンドウ

  HTML ベースでホスト可能

  ex) ・ Web サーバー・ 共有

フォルダー・

Windows Azure

33

登録方法 1 … Install Registration

◦ 利用する PC でレジストリ登録が必要

◦ レジストリ登録しておけば、いつでも呼び出せる

Lync クライアント 開発スタイル (3)

Conversation Window 拡張

34

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Communicator\ContextPackages\{12345678-9ABC-DEF0-1234-56789ABC}]"Name"="Sample CWE Application 1""ExtensibilityWindowSize"=dword:00000001"ExternalURL"="http://grabacr.net/CWESample.html""InternalURL"="http://grabacr.net/CWESample.html"

ExtensibilityWindowSize0: 300 x 200 px1: 600 x 400 px2: 800 x 600 px

拡張機能の URL※ IE の信頼済みサイトに登録する必要があります

適当な GUIDを割り当て

Lync クライアント 開発スタイル (3)

Conversation Window 拡張

35

Conversation Window ExtensionsInstall Registration

Demonstration

登録方法 2 … Run-Time Registration

◦ 実行時にプログラムから拡張機能を登録

◦ ユーザーが Lync にサイン インしている間のみ

Lync クライアント 開発スタイル (3)

Conversation Window 拡張

36

var registration = LyncClient.GetClient().CreateApplicationRegistration( "{12345678-9ABC-DEF0-1234-56789ABC}", "Run-Time Registration Test");

registration.SetExtensibilityWindowProperties( "http://grabacr.net/profile", "http://grabacr.net/profile", ConversationWindowExtensionSize.Medium);

registration.AddRegistration();

登録方法 1 … Install Registration

◦ レジストリ登録が必要 / いつでも使える

登録方法 2 … Run-Time Registration

◦ レジストリ登録が不要 / サイン インしている間のみ

いずれの場合も

会話するユーザー同士が事前に登録しておく

Lync クライアント 開発スタイル (3)

Conversation Window 拡張

38

Agenda

Lync Client 開発概観

39

What’s Lync ? Lync Client SDK

Lync 2013 SDK Conclusion

Microsoft Lync 2013 SDK (Preview)http://www.microsoft.com/en-us/download/details.aspx?id=30350

◦ Visual Studio 2010

◦ .NET Framework 4.0

◦ Silverlight 5.0Microsoft Silverlight 5 Tools for Visual Studio 2010 SP1

◦ Visual Studio 2012 + .NET Framework 4.5 でも動きました

Lync 2013 SDK  

40

41

Resource sharing  

リソース共有機能そのものは Lync 2010 から

◦ デスクトップ

◦ モニター

プライマリ

セカンダリ

etc…

◦ アプリケーション

42

Resource sharing  

( 発表者 )( 聴講者 )

Lync 2010 SDK では API 提供されず

Lync 2013 SDK (Preview) に API が追加

◦ Microsoft.Lync.Model.Conversation.Sharing 名前空間

◦ リソース共有の開始 / 停止デスクトップ / モニター / アプリケーション

◦ 制御権の 要求 / 解放、許可 / 拒否、譲渡 / 取消

43

Resource sharing  

IDictionary<ModalityTypes, Modality>IDictionary<ModalityTypes, Modality>

44

Object Model  

Conversation

InstantMessageModality class

ModalityTypes.InstantMessage

ModalityTypes.AudioVideo

AVModality class

Modalitiesproperty

ModalityTypes.ApplicationSharing

ApplicationSharingModality class

e.g.

SharableResources property

BeginShareResource method

BeginRequestControl method

ControllerChanged event

ApplicationSharingModality クラス

45

Resource sharing  

var sharingModality = conversation.Modalities[ModalityTypes.ApplicationSharing] as ApplicationSharingModality;

appSharingModality.BeginShareResources( appSharingModality.ShareableResources[index], ar => { var modality = ar.AsyncState as ApplicationSharingModality; modality.EndShareResources(ar); }, appSharingModality);

SharingResourceList

共有可能なリソースのコレクション

ModalityTypes.ApplicationSharing

( 新規追加 )

46

Resource sharing  

Resource Sharing

Demonstration

Meeting content management

◦ ホワイトボード

◦ PowerPoint ドキュメント

◦ 添付ファイル

Lync 2010 からの機能

◦ Lync 2013 SDK (Preview) で API 追加

◦ Microsoft.Lync.Model.Conversation.Sharing 名前空間

47

Other additional API  

Conversation

通常の使い方

◦ ユーザーがユーザーを呼び出し

常設チャットルーム機能

◦ Persistent Chat API

Microsoft.Lync.Model.Room名前空間

48

Other additional API  

Hello!Instant message

!

Room

・ What do you …・ I think …

Lync Controls

◦ コントロールがすべて Lync 2010 のまま

ドキュメント

◦ “Microsoft Lync 15 SDK Help” が同梱  しかし…

中身は “ Microsoft Lync 2010 SDK Help” そのまま

Lync 2013 SDK (Preview) の注意点

49

Agenda

Lync Client 開発概観

50

What’s Lync ? Lync Client SDK

Lync 2013 SDK Conclusion

Lync = Link + Sync コミュニケーション手段を統合

( ユニファイド コミュニケーション )

◦ インスタント メッセージ

◦ 音声通話

◦ リソース共有 ( デスクトップ / モニター / アプリケーション )

51

Conclusion

Lync Client 開発スタイル

◦ アプリケーションに Lync 連携機能を追加

Automation class, Lync Controls

◦ Lync クライアントを自分で構築

UI Suppression Mode

◦ Lync クライアント内にカスタム機能を追加

Conversation Window Extensions

52

Conclusion

Lync 2013 SDK Preview

◦ Resource sharing

◦ Meeting content management

◦ Persistent Chat API

53

Conclusion

54