在日常,我们'重新看到了很多关于各种音频聊天和协作应用程序的新兴趣。为了支持构建这些应用程序的人,我们在四个平台上掀起了俱乐部(或,Clubhouse-Lite)音频室体验的示例代码:Web(React),iOS,Android和React Native。随意尝试在网上的现场演示,或浏览示例代码,然后回来阅读这篇文章......
如果您因标题点击本文,您(可能)是几种可能类型的人之一。你是一个口渴的企业家,准备看看你如何解锁未来。也许你是好奇的类型,短时间框架引起了你的注意。或者在最有可能的情况下,亲爱的读者,就像你谦卑的作者。你是一个喜欢SEO并是双曲的愤世嫉俗的开发人员。希望,你是这些人中的三个! 🦄除非你在岩石下生活(或者也许是一个Android手机),否则你最近在这个消息中听到了一些这些音频社区。如果你没有,我可以建议你进入俱乐部,抓住一个卡布奇诺咖啡,并制作被子?或者您可能更愿意将路线带到牛仔竞技表演。要钝,音频现在很热,麝香与普京热。
如果你会幽默我,我想首先谈论我们如何进入建筑党线开始。这么多"周末"项目误入歧途,因为他们没有完全定义目标和期望。所以这就是我们开始的地方。
然后我们将讨论我们应用程序的整体流程。在四个平台上创建一致的体验对我们来说很重要,因此我们已经建立了4个不同的演示,具有小后端(两个无服务器功能)。由于它们都分享了类似的逻辑,我们将在潜入平台上的情况下行走。在每个部分中,如果要深入挖掘,我们将向特定于平台的代码链接。
派对线允许您创建音频聊天室并邀请您的朋友。他们可以作为扬声器加入你或只是倾听。最好的部分是它在大多数浏览器中工作而不安装任何内容。如果您想运送移动应用程序,我们已经让您覆盖了iOS,Android,并反应了本地。
由于我们想要在A&#34中建立一些东西;周末"让我们定义我们的目标并呼吁保持范围可管理的假设。
现在我们对我们的MVP范围有一种感觉,让我们从日常API角度看一下整体架构。
从每天都为我们进行了沉重的举重,我们可以专注于我们如何每天与我们进行交互并建立我们的界面(更稍后更多)。
值得注意的是,对于iOS和Android,我们将通过WebView&#34与方法和活动进行交互;桥梁"在反应和反应本地,我们可以直接调用Daily-JS和React-Native-JS。
我们将每个客户放在一个方便的回购中。您将注意到四个文件夹,每个客户端都是一个。您可以找到内部/ React / Server / Function中的无务函数的文件夹。每个文件夹都包含自己的自述文件,具有平台特定的设置说明。这些应该足以让所有东西都奔跑,但如果您找到了详细的,特定于平台的帖子,请告诉我们。打开一个问题,创建一个PR,或者只是在我们可以提供帮助的情况下平时。
通常,反应和反应本地是最相似的,最多的"惯用"在如何每天建立。包括Android和iOS,以显示通过"桥接"数据到不可见的WebView。我们只是玩音轨的事实使得这有点可行。我们正在积极研究移动的原生SDK,因此我们欢迎在该领域进行任何反馈。
在您选择的平台上关注,或同时探索每个人,以了解如何接近跨平台应用程序。
🕸(React Web App)⚛(React Native Mobile App(S))🍏(iOS移动应用程序 - Swift)🤖(Android Mobile App - Kotlin& Java;我们' LL链接到Kotlin示例)🥅(NetLify函数 - 节点)每当您看到其中一个emoji时,它将链接到repo中的相关文件或行。即使是上面的那些。试试吧!
首先,按照README说明进行操作,然后启动DEV服务器。 (🕸⚛🍏🤖)
如果您是那些读--最先前的类型之一,您可以在此处看到工作演示并沿这种方式遵循。
您接受打招呼的第一页是一个加入/创建一个页面。这是用户进入您的应用程序的入口点。在这里,我们做了一些假设来保持范围。首先,没有身份验证或账户本身。我们认真对待隐私,你也应该。因此,在您携带的Scrappy演示之前,请将其部署为生产应用程序,请考虑您如何处理验证和安全性。
第二,如果你开始一个房间,你就是主持人。我们通过创建一个会议令牌来完成此操作,然后在您加入通话时使用。主持人具有“促进”其他用户类型的能力,这就是为什么我们需要令牌来识别它们,但稍后更多。
查看更多关于如何创建(🕸⚛🍏🤖)并在客户中加入(🕸⚛🍏🤖)
在事物的服务器(较少)的一侧,我们创建/室(🥅)和/令牌(🥅)端点,分别调用/房间和/会议令牌端点。您将看到每个客户端中使用的那些端点。我们通过使用房间和令牌的Exp Property来执行此处的10分钟演示限制。除非您更愿意保持您的会议短而甜蜜,否则您可以随意更改此申请!
创建呼叫后,您将介绍呼叫视图(🕸⚛🍏🤖)。在这里,作为主持人,您可以"促进"听众或主持人。我们正在使用与会者对象的所有者属性来识别版主服务器。当您加入的会议令牌时,这会设置为true。为了简化一般工作中的用户角色如何为此演示的目的,我们将通过附加到用户名(🕸⚛🍏🤖)来存储它们。在生产环境中,您将希望更强大的方式来强制执行角色,因此请记住这一点。
当您使用主持人权限来推广扬声器时,在引擎盖下,这是通过调用sendappmessage()来完成的,让扬声器知道他们已被推广。对于促销的参与者,谁将成为一个发言人,我们调用setusername(),以便其他成员将能够通过参与者()来获取新角色并在每个客户端中相应更新UI。
有时对话可以得到一点精神,也许有人的狗已经决定他们希望参加世界上最新的社会热潮。当发生这种情况时,它是一个能够静音某人的主持人。通过使用setAudio调用UpdateParticipant()来完成此操作:FALSE(🕸⚛🍏🤖)。出于隐私原因,主持人只能静音远程参与者。当事情安静下来时,他们将不得不取消静音。在罕见的情况下,静音可能还不够,你需要从房间里删除某人。我们通过调用sendappmessage来处理这一点,并告诉客户需要通过呼叫休假()(🕸⚛🍏🤖)离开房间退出房间。
因为我们的信任机制识别主持人是一个令牌,当有人获得"促销"对于一个主持人,他们需要用他们的令牌重新加入(🕸⚛🍏🤖),所以我们可以让他们提高呼叫。此模式意味着在重新加入作为主持人之前,它们将删除呼叫第二或两个。在生产应用程序中,您可能更喜欢更平滑的转换,这可以通过不同的主持人授权方法来完成。
您可能已经注意到的另一件事是我们在加入时要求设备权限,即使您是侦听器。这使我们能够立即打开当时的麦克风,但如果您喜欢更少的侵入方法,您可以始终返回事物,只有在您被推广时才请求权限。
iOS和Android客户端的Not-so-secrace酱是他们正在加载Daily-JS在A"无头" WebView然后通过A&#34与它交互;桥梁" (🍏🤖)。通过添加到平台特定的WebView实现实现,可以允许播放音频曲目。这适用于此音频使用情况,因为没有用于处理的视频布局逻辑。我们想展示像这样的轻量级集成的力量,但请放心,我们积极研究全功能的移动SDK,我们将稍后发布™。
所以你现在有一个繁荣的多平台音频应用程序。但是你发现你的发言者可以得到一点点带走,有时你想注射一些观众参与。出于这个原因,我们已经增加了倾听者举手的能力,所以他们可以促进发言人。由于我们已经"创造性地"在用户名中存储的用户角色,为什么不公开显示当有人在那里举起手?为此,我们调用setusername()和prepend✋(🕸⚛🍏🤖)。然后,主持人可以决定促进,在这种情况下,✋将神奇地消失。或者如果是"更多的评论,听众可以降低他们的手。
所以你有它,一套我们建造在A&#34的令人敬畏的演示;周末" (强调周),但......
现在你有十亿美元的应用程序,别忘了创造一个甲板,并在那里赢得了VC钱。 🤑
在所有严肃性中,社区都像成员一样好。 我们希望将猜测从您的技术通信部分中脱颖而出,因此您可以专注于建筑物。