開發第一個Meeting App

今天我們來看一下如何使用c# net6 來開發一個 teams的 meeting app。首先先確保本地安裝了最新版本的 net6。創建一個目錄,然后在目錄下輸入下面的命令行,讓 dotnet 來生成一個初步的asp.net core 代碼框架。

dotnet new razor

代碼框架生成如下的目錄和文件,我們可以刪除不需要的文件:Error.cshtml.cs,?Error.cshtml,?Index.cshtml,?Index.cshtml.cs,?Privacy.cshtml?和?Privacy.cshtml.cs

first-meeting-app

如果我們不需要默認的頁面風格,我們還可以刪除掉?_ViewStart.cshtml

然后,我們為了調試方便,我們調整一下端口。打開?Properties\launchSettings.json?文件,把 http 的端口都改成 5000, 把https的端口改成 5001。改完后的文件和如下的類似:

{"iisSettings": {"windowsAuthentication": false,"anonymousAuthentication": true,"iisExpress": {"applicationUrl": "http://localhost:5000","sslPort": 44350}},"profiles": {"FirstMeetingApp": {"commandName": "Project","dotnetRunMessages": true,"launchBrowser": true,"applicationUrl": "https://localhost:5001;http://localhost:5000","environmentVariables": {"ASPNETCORE_ENVIRONMENT": "Development"}},...

接下來我們打開 Program.cs 文件,刪除如下這行,這樣就不會強制跳轉到 https 了。

app.UseHttpsRedirection();

這些準備工作完成后,我們就可以嘗試運行一下,如下:

first-meeting-app

可以看到,我們的程序已經在監聽 5000 和 5001 端口了。

然后我們使用下面這個命令來啟動 ngork,讓端口 5000 可以暴露到公網上,這樣 Teams 就可以發送請求到我們的接口了。

ngrok http 5000

記下 ngrok 生成的一個臨時的公網 url。后面會用到。

first-meeting-app

回到我們的代碼,在Pages目錄下增加兩個文件,一個是Configure.cshtml文件,這個頁面是用來配置的。內容如下:

@page "/configure"<!DOCTYPE html>
<html lang="en">
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Demo</title>
</head>
<body>My first Meeting App <br><script src="https://statics.teams.cdn.office.net/sdk/v1.10.0/js/MicrosoftTeams.min.js" crossorigin="anonymous"></script><script>const mainPageUrl = 'https://e9a8-49-189-236-3.ngrok.io/MainPage';microsoftTeams.initialize();microsoftTeams.appInitialization.notifySuccess();microsoftTeams.settings.registerOnSaveHandler(function (saveEvent) {microsoftTeams.settings.setSettings({entityID: "MeetingApp Demo",contentUrl: mainPageUrl,suggestedTabName: "MeetingApp Demo",websiteUrl: mainPageUrl,});saveEvent.notifySuccess();});microsoftTeams.settings.setValidityState(true);</script>
</body>
</html>

上面代碼里有兩個關鍵部分,第一個是 mainPageUrl,里面就使用到了前面保存下來的ngrok的url,第二個關鍵是調用 Teams SDK的順序,顯示初始化?.initialize(),然后是.registerOnSaveHandler(,最后是告訴 teams,配置頁面好了,.settings.setValidityState(true)

第二個頁面是?MainPage.cshtml,也放在 Pages 目錄下:

@page "/MainPage"<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Demo</title><link rel="stylesheet" href="/static/styles.css"><script src="https://statics.teams.cdn.office.net/sdk/v1.10.0/js/MicrosoftTeams.min.js"integrity="sha384-6oUzHUqESdbT3hNPDDZUa/OunUj5SoxuMXNek1Dwe6AmChzqc6EJhjVrJ93DY/Bv"crossorigin="anonymous"></script>
</head>
<body><h1>MainPage</h1>
</body>
</html>

這個頁面比較簡單,只是做個sample,后面我們再會展開講這個。

代碼完成后,我們就可以打開 Teams 的 App Studio,新增一個app,然后在 Tab 中進行如下的配置。

first-meeting-app

完成后,我們就可以把這個 app 安裝到一個 meeting中去。選擇一個會議,點擊安裝后,就可以看到如下界面,這個就是我們的 Configure.cshtml 的頁面所顯示的內容。

first-meeting-app

點擊?Save?按鈕后,就可以在會議聊天界面和會議詳情界面里看到多了一個tab,名字叫 MeetingAppDemo,這個名字也是在 Configure.cshtml 里指定的,而 tab 的內容是由 MainPage.cshtml 里的內容。

first-meeting-app

可以看到我們已經完成了我們第一個 teams meeting app,比較簡陋,不過開發過程也足夠簡單。我們后面再來展開在這個 tab 里我們可以做什么事情。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/277850.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/277850.shtml
英文地址,請注明出處:http://en.pswp.cn/news/277850.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

solrCloud搭建

一.什么是solrCloud&#xff1f; SolrCoud(solr云)是solr提供的分布式搜索方案。當一個系統搜索請求并發很高的時候&#xff0c;就需要使用solrCloud來滿足這些需求 solrCloud是基于solr和zookeeper的分布式的搜索方案&#xff0c;它的主要思想是使用zookeeper作為擠集群配置的…

Linux 添加新用戶賬號并賦予root權限

除了root用戶之外&#xff0c;通常需要為每個管理創建各自的用戶賬號&#xff0c;方便每個管理員登錄使用&#xff0c; 步驟如下&#xff1a; 1. 添加新用戶賬號 useradd mary.lee 2. 為新用戶賬號設置密碼 passwd mary.lee 3. 為新用戶賬號賦予root權限 usermod -a -G root…

如何獲取 Teams Meeting 的上下文信息

我們上一篇文章講了如果使用 net6 和 c# 來快速開發一個最簡單的 teams meeting app。為了讓大家比較容易理解&#xff0c;上個sample非常簡單&#xff0c;簡單到沒有什么功能&#xff0c;那我們現在就來慢慢擴展這個app的功能&#xff1a;看看如何獲取 meeting 的上下文。 打…

php的運行流程

1、Zend引擎&#xff1a;Zend整體用純C實現&#xff0c;是PHP的內核部分&#xff0c;他將PHP代碼翻譯&#xff08;詞法、語法解析等一系列編譯過程&#xff09;為可執行opcode的處理并實現相應的處理方法、實現了基本的數據結構&#xff08;如&#xff1a;hashtable、OO&#x…

內置方法

isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)檢查是否obj是否是類 cls 的對象 class Foo(object):pass obj Foo() isinstance(obj, Foo) issubclass(sub, super)檢查sub類是否是 super 類的派生類 class Foo(object):pass class Bar(Foo):pass issubclass…

會議中的Meeting App

接著我們上兩篇博客文章&#xff0c;我們說了如何開發會議前和會議后的 meeting app&#xff0c;那如何開發一個會議中的 app 呢&#xff0c;實際上比較簡單&#xff0c;我們只需要在 tab 的配置項中勾選下面這兩個選項即可。 勾選后&#xff0c;我們安裝app到我們的一個會議中…

0-2歲的app開發人員必讀,Android開發APP前的準備事項

2019獨角獸企業重金招聘Python工程師標準>>> 隨著移動互聯網的興起&#xff0c;各行各業對移動應用的需求越來越大&#xff0c;從事APP開發的人也越來越多&#xff0c;APP開發行業可以說是方興未艾。APP開發是比較復雜的事情&#xff0c;涉及產品、美工設計、服務器…

FixedThreadPool吞掉了異常

為了方便遍描述問題&#xff0c;如下是簡化后的 public class RunException {public static void main(String[] args) { ExecutorService readerPool Executors.newFixedThreadPool(3); readerPool.submit(new Runnable() { public void run() { throw new RuntimeException(…

Teams Meeting App的 task 彈出框

前幾篇文章我們介紹了 Teams Meeting App 的各種類型和如何從無到有的使用 net6 和 c# 來開發一個 Teams Meeting app&#xff0c;那今天我們開始討論一些 meeting app 的高級互動&#xff1a; task 彈出框。我們先來快速修改一下之前的代碼&#xff0c;看看什么是 task 彈出框…

react 學習

react官網地址&#xff1a;http://facebook.github.io/react/ webpack官網地址&#xff1a;http://webpack.js.org/ 英文 https://www.webpackjs.com/ 中文 參考資料&#xff1a; React 入門實例教程-阮一峰 webpack的學習 學習列表&#xff1a; 了解react的語法&#x…

如何獲取Teams Meeting 詳情

最近有一些朋友問我&#xff0c;有沒有可能獲取到會議的詳情&#xff0c;我搜索了目前所有的 teams 文檔&#xff0c;發現有一個api可以獲取&#xff0c;不過在我寫這篇文章的時候&#xff0c;這個 api 還在 preview 階段&#xff0c;可能在正式發布前&#xff0c;還會有一些變…

C++ : 內聯函數和引用變量

一.內聯函數 內聯函數和普通函數的使用方法沒有本質區別&#xff0c;我們來看一個例子&#xff0c;下面展示了內聯函數的使用方法&#xff1a; #include <iostream> using namespace std; //下面展示內聯函數的使用 inline double square(double x) {return (x*x);} int…

Teams Meeting 實時事件通知

Microsoft Teams最近推出了很多新的功能和api&#xff0c;我們今天就來一起看一下 teams 會議的實時事件通知&#xff0c;我覺得有了這個功能&#xff0c;我們的app&#xff0c;我們的bot又可以有很多可以實現的場景了。 我們來看看如何在 c# 里處理會議開始和結束這兩個事件。…

error記錄 | 不能將參數 1 從“const char [5]”轉換為“LPCTSTR

Windows使用兩種字符集ANSI和UNICODE&#xff0c;前者就是通常使用的單字節方式&#xff0c;但這種方式處理象中文這樣的雙字節字符不方便&#xff0c;容易出現半個漢字的情況。而后者是雙字節方式&#xff0c;方便處理雙字節字符。Windows NT的所有與字符有關的函數都提供兩…

JMM 學習筆記

并發編程的模型 并發編程需要解決的兩個問題&#xff1a;線程之間如何同步&#xff0c;線程之間如何通信。 線程之間通信&#xff1a;共享內存&#xff0c;消息傳遞。 共享內存通過線程之間讀-寫程序的公共狀態進行通信。消息傳遞要通過線程之間主動傳遞消息進行通信。 線程之間…

嵌套函數,匿名函數,高階函數

目錄 嵌套函數匿名函數高階函數嵌套函數 就是在函數里再定義一個函數 # 1,函數內部可以在定義函數 # 2,函數要想執行&#xff0c;必須要先被調用 def name1():print(kk)def name2():print(vfx)name2() name1() 輸出&#xff1a; kk vfx name2 現在他內部代碼找輸出&#xff0c;…

Teams Developer Portal介紹

在去年的 Build2021 大會上講到的 Teams Developer Portal 已經上線一段時間了&#xff0c;我這幾天玩了一下&#xff0c;發現比之前的 app studio 強大了很多&#xff0c;所以趕快寫篇文章和大家分享。 Developer Portal 有兩種訪問的方式&#xff0c;一個是網頁版&#xff0…

使用環境變量來配置 Teams App 的 manifest

上篇文章我們介紹了 Teams 的 Developer Portal&#xff0c;今天我想分享一個dev portal里一個比較實用的功能。這個功能在之前的 App Studio 里沒有。這個功能叫 Environment variables。 當我們真實開發一個 teams app的時候&#xff0c;肯定有自己的開發環境&#xff0c;測…

[Unity優化]批處理03:靜態批處理

[Unity優化]批處理03&#xff1a;靜態批處理 原理&#xff1a; 運行時&#xff0c;把需要進行靜態批處理的網格合并到一個新的網格中。雖然只進行一次合并操作&#xff0c;但是會占用更多的內存來存儲合并后的網格&#xff0c;并且被靜態批處理的物體無法移動旋轉縮放 要使用靜…

制造領域的人工智能技術

“AI將執行制造、質量控制、縮短設計時間、減少材料浪費、提高生產再利用率&#xff0c;執行預測性維護等等&#xff0c;盡管人工智能有望從根本上改變很多行業&#xff0c;但該技術非常適合制造業”Ng說。Andrew Ng是深度學習Google Brain項目的創始人兼斯坦福大學計算機科學兼…