{"id":1980,"date":"2022-06-29T11:56:07","date_gmt":"2022-06-29T06:26:07","guid":{"rendered":"https:\/\/www.enablex.io\/insights\/?p=1980"},"modified":"2023-11-28T10:26:19","modified_gmt":"2023-11-28T04:56:19","slug":"build-ios-video-call-app-using-few-lines-of-code","status":"publish","type":"post","link":"https:\/\/www.enablex.io\/insights\/build-ios-video-call-app-using-few-lines-of-code\/","title":{"rendered":"How to Build an iOS Video Call App with Few Lines of Code"},"content":{"rendered":"<p><span data-contrast=\"none\">As digital communication is growing rapidly, app-to-app calling stands out as an exciting thing to try out. While it feels tempting to quickly add an audio\/video calling feature into your iOS app, it\u2019s not an easy job. That\u2019s because building it from scratch involves plenty of coding and complex integration. <\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">That\u2019s where the EnableX CallKit framework comes into the picture. It makes the process quite simple and easy, and you do not need to invest much time and energy in writing unending lines of code!<\/span><\/p>\n<p><span class=\"NormalTextRun SCXW131649061 BCX0\">T<\/span><span class=\"NormalTextRun SCXW131649061 BCX0\">his <\/span><span class=\"NormalTextRun SCXW131649061 BCX0\">detailed<\/span><span class=\"NormalTextRun SCXW131649061 BCX0\"> tutorial on &#8216;How to Build an iOS Video Call App&#8217; <\/span><span class=\"NormalTextRun SCXW131649061 BCX0\">take<\/span><span class=\"NormalTextRun SCXW131649061 BCX0\">s<\/span><span class=\"NormalTextRun SCXW131649061 BCX0\"> a look<\/span> <span class=\"NormalTextRun SCXW131649061 BCX0\">at how to<\/span> <span class=\"NormalTextRun SCXW131649061 BCX0\">leverage <\/span><span class=\"NormalTextRun SCXW131649061 BCX0\">the <\/span><a href=\"https:\/\/www.enablex.io\/insights\/the-most-comprehensive-guide-on-webrtc\/\"><span class=\"NormalTextRun SCXW131649061 BCX0\">WebRTC<\/span><\/a><span class=\"NormalTextRun SCXW131649061 BCX0\">&#8211;<\/span><span class=\"NormalTextRun SCXW131649061 BCX0\">based <\/span><span class=\"NormalTextRun SCXW131649061 BCX0\">E<\/span><span class=\"NormalTextRun SCXW131649061 BCX0\">nableX V<\/span><span class=\"NormalTextRun SCXW131649061 BCX0\">ideo <\/span><span class=\"NormalTextRun SCXW131649061 BCX0\">framework<\/span><span class=\"NormalTextRun SCXW131649061 BCX0\"> and <\/span><span class=\"NormalTextRun SCXW131649061 BCX0\">the <\/span><span class=\"NormalTextRun SCXW131649061 BCX0\">EnableX CallKit to <\/span><span class=\"NormalTextRun SCXW131649061 BCX0\">enable<\/span> A<span class=\"NormalTextRun SCXW131649061 BCX0\">udio &amp;<\/span><span class=\"NormalTextRun SCXW131649061 BCX0\"> V<\/span><span class=\"NormalTextRun SCXW131649061 BCX0\">ideo<\/span><span class=\"NormalTextRun SCXW131649061 BCX0\"> features<\/span><span class=\"NormalTextRun SCXW131649061 BCX0\"> with<\/span> <span class=\"NormalTextRun SCXW131649061 BCX0\">a <\/span><span class=\"NormalTextRun SCXW131649061 BCX0\">native dialer interface<\/span> <span class=\"NormalTextRun SCXW131649061 BCX0\">o<\/span><span class=\"NormalTextRun SCXW131649061 BCX0\">n your <\/span><span class=\"NormalTextRun SCXW131649061 BCX0\">app.<\/span><\/p>\n<h2><span class=\"TextRun SCXW259865050 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW259865050 BCX0\">What <\/span><span class=\"NormalTextRun SCXW259865050 BCX0\">I<\/span><span class=\"NormalTextRun SCXW259865050 BCX0\">s EnableX Calling UI Framework?<\/span><\/span><\/h2>\n<p><span class=\"NormalTextRun SCXW54805583 BCX0\">It<\/span><span class=\"NormalTextRun SCXW54805583 BCX0\">\u2019s<\/span><span class=\"NormalTextRun SCXW54805583 BCX0\"> a<\/span> <span class=\"NormalTextRun SCXW54805583 BCX0\">fram<\/span><span class=\"NormalTextRun SCXW54805583 BCX0\">ework <\/span><span class=\"NormalTextRun SCXW54805583 BCX0\">that <\/span><span class=\"NormalTextRun SCXW54805583 BCX0\">helps<\/span> <span class=\"NormalTextRun SCXW54805583 BCX0\">developers <\/span><span class=\"NormalTextRun SCXW54805583 BCX0\">to <\/span><span class=\"NormalTextRun SCXW54805583 BCX0\">enable <\/span><span class=\"NormalTextRun SCXW54805583 BCX0\">audio and video <\/span><span class=\"NormalTextRun SCXW54805583 BCX0\">features in<\/span><span class=\"NormalTextRun SCXW54805583 BCX0\"> the <\/span><span class=\"NormalTextRun SCXW54805583 BCX0\">app<\/span><span class=\"NormalTextRun SCXW54805583 BCX0\"> with <\/span><span class=\"NormalTextRun SCXW54805583 BCX0\">just <\/span><span class=\"NormalTextRun SCXW54805583 BCX0\">a few lines of code<\/span><span class=\"NormalTextRun SCXW54805583 BCX0\">, <\/span><span class=\"NormalTextRun SCXW54805583 BCX0\">that\u2019s<\/span><span class=\"NormalTextRun SCXW54805583 BCX0\"> it! <\/span><span class=\"NormalTextRun SCXW54805583 BCX0\">The framework consists of two parts: <\/span><\/p>\n<ol>\n<li><span class=\"NormalTextRun SCXW54805583 BCX0\">EnableX UIKit &#8211; Built on top of <\/span><span class=\"NormalTextRun SCXW54805583 BCX0\">the <\/span><span class=\"NormalTextRun SCXW54805583 BCX0\">native UI components<\/span><\/li>\n<li><span class=\"NormalTextRun SCXW54805583 BCX0\">EnableX iOS A<\/span><span class=\"NormalTextRun SCXW54805583 BCX0\">udio<\/span><span class=\"NormalTextRun SCXW54805583 BCX0\">\/V<\/span><span class=\"NormalTextRun SCXW54805583 BCX0\">ideo<\/span> <span class=\"NormalTextRun SCXW54805583 BCX0\">c<\/span><span class=\"NormalTextRun SCXW54805583 BCX0\">alling <\/span><span class=\"NormalTextRun SCXW54805583 BCX0\">f<\/span><span class=\"NormalTextRun SCXW54805583 BCX0\">ramework.<\/span><\/li>\n<\/ol>\n<h2><span class=\"TextRun SCXW216073604 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW216073604 BCX0\">EnableX CallKit Framework<\/span><span class=\"NormalTextRun SCXW216073604 BCX0\">: The Problem <\/span><span class=\"NormalTextRun SCXW216073604 BCX0\">I<\/span><span class=\"NormalTextRun SCXW216073604 BCX0\">t Solves<\/span><\/span><\/h2>\n<p><span data-contrast=\"none\">Before we dive in, let\u2019s first go over a few things that you need to know.\u00a0 Earlier, we had introduced iOS SDK so that you could build an iOS Video Call App with audio\/video features. But it still required the creation of a Calling UI by the developers. In addition, all calling-related events also needed coding. The bottom line is that it still required plenty of coding from the developer\u2019s side.<\/span><\/p>\n<p><span data-contrast=\"none\">To make it easy &amp; fast, EnableX introduced UIKit. Once it\u2019s added to a project, it automatically installs required iOS SDKs, and automatically handles all the UI and calling-related events. It also helps create 100% native UI. So, with this feature, a developer can add the audio\/video feature to an app with just a few lines of code. The UIKit enables a live video chat and also manages all calling-related events. Now, the question is, when you enter the room and want to add other participants\/users to join the session, they need to be informed. This can be done by creating events to send notifications to end-users (or participants). But for that, a calling UI is required at their end, otherwise, they can\u2019t join a call. It\u2019s an essential feature for a seamless audio or video call experience. However, it again demands a lot of coding.\u00a0 <\/span><span data-ccp-props=\"{&quot;201341983&quot;:1,&quot;335559739&quot;:160,&quot;335559740&quot;:480}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">Apple\u2019s CallKit tried to solve this issue by taking care of the UI part, but the problem of managing notification-related events still persisted.\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:1,&quot;335559739&quot;:160,&quot;335559740&quot;:480}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">The EnableX introduces the CallKit framework to take care of these issues. It intelligently replicates all native classes of CallKit framework. It wraps all classes into a single unified class, and also internally manages calling-related events. Thanks to the EnableX CallKit, a developer now needs to write just 4-5 lines of code instead of the usual 800-1,000 lines.<\/span><\/p>\n<p><span data-contrast=\"none\">*The notifications can be handled by APNS or any third-party notification provider service.\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:1,&quot;335559739&quot;:160,&quot;335559740&quot;:480}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">* Enable VoIP service on your certificate if you want to open CallKit through notifications.<\/span><\/p>\n<p aria-level=\"3\"><b><span data-contrast=\"none\">Note:<\/span><\/b><span data-contrast=\"none\"> To try out this code, use iPhone with iOS 12.0 or a higher version.\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559738&quot;:460,&quot;335559739&quot;:120,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><b><span data-contrast=\"none\">Note<\/span><\/b><span data-contrast=\"none\">: CallKit is not supported on simulators.<\/span><\/p>\n<h2><\/h2>\n<h2><span class=\"TextRun SCXW209169378 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW209169378 BCX0\" data-ccp-parastyle=\"heading 1\">Prerequisites for Building iOS Video Call App<\/span><\/span><\/h2>\n<ol>\n<li><span data-contrast=\"none\">Basic-to-intermediate level understanding of Swift\/objective-C and Xcode is required.\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:1,&quot;335559685&quot;:0,&quot;335559731&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:480}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"none\">The Voice-Over IP feature needs to be enabled in the application under the background mode.\u00a0 <\/span><span data-ccp-props=\"{&quot;201341983&quot;:1,&quot;335559685&quot;:0,&quot;335559731&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:480}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"none\">To visit the tutorial, create an <\/span><a href=\"https:\/\/portal.enablex.io\/cpaas\/trial-sign-up\/\"><span data-contrast=\"none\"><strong>EnableX Developer Account<\/strong><\/span><\/a><span data-contrast=\"none\">.\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:1,&quot;335559685&quot;:0,&quot;335559731&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:480}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"none\">Xcode 10 or higher version is needed.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:1,&quot;335559685&quot;:0,&quot;335559731&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:480}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"none\">You\u2019ll need iOS\u00a0 12 or a higher version for installing EnableX CallKit.<\/span><\/li>\n<\/ol>\n<p><span class=\"NormalTextRun SCXW245074225 BCX0\">Let\u2019s <\/span><span class=\"NormalTextRun SCXW245074225 BCX0\">now take a <\/span><span class=\"NormalTextRun SCXW245074225 BCX0\">step-by-step <\/span><span class=\"NormalTextRun SCXW245074225 BCX0\">look at how <\/span><span class=\"NormalTextRun SCXW245074225 BCX0\">to build a simple and seamless <\/span><span class=\"NormalTextRun SCXW245074225 BCX0\">a<\/span><span class=\"NormalTextRun SCXW245074225 BCX0\">pp-to-<\/span><span class=\"NormalTextRun SCXW245074225 BCX0\">a<\/span><span class=\"NormalTextRun SCXW245074225 BCX0\">pp <\/span><span class=\"NormalTextRun SCXW245074225 BCX0\">c<\/span><span class=\"NormalTextRun SCXW245074225 BCX0\">alling<\/span><span class=\"NormalTextRun SCXW245074225 BCX0\"> mechanism<\/span><span class=\"NormalTextRun SCXW245074225 BCX0\">. <\/span><span class=\"NormalTextRun SCXW245074225 BCX0\">Let\u2019s<\/span><span class=\"NormalTextRun SCXW245074225 BCX0\"> start<\/span><span class=\"NormalTextRun SCXW245074225 BCX0\"> with<\/span> <span class=\"NormalTextRun SCXW245074225 BCX0\">install<\/span><span class=\"NormalTextRun SCXW245074225 BCX0\">ing<\/span> <span class=\"NormalTextRun SCXW245074225 BCX0\">the <\/span><span class=\"NormalTextRun SCXW245074225 BCX0\">EnableX CallKi<\/span><span class=\"NormalTextRun SCXW245074225 BCX0\">t:<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0a7\" data-font=\"Wingdings\" data-listid=\"20\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[9642],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0a7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">Use CocoaPods to install the project files and other dependencies.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:1,&quot;335559739&quot;:160,&quot;335559740&quot;:480}\"><br \/>\n<\/span><\/li>\n<li data-leveltext=\"\uf0a7\" data-font=\"Wingdings\" data-listid=\"20\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[9642],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0a7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"none\">To install Cocoa Pods, visit <\/span><a href=\"https:\/\/guides.cocoapods.org\/using\/getting-started.html#getting-started\"><span data-contrast=\"none\">Cocoa Pods \u2018Getting Started<\/span><\/a><span data-contrast=\"none\">\u2019<\/span><span data-contrast=\"none\"> webpage.<br \/>\n<\/span>Open your project podfile and add <span data-contrast=\"none\">pod &#8216;Enx_CallKit_iOS&#8217;.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:1,&quot;335559685&quot;:720,&quot;335559739&quot;:160,&quot;335559740&quot;:480}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0a7\" data-font=\"Wingdings\" data-listid=\"20\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[9642],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0a7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"none\">In the terminal, go to your project directory and type \u2018pod install\u2019.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:1,&quot;335559739&quot;:160,&quot;335559740&quot;:480}\">\u00a0<\/span><\/li>\n<\/ul>\n<ul>\n<li data-leveltext=\"\uf0a7\" data-font=\"Wingdings\" data-listid=\"20\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[9642],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0a7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">Reopen your project in Xcode using the new *.xcworkspace file.<\/span><\/li>\n<\/ul>\n<p><span class=\"NormalTextRun SCXW194515024 BCX0\">That\u2019s it, y<\/span><span class=\"NormalTextRun SCXW194515024 BCX0\">ou\u2019<\/span><span class=\"NormalTextRun SCXW194515024 BCX0\">ve<\/span> <span class=\"NormalTextRun SCXW194515024 BCX0\">installed! But b<\/span><span class=\"NormalTextRun SCXW194515024 BCX0\">efore moving ahead, <\/span><span class=\"NormalTextRun SCXW194515024 BCX0\">there are <\/span><span class=\"NormalTextRun SCXW194515024 BCX0\">a few <\/span><span class=\"NormalTextRun SCXW194515024 BCX0\">basic <\/span><span class=\"NormalTextRun SCXW194515024 BCX0\">things about <\/span><span class=\"NormalTextRun SCXW194515024 BCX0\">the <\/span><span class=\"NormalTextRun SCXW194515024 BCX0\">EnableX <\/span><span class=\"NormalTextRun SCXW194515024 BCX0\">CallKit <\/span><span class=\"NormalTextRun SCXW194515024 BCX0\">f<\/span><span class=\"NormalTextRun SCXW194515024 BCX0\">ramework<\/span> <span class=\"NormalTextRun SCXW194515024 BCX0\">that you need to know<\/span><span class=\"NormalTextRun SCXW194515024 BCX0\">.<\/span><\/p>\n<h2><\/h2>\n<h2><span class=\"TextRun SCXW181188690 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW181188690 BCX0\">Understanding <\/span><span class=\"NormalTextRun SCXW181188690 BCX0\">E<\/span><span class=\"NormalTextRun SCXW181188690 BCX0\">na<\/span><span class=\"NormalTextRun SCXW181188690 BCX0\">bleX Classes<\/span><\/span><\/h2>\n<p><span class=\"NormalTextRun SCXW172611475 BCX0\">Let\u2019s<\/span> <span class=\"NormalTextRun SCXW172611475 BCX0\">check out what <\/span><span class=\"NormalTextRun SCXW172611475 BCX0\">E<\/span><span class=\"NormalTextRun SCXW172611475 BCX0\">nable<\/span><span class=\"NormalTextRun SCXW172611475 BCX0\">X<\/span><span class=\"NormalTextRun SCXW172611475 BCX0\"> Classes <\/span><span class=\"NormalTextRun SCXW172611475 BCX0\">are <\/span><span class=\"NormalTextRun SCXW172611475 BCX0\">and <\/span><span class=\"NormalTextRun SCXW172611475 BCX0\">what they\u2019re for<\/span><span class=\"NormalTextRun SCXW172611475 BCX0\">:<\/span><\/p>\n<ol>\n<li><b><span data-contrast=\"none\">EnxRtc<\/span><\/b><span data-contrast=\"none\">: It <\/span><span data-contrast=\"none\">offers developers a way to connect with a meeting room and join in.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559685&quot;:0,&quot;335559731&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"none\">EnxRoom<\/span><\/b><span data-contrast=\"none\">: It handles various room-related functions to communicate with EnableX media, such as the endpoint connected to the EnableX meeting room, publishing self-streaming, and subscribing to remote streams. <\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559685&quot;:0,&quot;335559731&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"none\">EnxStream<\/span><\/b><span data-contrast=\"none\">: It manages all media stream-related functions, such as initiating, configuring, and transporting streams to EnableX media servers. It is also used to receive stream endpoints that need to be played.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559685&quot;:0,&quot;335559731&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li><b><span data-contrast=\"none\">EnxPlayerView<\/span><\/b><span data-contrast=\"none\">: It displays video streams on the EnxPlayerview.<\/span><\/li>\n<\/ol>\n<p><span class=\"TextRun SCXW267325199 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW267325199 BCX0\">If you<\/span><span class=\"NormalTextRun SCXW267325199 BCX0\"> want to know more about it<\/span><span class=\"NormalTextRun SCXW267325199 BCX0\">, <\/span><span class=\"NormalTextRun SCXW267325199 BCX0\">check out <\/span><span class=\"NormalTextRun SCXW267325199 BCX0\">the<\/span> <\/span><a class=\"Hyperlink SCXW267325199 BCX0\" href=\"https:\/\/developer.enablex.io\/video-api\/client-api\/ios-toolkit\/\" target=\"_blank\" rel=\"noreferrer noopener\"><span class=\"TextRun Underlined SCXW267325199 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW267325199 BCX0\" data-ccp-charstyle=\"Hyperlink\">Enable<\/span><span class=\"NormalTextRun SCXW267325199 BCX0\" data-ccp-charstyle=\"Hyperlink\">X<\/span> <span class=\"NormalTextRun SCXW267325199 BCX0\" data-ccp-charstyle=\"Hyperlink\">O<\/span><span class=\"NormalTextRun SCXW267325199 BCX0\" data-ccp-charstyle=\"Hyperlink\">fficial <\/span><span class=\"NormalTextRun SCXW267325199 BCX0\" data-ccp-charstyle=\"Hyperlink\">D<\/span><span class=\"NormalTextRun SCXW267325199 BCX0\" data-ccp-charstyle=\"Hyperlink\">eveloper <\/span><span class=\"NormalTextRun SCXW267325199 BCX0\" data-ccp-charstyle=\"Hyperlink\">D<\/span><span class=\"NormalTextRun SCXW267325199 BCX0\" data-ccp-charstyle=\"Hyperlink\">ocumentation<\/span><\/span><\/a><span class=\"TextRun Underlined SCXW267325199 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW267325199 BCX0\" data-ccp-charstyle=\"Hyperlink\">.<\/span><\/span><\/p>\n<h2><span class=\"NormalTextRun SCXW50008882 BCX0\">EnableX Call<\/span><span class=\"NormalTextRun SCXW50008882 BCX0\">K<\/span><span class=\"NormalTextRun SCXW50008882 BCX0\">it Framework <\/span><span class=\"NormalTextRun SCXW50008882 BCX0\">Behaviors &amp;<\/span><span class=\"NormalTextRun SCXW50008882 BCX0\"> Callbacks<\/span><\/h2>\n<p><span class=\"TextRun SCXW126791273 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SCXW126791273 BCX0\">The first step is to <\/span><span class=\"NormalTextRun SCXW126791273 BCX0\">import <\/span><\/span><span class=\"TextRun SCXW126791273 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SpellingErrorV2Themed SCXW126791273 BCX0\">Enx_CallKit_iOS<\/span><span class=\"NormalTextRun SCXW126791273 BCX0\">. After that, <\/span><span class=\"NormalTextRun SCXW126791273 BCX0\">create an object of <\/span><\/span><span class=\"TextRun SCXW126791273 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SpellingErrorV2Themed SCXW126791273 BCX0\">EnxCallKit<\/span><\/span> <span class=\"TextRun SCXW126791273 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW126791273 BCX0\">c<\/span><span class=\"NormalTextRun SCXW126791273 BCX0\">lass<\/span><span class=\"NormalTextRun SCXW126791273 BCX0\">.<\/span><\/span><\/p>\n<p><span data-contrast=\"none\">For example:<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u00a0<\/span><b><span data-contrast=\"none\">var callManager = EnxCallKit(self)<\/span><\/b><span data-contrast=\"none\">\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">First of all, you need to pass an instance of the class where you\u2019ll receive event callbacks. You can open the EnableX CallKit UI after receiving push notifications on your app.<\/span><\/p>\n<p><span data-contrast=\"none\">For example:<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">let backGroundTaskIndet = UIApplication.shared.beginBackgroundTask(expirationHandler: nil)<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">callManager.reportIncomingCall(uuid: UUID(), callerName: &#8220;Caller Name&#8221;, hasVideo: true\/False){ _ in<\/span><\/p>\n<p><span data-contrast=\"none\">UIApplication.shared.endBackgroundTask(backGroundTaskIndet)}<\/span><\/p>\n<p><span class=\"NormalTextRun SCXW256475167 BCX0\">U<\/span><span class=\"NormalTextRun SCXW256475167 BCX0\">sers <\/span><span class=\"NormalTextRun SCXW256475167 BCX0\">need <\/span><span class=\"NormalTextRun SCXW256475167 BCX0\">to add <\/span><span class=\"NormalTextRun SCXW256475167 BCX0\">a <\/span><span class=\"NormalTextRun SCXW256475167 BCX0\">background task before <\/span><span class=\"NormalTextRun SCXW256475167 BCX0\">the C<\/span><span class=\"NormalTextRun SCXW256475167 BCX0\">alling UI<\/span> <span class=\"NormalTextRun SCXW256475167 BCX0\">loads<\/span><span class=\"NormalTextRun SCXW256475167 BCX0\">. <\/span><span class=\"NormalTextRun SCXW256475167 BCX0\">O<\/span><span class=\"NormalTextRun SCXW256475167 BCX0\">nce<\/span><span class=\"NormalTextRun SCXW256475167 BCX0\"> the<\/span><span class=\"NormalTextRun SCXW256475167 BCX0\"> UI <\/span><span class=\"NormalTextRun SCXW256475167 BCX0\">loading is<\/span><span class=\"NormalTextRun SCXW256475167 BCX0\"> over<\/span><span class=\"NormalTextRun SCXW256475167 BCX0\">, t<\/span><span class=\"NormalTextRun SCXW256475167 BCX0\">he background task<\/span> <span class=\"NormalTextRun SCXW256475167 BCX0\">should <\/span><span class=\"NormalTextRun SCXW256475167 BCX0\">be closed<\/span><span class=\"NormalTextRun SCXW256475167 BCX0\">.<\/span> <span class=\"NormalTextRun SCXW256475167 BCX0\">The <\/span><span class=\"NormalTextRun SCXW256475167 BCX0\">reason behind <\/span><span class=\"NormalTextRun SCXW256475167 BCX0\">this <\/span><span class=\"NormalTextRun SCXW256475167 BCX0\">is<\/span><span class=\"NormalTextRun SCXW256475167 BCX0\"> simple: <\/span><span class=\"NormalTextRun SCXW256475167 BCX0\">w<\/span><span class=\"NormalTextRun SCXW256475167 BCX0\">hen<\/span> <span class=\"NormalTextRun SCXW256475167 BCX0\">an<\/span> <span class=\"NormalTextRun SCXW256475167 BCX0\">app<\/span><span class=\"NormalTextRun SCXW256475167 BCX0\"> opens in <\/span><span class=\"NormalTextRun SCXW256475167 BCX0\">another app<\/span><span class=\"NormalTextRun SCXW256475167 BCX0\">,<\/span><span class=\"NormalTextRun SCXW256475167 BCX0\"> the <\/span><span class=\"NormalTextRun SCXW256475167 BCX0\">former<\/span> <span class=\"NormalTextRun SCXW256475167 BCX0\">app<\/span> <span class=\"NormalTextRun SCXW256475167 BCX0\">also <\/span><span class=\"NormalTextRun SCXW256475167 BCX0\">remains <\/span><span class=\"NormalTextRun SCXW256475167 BCX0\">open <\/span><span class=\"NormalTextRun SCXW256475167 BCX0\">in the background<\/span><span class=\"NormalTextRun SCXW256475167 BCX0\">.<\/span><\/p>\n<p><span class=\"TextRun SCXW172576077 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW172576077 BCX0\">To end the call<\/span><span class=\"NormalTextRun SCXW172576077 BCX0\">, use the following API:<\/span><\/span><\/p>\n<p><span class=\"TextRun SCXW96966049 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SpellingErrorV2Themed SCXW96966049 BCX0\">callManager.endCall<\/span><span class=\"NormalTextRun SCXW96966049 BCX0\">()<\/span><\/span><\/p>\n<p><span class=\"NormalTextRun SCXW59979494 BCX0\">After <\/span><span class=\"NormalTextRun SCXW59979494 BCX0\">the user receive<\/span><span class=\"NormalTextRun SCXW59979494 BCX0\">s<\/span><span class=\"NormalTextRun SCXW59979494 BCX0\"> the call, <\/span><span class=\"NormalTextRun SCXW59979494 BCX0\">EnableX <\/span><span class=\"NormalTextRun SCXW59979494 BCX0\">CallKit <\/span><span class=\"NormalTextRun SCXW59979494 BCX0\">start<\/span><span class=\"NormalTextRun SCXW59979494 BCX0\">s<\/span><span class=\"NormalTextRun SCXW59979494 BCX0\"> notifying <\/span><span class=\"NormalTextRun SCXW59979494 BCX0\">the behaviour<\/span><span class=\"NormalTextRun SCXW59979494 BCX0\">\u00a0of <\/span><span class=\"NormalTextRun SCXW59979494 BCX0\">the user.<\/span><\/p>\n<p><span data-contrast=\"none\">For example:<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"25\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">Call Answered: func callAnswer():when you receive the call<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"25\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"none\">Call Rejected:\u00a0\u00a0 func callReject():\u00a0 when you reject the call<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"25\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><span data-contrast=\"none\">Call Timeout:\u00a0\u00a0\u00a0 func callTimeOut(): when you don\u2019t respond to the call within 45seconds<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"25\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><span data-contrast=\"none\">Call Ended:\u00a0\u00a0\u00a0 func callEnd(): when you end the call<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"25\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"3\" data-aria-level=\"1\"><span data-contrast=\"none\">Call Hold:\u00a0\u00a0\u00a0 func callHold(): when you put the call on hold<\/span><\/li>\n<\/ul>\n<p><span class=\"EOP SCXW96966049 BCX0\" data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\"> <span class=\"NormalTextRun SCXW106372309 BCX0\">To<\/span><span class=\"NormalTextRun SCXW106372309 BCX0\"> join the EnableX r<\/span><span class=\"NormalTextRun SCXW106372309 BCX0\">oom after recei<\/span><span class=\"NormalTextRun SCXW106372309 BCX0\">ving the <\/span><span class=\"NormalTextRun SCXW106372309 BCX0\">call<\/span> <span class=\"NormalTextRun SCXW106372309 BCX0\">via<\/span> <span class=\"NormalTextRun SCXW106372309 BCX0\">CallKit<\/span><span class=\"NormalTextRun SCXW106372309 BCX0\">,<\/span><span class=\"NormalTextRun SCXW106372309 BCX0\"> y<\/span><span class=\"NormalTextRun SCXW106372309 BCX0\">ou <\/span><span class=\"NormalTextRun SCXW106372309 BCX0\">must<\/span><span class=\"NormalTextRun SCXW106372309 BCX0\"> create <\/span><span class=\"NormalTextRun SCXW106372309 BCX0\">an <\/span><span class=\"NormalTextRun SCXW106372309 BCX0\">A<\/span><span class=\"NormalTextRun SCXW106372309 BCX0\">ccess<\/span> <span class=\"NormalTextRun SCXW106372309 BCX0\">T<\/span><span class=\"NormalTextRun SCXW106372309 BCX0\">oken<\/span><span class=\"NormalTextRun SCXW106372309 BCX0\">.<\/span><\/span><\/p>\n<h2><span class=\"TextRun SCXW181316041 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW181316041 BCX0\" data-ccp-parastyle=\"heading 2\">Generate <\/span><span class=\"NormalTextRun SCXW181316041 BCX0\" data-ccp-parastyle=\"heading 2\">Access Token<\/span><\/span><\/h2>\n<p><span data-contrast=\"none\">Every user needs a unique Access Token to connect to a room. This step is usually done by <\/span><a href=\"https:\/\/openapi.enablex.io\/video\/v1\/api-docs\/#\/Rooms\"><span data-contrast=\"none\">Rest API\u2019s Call<\/span><\/a><span data-contrast=\"none\">.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">To generate the Access Token and Room ID, you use the link provided below:\u00a0 <\/span><a href=\"https:\/\/openapi.enablex.io\/video\/v1\/api-docs\/#\/Rooms\"><span data-contrast=\"none\">https:\/\/openapi.enablex.io\/video\/v1\/api-docs\/#\/Rooms<\/span><\/a><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">To join the EnableX room, a user must have the Access Token from the EnableX server and EnableX iOS SDK.\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">This token can be generated by using EnableX UIKit or EnableX audio\/video framework:<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0a7\" data-font=\"Wingdings\" data-listid=\"19\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Wingdings&quot;,&quot;469769242&quot;:[9642],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0a7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><b><span data-contrast=\"none\">With EnableX UIKit Framework<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559685&quot;:284,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"none\">\u00a0Install the EnableX UIKit through the pod<\/span><b><span data-contrast=\"none\"> &#8216;Enx_UIKit_iOS&#8217;.\u00a0<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u00a0Follow the steps as shown below:<\/span><\/p>\n<p><b><span data-contrast=\"none\">Step 1: Install the EnableX UIKit Using Pod<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">Add this to your pod file:<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u00a0pod &#8216;Enx_UIKit_iOS&#8217;.\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">Then, install the pod. EnableX UIKit SDK is now integrated. You can use it in your application.<\/span><\/p>\n<p><b><span data-contrast=\"none\">Step 2: Import UIKit in Your Controller Where You Want to Open Your Video Class<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">Import \u2018Enx_UIKit_iOS\u2019. Then, initiate the EnxVideoViewClass.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">For example:<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">let enxViewer = EnxVideoViewClass(token: &#8220;a valid room token&#8221;, delegate: self)<\/span><\/p>\n<p><b><span data-contrast=\"none\">Step 3: Add the Following Object to Your View<\/span><\/b><span data-contrast=\"none\">\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">view.addSubview(enxViewer)<\/span><\/p>\n<p><b><span data-contrast=\"none\">Step 4: Set the Frame<\/span><\/b><br \/>\n<span data-contrast=\"none\">enxViewer.frame = self.view.bounds<\/span><\/p>\n<p><strong><span class=\"TextRun SCXW238167220 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW238167220 BCX0\">Step<\/span><span class=\"NormalTextRun SCXW238167220 BCX0\"> 5:<\/span><\/span><\/strong> <span class=\"TextRun SCXW238167220 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW238167220 BCX0\">Set <\/span><span class=\"NormalTextRun SCXW238167220 BCX0\">Constraint<\/span><span class=\"NormalTextRun SCXW238167220 BCX0\">s<\/span> <span class=\"NormalTextRun SCXW238167220 BCX0\">t<\/span><span class=\"NormalTextRun SCXW238167220 BCX0\">o Auto<\/span><span class=\"NormalTextRun SCXW238167220 BCX0\">&#8211;<\/span><span class=\"NormalTextRun SCXW238167220 BCX0\">Adjust <\/span><span class=\"NormalTextRun SCXW238167220 BCX0\">UI <\/span><span class=\"NormalTextRun SCXW238167220 BCX0\">When<\/span><span class=\"NormalTextRun SCXW238167220 BCX0\"> Orientation Change<\/span><span class=\"NormalTextRun SCXW238167220 BCX0\">s<\/span><\/span> <span class=\"LineBreakBlob BlobObject DragDrop SCXW238167220 BCX0\"><span class=\"SCXW238167220 BCX0\">\u00a0<\/span><br class=\"SCXW238167220 BCX0\" \/><\/span><span class=\"TextRun SCXW238167220 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SpellingErrorV2Themed SCXW238167220 BCX0\">enxViewer.autoresizingMask<\/span><span class=\"NormalTextRun SCXW238167220 BCX0\"> = <\/span><span class=\"NormalTextRun SCXW238167220 BCX0\">[.<\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW238167220 BCX0\">flexibleWidth<\/span><span class=\"NormalTextRun SCXW238167220 BCX0\">, .<\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW238167220 BCX0\">flexibleHeight<\/span><span class=\"NormalTextRun SCXW238167220 BCX0\">]<\/span><\/span><\/p>\n<p><span class=\"NormalTextRun SCXW258229351 BCX0\">The v<\/span><span class=\"NormalTextRun SCXW258229351 BCX0\">ideo integration is <\/span><span class=\"NormalTextRun SCXW258229351 BCX0\">now <\/span><span class=\"NormalTextRun SCXW258229351 BCX0\">complete<\/span><span class=\"NormalTextRun SCXW258229351 BCX0\">. <\/span><span class=\"NormalTextRun SCXW258229351 BCX0\">You<\/span><span class=\"NormalTextRun SCXW258229351 BCX0\">\u2019ll <\/span><span class=\"NormalTextRun SCXW258229351 BCX0\">receive a callback <\/span><span class=\"NormalTextRun SCXW258229351 BCX0\">when <\/span><span class=\"NormalTextRun SCXW258229351 BCX0\">a user gets disconnected or <\/span><span class=\"NormalTextRun SCXW258229351 BCX0\">if <\/span><span class=\"NormalTextRun SCXW258229351 BCX0\">there<\/span><span class=\"NormalTextRun SCXW258229351 BCX0\">\u2019s <\/span><span class=\"NormalTextRun SCXW258229351 BCX0\">any error while <\/span><span class=\"NormalTextRun SCXW258229351 BCX0\">joining the room<\/span><span class=\"NormalTextRun SCXW258229351 BCX0\">:<\/span><\/p>\n<ul style=\"font-weight: 400;\">\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"23\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><b><span data-contrast=\"none\">When the room is disconnected: <\/span><\/b><span data-contrast=\"none\">func disconnect (response: [Any]?)<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"23\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><b><span data-contrast=\"none\">Error while connecting: <\/span><\/b><span data-contrast=\"none\">func connectError (reason: [Any]?)<\/span><\/li>\n<\/ul>\n<ul>\n<li><strong><span class=\"NormalTextRun SCXW111159678 BCX0\">Using<\/span><span class=\"NormalTextRun SCXW111159678 BCX0\"> EnableX Au<\/span><span class=\"NormalTextRun SCXW111159678 BCX0\">dio<\/span><span class=\"NormalTextRun SCXW111159678 BCX0\">\/Video <\/span><span class=\"NormalTextRun SCXW111159678 BCX0\">F<\/span><span class=\"NormalTextRun SCXW111159678 BCX0\">ramework<\/span><\/strong><\/li>\n<\/ul>\n<p><span data-contrast=\"none\">Install EnableX iOS SDK through Pod. Add this to your pod file: pod \u2018EnxRTCiOS\u2019, and then install the Pod.\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">EnableX iOS SDK is now integrated and you can use it on your app. Here\u2019s how to join the room:<\/span><\/p>\n<p><span class=\"TextRun SCXW226164996 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SpellingErrorV2Themed SCXW226164996 BCX0\">func<\/span><\/span> <span class=\"TextRun SCXW226164996 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SpellingErrorV2Themed SpellingErrorHighlight SCXW226164996 BCX0\">joinCall<\/span><\/span><span class=\"TextRun SCXW226164996 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW226164996 BCX0\">(<\/span><\/span><span class=\"TextRun SCXW226164996 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW226164996 BCX0\">_<\/span><\/span><span class=\"TextRun SCXW226164996 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW226164996 BCX0\"> token : <\/span><\/span><span class=\"TextRun SCXW226164996 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW226164996 BCX0\">String<\/span><\/span><span class=\"TextRun SCXW226164996 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW226164996 BCX0\">){<\/span><\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"24\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><b><span data-contrast=\"none\">Set Video Size<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"none\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><b><span data-contrast=\"none\">let<\/span><\/b><span data-contrast=\"none\"> videoSize : <\/span><span data-contrast=\"none\">NSDictionary<\/span><span data-contrast=\"none\"> =\u00a0 [<\/span><span data-contrast=\"none\">&#8220;minWidth&#8221;<\/span><span data-contrast=\"none\"> : <\/span><span data-contrast=\"none\">320<\/span><span data-contrast=\"none\"> , <\/span> <span data-contrast=\"none\">&#8220;minHeight&#8221;<\/span><span data-contrast=\"none\"> : <\/span><span data-contrast=\"none\">180<\/span><span data-contrast=\"none\"> , <\/span><span data-contrast=\"none\">&#8220;maxWidth&#8221;<\/span><span data-contrast=\"none\"> : <\/span><span data-contrast=\"none\">1280<\/span><span data-contrast=\"none\">, <\/span><span data-contrast=\"none\">&#8220;maxHeight&#8221;<\/span><span data-contrast=\"none\"> :<\/span><span data-contrast=\"none\">720<\/span><span data-contrast=\"none\">]<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"24\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"2\" data-aria-level=\"1\"><b><span data-contrast=\"none\">Setup Room Configuration<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"none\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><b><span data-contrast=\"none\">let<\/span><\/b><span data-contrast=\"none\"> roomInfo : [<\/span><span data-contrast=\"none\">String<\/span><span data-contrast=\"none\"> : <\/span><b><span data-contrast=\"none\">Any<\/span><\/b><span data-contrast=\"none\">] = [&#8220;allow_reconnect&#8221; :<\/span><b><span data-contrast=\"none\">true<\/span><\/b><span data-contrast=\"none\"> , &#8220;number_of_attempts&#8221; :\u00a0 <\/span><span data-contrast=\"none\">3<\/span><span data-contrast=\"none\"> ,&#8221;timeout_interval&#8221; : <\/span><span data-contrast=\"none\">20<\/span><span data-contrast=\"none\">,&#8221;activeviews&#8221; : &#8220;view<\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"24\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><b><span data-contrast=\"none\">Local Stream Configuration<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><span data-contrast=\"none\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><b><span data-contrast=\"none\">let<\/span><\/b><span data-contrast=\"none\"> localStreamInfo : <\/span><span data-contrast=\"none\">NSDictionary<\/span><span data-contrast=\"none\"> = [<\/span><span data-contrast=\"none\">&#8220;video&#8221;<\/span><span data-contrast=\"none\"> : <\/span><b><span data-contrast=\"none\">true<\/span><\/b><span data-contrast=\"none\"> ,<\/span><span data-contrast=\"none\">&#8220;audio&#8221;<\/span><span data-contrast=\"none\"> : <\/span><b><span data-contrast=\"none\">true<\/span><\/b><span data-contrast=\"none\">\u00a0 ,<\/span><span data-contrast=\"none\">&#8220;data&#8221;<\/span><span data-contrast=\"none\"> :<\/span><b><span data-contrast=\"none\">true<\/span><\/b><span data-contrast=\"none\"> ,<\/span><span data-contrast=\"none\">&#8220;name&#8221;<\/span><span data-contrast=\"none\"> :<\/span><span data-contrast=\"none\">&#8220;Jay&#8221;<\/span><span data-contrast=\"none\">,<\/span><span data-contrast=\"none\">&#8220;type&#8221;<\/span><span data-contrast=\"none\"> : <\/span><span data-contrast=\"none\">&#8220;public&#8221;<\/span><span data-contrast=\"none\">,<\/span><span data-contrast=\"none\">&#8220;audio_only&#8221;<\/span><span data-contrast=\"none\"> : <\/span><b><span data-contrast=\"none\">false<\/span><\/b><span data-contrast=\"none\"> , <\/span><span data-contrast=\"none\">&#8220;videoSize&#8221;<\/span><span data-contrast=\"none\"> : videoSize]<\/span><\/p>\n<p><span class=\"NormalTextRun SCXW120053812 BCX0\">Join Enable<\/span><span class=\"NormalTextRun SCXW120053812 BCX0\">X<\/span> <span class=\"NormalTextRun SCXW120053812 BCX0\">r<\/span><span class=\"NormalTextRun SCXW120053812 BCX0\">oom<\/span><span class=\"NormalTextRun SCXW120053812 BCX0\">.<\/span><span class=\"NormalTextRun SCXW120053812 BCX0\"> This method will return <\/span><span class=\"NormalTextRun SCXW120053812 BCX0\">the <\/span><span class=\"NormalTextRun SCXW120053812 BCX0\">local stream instance.<\/span><\/p>\n<p><b><span data-contrast=\"none\">guard<\/span><\/b> <b><span data-contrast=\"none\">let<\/span><\/b><span data-contrast=\"none\"> steam = <\/span><b><span data-contrast=\"none\">self<\/span><\/b><span data-contrast=\"none\">.objectJoin.joinRoom(token, delegate: <\/span><b><span data-contrast=\"none\">self<\/span><\/b><span data-contrast=\"none\">, publishStreamInfo: (localStreamInfo <\/span><b><span data-contrast=\"none\">as<\/span><\/b><span data-contrast=\"none\">! [<\/span><span data-contrast=\"none\">AnyHashable<\/span><span data-contrast=\"none\"> : <\/span><b><span data-contrast=\"none\">Any<\/span><\/b><span data-contrast=\"none\">]), roomInfo: roomInfo, advanceOptions: <\/span><b><span data-contrast=\"none\">nil<\/span><\/b><span data-contrast=\"none\">) <\/span><b><span data-contrast=\"none\">else<\/span><\/b><span data-contrast=\"none\">{<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><b><span data-contrast=\"none\">return<\/span><\/b><\/p>\n<p><span data-contrast=\"none\">}<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><b><span data-contrast=\"none\">self<\/span><\/b><span data-contrast=\"none\">.localStream = steam<\/span><\/p>\n<p><span data-contrast=\"none\">\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 <\/span><b><span data-contrast=\"none\">self<\/span><\/b><span data-contrast=\"none\">.localStream.delegate = <\/span><b><span data-contrast=\"none\">self<\/span><\/b> <b><span data-contrast=\"none\">as<\/span><\/b> <span data-contrast=\"none\">EnxStreamDelegate<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">}<\/span><\/p>\n<p><span class=\"TextRun SCXW210274958 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW210274958 BCX0\">Once<\/span> <span class=\"NormalTextRun SCXW210274958 BCX0\">users<\/span> <span class=\"NormalTextRun SCXW210274958 BCX0\">join the EnableX room<\/span><span class=\"NormalTextRun SCXW210274958 BCX0\">, <\/span><span class=\"NormalTextRun SCXW210274958 BCX0\">the<\/span><span class=\"NormalTextRun SCXW210274958 BCX0\">y\u2019ll <\/span><span class=\"NormalTextRun SCXW210274958 BCX0\">get <\/span><span class=\"NormalTextRun SCXW210274958 BCX0\">notified through<\/span> <\/span><span class=\"TextRun SCXW210274958 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SpellingErrorV2Themed SCXW210274958 BCX0\">EnxRoomDelegate<\/span><\/span><span class=\"TextRun SCXW210274958 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW210274958 BCX0\"> as<\/span><span class=\"NormalTextRun SCXW210274958 BCX0\"> shown<\/span><span class=\"NormalTextRun SCXW210274958 BCX0\"> below.<\/span><span class=\"NormalTextRun SCXW210274958 BCX0\"> You\u2019ll receive the <\/span><span class=\"NormalTextRun SCXW210274958 BCX0\">following callback:<\/span><\/span><\/p>\n<p><span class=\"TextRun SCXW222671424 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SpellingErrorV2Themed SCXW222671424 BCX0\">func<\/span><\/span> <span class=\"TextRun SCXW222671424 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW222671424 BCX0\">room<\/span><\/span><span class=\"TextRun SCXW222671424 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW222671424 BCX0\">(<\/span><span class=\"NormalTextRun SCXW222671424 BCX0\">room: <\/span><\/span><span class=\"TextRun SCXW222671424 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SpellingErrorV2Themed SCXW222671424 BCX0\">EnxRoom<\/span><\/span><span class=\"TextRun SCXW222671424 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW222671424 BCX0\">?, <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW222671424 BCX0\">didConnect<\/span> <span class=\"NormalTextRun SpellingErrorV2Themed SCXW222671424 BCX0\">roomMetadata<\/span><span class=\"NormalTextRun SCXW222671424 BCX0\">: [<\/span><\/span><span class=\"TextRun SCXW222671424 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SpellingErrorV2Themed SCXW222671424 BCX0\">AnyHashable<\/span><\/span><span class=\"TextRun SCXW222671424 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW222671424 BCX0\"> : <\/span><\/span><span class=\"TextRun SCXW222671424 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW222671424 BCX0\">Any<\/span><\/span><span class=\"TextRun SCXW222671424 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW222671424 BCX0\">]?)<\/span><\/span><\/p>\n<ul>\n<li><span class=\"NormalTextRun SCXW75133540 BCX0\">If a user fails to join the room due to any<\/span><span class=\"NormalTextRun SCXW75133540 BCX0\"> other<\/span><span class=\"NormalTextRun SCXW75133540 BCX0\"> reason<\/span><span class=\"NormalTextRun SCXW75133540 BCX0\">, you<\/span><span class=\"NormalTextRun SCXW75133540 BCX0\">\u2019ll<\/span><span class=\"NormalTextRun SCXW75133540 BCX0\"> receive the following callback:<\/span><\/li>\n<\/ul>\n<p><span class=\"TextRun SCXW185323766 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SpellingErrorV2Themed SCXW185323766 BCX0\">func<\/span><\/span> <span class=\"TextRun SCXW185323766 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW185323766 BCX0\">room<\/span><\/span><span class=\"TextRun SCXW185323766 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW185323766 BCX0\">(<\/span><span class=\"NormalTextRun SCXW185323766 BCX0\">room: <\/span><\/span><span class=\"TextRun SCXW185323766 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SpellingErrorV2Themed SCXW185323766 BCX0\">EnxRoom<\/span><\/span><span class=\"TextRun SCXW185323766 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW185323766 BCX0\">?, <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW185323766 BCX0\">didError<\/span><span class=\"NormalTextRun SCXW185323766 BCX0\"> reason: [<\/span><\/span><span class=\"TextRun SCXW185323766 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW185323766 BCX0\">Any<\/span><\/span><span class=\"TextRun SCXW185323766 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW185323766 BCX0\">]?)<\/span><\/span><\/p>\n<p><span class=\"TextRun SCXW49383229 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW49383229 BCX0\">Once <\/span><span class=\"NormalTextRun SCXW49383229 BCX0\">a <\/span><span class=\"NormalTextRun SCXW49383229 BCX0\">user<\/span><span class=\"NormalTextRun SCXW49383229 BCX0\"> publish<\/span><span class=\"NormalTextRun SCXW49383229 BCX0\">es<\/span> <span class=\"NormalTextRun SCXW49383229 BCX0\">a <\/span><span class=\"NormalTextRun SCXW49383229 BCX0\">l<\/span><span class=\"NormalTextRun SCXW49383229 BCX0\">ocal stream and subscribe<\/span><span class=\"NormalTextRun SCXW49383229 BCX0\">s<\/span><span class=\"NormalTextRun SCXW49383229 BCX0\"> to<\/span> <span class=\"NormalTextRun SCXW49383229 BCX0\">a <\/span><span class=\"NormalTextRun SCXW49383229 BCX0\">remote stream<\/span><span class=\"NormalTextRun SCXW49383229 BCX0\">, they<\/span><span class=\"NormalTextRun SCXW49383229 BCX0\">\u2019ll <\/span><span class=\"NormalTextRun SCXW49383229 BCX0\">get<\/span><span class=\"NormalTextRun SCXW49383229 BCX0\"> a<\/span><span class=\"NormalTextRun SCXW49383229 BCX0\"> list of Active <\/span><span class=\"NormalTextRun SCXW49383229 BCX0\">T<\/span><span class=\"NormalTextRun SCXW49383229 BCX0\">alker update<\/span><span class=\"NormalTextRun SCXW49383229 BCX0\">s<\/span><\/span><span class=\"TextRun SCXW49383229 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW49383229 BCX0\">. <\/span><\/span><span class=\"TextRun SCXW49383229 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW49383229 BCX0\">To get <\/span><span class=\"NormalTextRun SCXW49383229 BCX0\">the <\/span><span class=\"NormalTextRun SCXW49383229 BCX0\">complete Active <\/span><span class=\"NormalTextRun SCXW49383229 BCX0\">T<\/span><span class=\"NormalTextRun SCXW49383229 BCX0\">alker view<\/span><span class=\"NormalTextRun SCXW49383229 BCX0\">:<\/span><\/span><\/p>\n<p><span class=\"TextRun SCXW175965474 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SpellingErrorV2Themed SCXW175965474 BCX0\">func<\/span><\/span> <span class=\"TextRun SCXW175965474 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW175965474 BCX0\">room<\/span><\/span><span class=\"TextRun SCXW175965474 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW175965474 BCX0\">(<\/span><\/span><span class=\"TextRun SCXW175965474 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW175965474 BCX0\">_<\/span><\/span><span class=\"TextRun SCXW175965474 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW175965474 BCX0\"> room: <\/span><\/span><span class=\"TextRun SCXW175965474 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SpellingErrorV2Themed SCXW175965474 BCX0\">EnxRoom<\/span><\/span><span class=\"TextRun SCXW175965474 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW175965474 BCX0\">?, <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW175965474 BCX0\">didActiveTalkerView<\/span><span class=\"NormalTextRun SCXW175965474 BCX0\"> view: <\/span><\/span><span class=\"TextRun SCXW175965474 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SpellingErrorV2Themed SCXW175965474 BCX0\">UIView<\/span><\/span><span class=\"TextRun SCXW175965474 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW175965474 BCX0\">?)<\/span><\/span><\/p>\n<p><span class=\"TextRun SCXW198592871 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW198592871 BCX0\">To get <\/span><span class=\"NormalTextRun SCXW198592871 BCX0\">the <\/span><span class=\"NormalTextRun SCXW198592871 BCX0\">list of <\/span><span class=\"NormalTextRun SCXW198592871 BCX0\">A<\/span><span class=\"NormalTextRun SCXW198592871 BCX0\">ctive <\/span><span class=\"NormalTextRun SCXW198592871 BCX0\">T<\/span><span class=\"NormalTextRun SCXW198592871 BCX0\">alkers<\/span><span class=\"NormalTextRun SCXW198592871 BCX0\"> (<\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW198592871 BCX0\">EnxStream<\/span><span class=\"NormalTextRun SCXW198592871 BCX0\"> for all <\/span><span class=\"NormalTextRun SCXW198592871 BCX0\">T<\/span><span class=\"NormalTextRun SCXW198592871 BCX0\">alker<\/span><span class=\"NormalTextRun SCXW198592871 BCX0\">s<\/span><span class=\"NormalTextRun SCXW198592871 BCX0\"> in <\/span><span class=\"NormalTextRun SCXW198592871 BCX0\">the<\/span><span class=\"NormalTextRun SCXW198592871 BCX0\"> conference)<\/span><\/span><\/p>\n<p><span class=\"TextRun SCXW15745476 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SpellingErrorV2Themed SCXW15745476 BCX0\">func<\/span><\/span> <span class=\"TextRun SCXW15745476 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW15745476 BCX0\">room<\/span><\/span><span class=\"TextRun SCXW15745476 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun ContextualSpellingAndGrammarErrorV2Themed SCXW15745476 BCX0\">(<\/span><span class=\"NormalTextRun SCXW15745476 BCX0\">room: <\/span><\/span><span class=\"TextRun SCXW15745476 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SpellingErrorV2Themed SCXW15745476 BCX0\">EnxRoom<\/span><\/span><span class=\"TextRun SCXW15745476 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW15745476 BCX0\">?, <\/span><span class=\"NormalTextRun SpellingErrorV2Themed SCXW15745476 BCX0\">didActiveTalkerList<\/span><span class=\"NormalTextRun SCXW15745476 BCX0\"> Data: [<\/span><\/span><span class=\"TextRun SCXW15745476 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW15745476 BCX0\">Any<\/span><\/span><span class=\"TextRun SCXW15745476 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW15745476 BCX0\">]?)<\/span><\/span><\/p>\n<ul>\n<li data-leveltext=\"\uf0b7\" data-font=\"Symbol\" data-listid=\"24\" data-list-defn-props=\"{&quot;335552541&quot;:1,&quot;335559684&quot;:-2,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;\uf0b7&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}\" aria-setsize=\"-1\" data-aria-posinset=\"1\" data-aria-level=\"1\"><b><span data-contrast=\"none\">When A User Gets Disconnected<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<\/ul>\n<p><b><span data-contrast=\"none\">func<\/span><\/b><span data-contrast=\"none\"> didRoomDisconnect(<\/span><b><span data-contrast=\"none\">_<\/span><\/b><span data-contrast=\"none\"> response: [<\/span><b><span data-contrast=\"none\">Any<\/span><\/b><span data-contrast=\"none\">]?)<\/span><\/p>\n<p><span class=\"NormalTextRun SCXW177659705 BCX0\">To know more about EnableX iOS <\/span><span class=\"NormalTextRun SCXW177659705 BCX0\">SDK <\/span><span class=\"NormalTextRun SCXW177659705 BCX0\">and<\/span><span class=\"NormalTextRun SCXW177659705 BCX0\"> APIs<\/span><span class=\"NormalTextRun SCXW177659705 BCX0\">, check <\/span><span class=\"NormalTextRun SCXW177659705 BCX0\">out this link<\/span><span class=\"NormalTextRun SCXW177659705 BCX0\">:<\/span><\/p>\n<blockquote class=\"wp-embedded-content\" data-secret=\"h1YcYyfFJh\"><p><a href=\"https:\/\/www.enablex.io\/developer\/video-api\/client-api\/ios-toolkit\/\">iOS SDK &#8211; Video API<\/a><\/p><\/blockquote>\n<p><iframe class=\"wp-embedded-content\" sandbox=\"allow-scripts\" security=\"restricted\" style=\"position: absolute; clip: rect(1px, 1px, 1px, 1px);\" title=\"&#8220;iOS SDK &#8211; Video API&#8221; &#8212; EnableX Developer Centre\" src=\"https:\/\/www.enablex.io\/developer\/video-api\/client-api\/ios-toolkit\/embed\/#?secret=h1YcYyfFJh\" data-secret=\"h1YcYyfFJh\" width=\"600\" height=\"338\" frameborder=\"0\" marginwidth=\"0\" marginheight=\"0\" scrolling=\"no\"><\/iframe><\/p>\n<p><strong><span class=\"TextRun SCXW264296646 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW264296646 BCX0\">Call<\/span><span class=\"NormalTextRun SCXW264296646 BCX0\">ing<\/span><span class=\"NormalTextRun SCXW264296646 BCX0\"> UI<\/span> <span class=\"NormalTextRun SCXW264296646 BCX0\">Screen <\/span><span class=\"NormalTextRun SCXW264296646 BCX0\">(A<\/span><span class=\"NormalTextRun SCXW264296646 BCX0\">udio\/V<\/span><span class=\"NormalTextRun SCXW264296646 BCX0\">ideo F<\/span><span class=\"NormalTextRun SCXW264296646 BCX0\">ramework<\/span><span class=\"NormalTextRun SCXW264296646 BCX0\">)<\/span><\/span><\/strong><\/p>\n<p><img decoding=\"async\" class=\"aligncenter size-large wp-image-1981\" src=\"https:\/\/www.enablex.io\/insights\/wp-content\/uploads\/2022\/06\/Calling-UI-Screen-Audio-video-Framework-1024x494.png\" alt=\"Calling UI Screen (Audio Video Framework)\" width=\"760\" height=\"367\" srcset=\"https:\/\/www.enablex.io\/insights\/wp-content\/uploads\/2022\/06\/Calling-UI-Screen-Audio-video-Framework-1024x494.png 1024w, https:\/\/www.enablex.io\/insights\/wp-content\/uploads\/2022\/06\/Calling-UI-Screen-Audio-video-Framework-300x145.png 300w, https:\/\/www.enablex.io\/insights\/wp-content\/uploads\/2022\/06\/Calling-UI-Screen-Audio-video-Framework-768x371.png 768w, https:\/\/www.enablex.io\/insights\/wp-content\/uploads\/2022\/06\/Calling-UI-Screen-Audio-video-Framework.png 1374w\" sizes=\"(max-width: 760px) 100vw, 760px\" \/><\/p>\n<p><span data-contrast=\"none\">(From left to right)<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<ol>\n<li><span data-contrast=\"none\">When the call starts.\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"none\">When the screen unlocks.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:259}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"none\">After the call is received by the end-user, the native dialer interface (for audio-only call).<\/span><\/li>\n<\/ol>\n<p><strong><span class=\"TextRun SCXW141568228 BCX0\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"none\"><span class=\"NormalTextRun SCXW141568228 BCX0\">Calling <\/span><span class=\"NormalTextRun SCXW141568228 BCX0\">UI <\/span><span class=\"NormalTextRun SCXW141568228 BCX0\">Screen<\/span><span class=\"NormalTextRun SCXW141568228 BCX0\"> (UIKit)<\/span><\/span><\/strong><\/p>\n<p><img decoding=\"async\" class=\"aligncenter size-large wp-image-1982\" src=\"https:\/\/www.enablex.io\/insights\/wp-content\/uploads\/2022\/06\/Calling-UI-Screen-UIKit-1024x494.png\" alt=\"Calling UI Screen (UIKit) \" width=\"760\" height=\"367\" srcset=\"https:\/\/www.enablex.io\/insights\/wp-content\/uploads\/2022\/06\/Calling-UI-Screen-UIKit-1024x494.png 1024w, https:\/\/www.enablex.io\/insights\/wp-content\/uploads\/2022\/06\/Calling-UI-Screen-UIKit-300x145.png 300w, https:\/\/www.enablex.io\/insights\/wp-content\/uploads\/2022\/06\/Calling-UI-Screen-UIKit-768x371.png 768w, https:\/\/www.enablex.io\/insights\/wp-content\/uploads\/2022\/06\/Calling-UI-Screen-UIKit.png 1374w\" sizes=\"(max-width: 760px) 100vw, 760px\" \/><\/p>\n<ol>\n<li><span data-contrast=\"none\">When you join using UIKit.<\/span><\/li>\n<li>When you\u2019re waiting for other users to join the call.<\/li>\n<li>When a user joins the room.<\/li>\n<li>When multiple users join the room.<\/li>\n<\/ol>\n<p><b><span data-contrast=\"none\">Final Words<\/span><\/b><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">The era of time-consuming and energy-sapping coding is gone, thanks to the EnableX CallKit framework! <\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\"><a href=\"https:\/\/portal.enablex.io\/cpaas\/trial-sign-up\/\">Sign Up<\/a> Now to build your very own iOS Video Call App with EnableX CallKit Framework in no time!<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:120,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p><span data-contrast=\"none\">Let&#8217;s Build Something Exciting!<\/span><\/p>\n<p>The EnableX Video Platform is built using the best-in-class technologies and infrastructure to deliver best possible customer experience. With the use of WebRTC as the underlying real-time communication framework, we ensure seamless communication across end points and mobile devices. We offer native APIs and SDK\u2019s along with hybrid frameworks \u2013 both for web and mobile applications including ReactNative, Flutter and Cordova to enable quick integration by developers.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>As digital communication is growing rapidly, app-to-app calling stands out as an exciting thing to try out. While it feels tempting to quickly add an audio\/video calling feature into your iOS app, it\u2019s not an easy job. That\u2019s because building it from scratch involves plenty of coding and complex integration. \u00a0 That\u2019s where the EnableX &#8230;<\/p>\n","protected":false},"author":13,"featured_media":1983,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[134,122,23,133,93],"tags":[151],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.4 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Build iOS Video Call App using Few Lines of Code<\/title>\n<meta name=\"description\" content=\"Learn how to develop an iOS video call app with minimal code. Explore step-by-step instructions for quick and efficient implementation.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.enablex.io\/insights\/build-ios-video-call-app-using-few-lines-of-code\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Build iOS Video Call App using Few Lines of Code\" \/>\n<meta property=\"og:description\" content=\"Learn how to develop an iOS video call app with minimal code. Explore step-by-step instructions for quick and efficient implementation.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.enablex.io\/insights\/build-ios-video-call-app-using-few-lines-of-code\/\" \/>\n<meta property=\"og:site_name\" content=\"Insights about video API, SMS API; WhatsApp for Business API\" \/>\n<meta property=\"article:published_time\" content=\"2022-06-29T06:26:07+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-11-28T04:56:19+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.enablex.io\/insights\/wp-content\/uploads\/2022\/06\/Create-An-Application-For-App-to-App-Calling-With-EnableX-Framework-Featured-Image.png\" \/>\n\t<meta property=\"og:image:width\" content=\"768\" \/>\n\t<meta property=\"og:image:height\" content=\"270\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Jay Prakash\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@enablexio\" \/>\n<meta name=\"twitter:site\" content=\"@enablexio\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Jay Prakash\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Build iOS Video Call App using Few Lines of Code","description":"Learn how to develop an iOS video call app with minimal code. Explore step-by-step instructions for quick and efficient implementation.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.enablex.io\/insights\/build-ios-video-call-app-using-few-lines-of-code\/","og_locale":"en_US","og_type":"article","og_title":"Build iOS Video Call App using Few Lines of Code","og_description":"Learn how to develop an iOS video call app with minimal code. Explore step-by-step instructions for quick and efficient implementation.","og_url":"https:\/\/www.enablex.io\/insights\/build-ios-video-call-app-using-few-lines-of-code\/","og_site_name":"Insights about video API, SMS API; WhatsApp for Business API","article_published_time":"2022-06-29T06:26:07+00:00","article_modified_time":"2023-11-28T04:56:19+00:00","og_image":[{"width":768,"height":270,"url":"https:\/\/www.enablex.io\/insights\/wp-content\/uploads\/2022\/06\/Create-An-Application-For-App-to-App-Calling-With-EnableX-Framework-Featured-Image.png","type":"image\/png"}],"author":"Jay Prakash","twitter_card":"summary_large_image","twitter_creator":"@enablexio","twitter_site":"@enablexio","twitter_misc":{"Written by":"Jay Prakash","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.enablex.io\/insights\/build-ios-video-call-app-using-few-lines-of-code\/#article","isPartOf":{"@id":"https:\/\/www.enablex.io\/insights\/build-ios-video-call-app-using-few-lines-of-code\/"},"author":{"name":"Jay Prakash","@id":"https:\/\/www.enablex.io\/insights\/#\/schema\/person\/177772d7666ac5cc9000b8bc75065332"},"headline":"How to Build an iOS Video Call App with Few Lines of Code","datePublished":"2022-06-29T06:26:07+00:00","dateModified":"2023-11-28T04:56:19+00:00","mainEntityOfPage":{"@id":"https:\/\/www.enablex.io\/insights\/build-ios-video-call-app-using-few-lines-of-code\/"},"wordCount":1830,"publisher":{"@id":"https:\/\/www.enablex.io\/insights\/#organization"},"keywords":["enablex callkit framework"],"articleSection":["Codes &amp; Tutorials","Communication APIs","TechTalks","Tips &amp; How-To","Video API"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.enablex.io\/insights\/build-ios-video-call-app-using-few-lines-of-code\/","url":"https:\/\/www.enablex.io\/insights\/build-ios-video-call-app-using-few-lines-of-code\/","name":"Build iOS Video Call App using Few Lines of Code","isPartOf":{"@id":"https:\/\/www.enablex.io\/insights\/#website"},"datePublished":"2022-06-29T06:26:07+00:00","dateModified":"2023-11-28T04:56:19+00:00","description":"Learn how to develop an iOS video call app with minimal code. Explore step-by-step instructions for quick and efficient implementation.","breadcrumb":{"@id":"https:\/\/www.enablex.io\/insights\/build-ios-video-call-app-using-few-lines-of-code\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.enablex.io\/insights\/build-ios-video-call-app-using-few-lines-of-code\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.enablex.io\/insights\/build-ios-video-call-app-using-few-lines-of-code\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.enablex.io\/insights\/"},{"@type":"ListItem","position":2,"name":"How to Build an iOS Video Call App with Few Lines of Code"}]},{"@type":"WebSite","@id":"https:\/\/www.enablex.io\/insights\/#website","url":"https:\/\/www.enablex.io\/insights\/","name":"Enablex","description":"","publisher":{"@id":"https:\/\/www.enablex.io\/insights\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.enablex.io\/insights\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.enablex.io\/insights\/#organization","name":"Enablex","url":"https:\/\/www.enablex.io\/insights\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.enablex.io\/insights\/#\/schema\/logo\/image\/","url":"https:\/\/www.enablex.io\/insights\/wp-content\/uploads\/2023\/05\/EnableX-Logo-01.png","contentUrl":"https:\/\/www.enablex.io\/insights\/wp-content\/uploads\/2023\/05\/EnableX-Logo-01.png","width":17382,"height":3567,"caption":"Enablex"},"image":{"@id":"https:\/\/www.enablex.io\/insights\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/twitter.com\/enablexio","https:\/\/www.linkedin.com\/company\/vcloudx"]},{"@type":"Person","@id":"https:\/\/www.enablex.io\/insights\/#\/schema\/person\/177772d7666ac5cc9000b8bc75065332","name":"Jay Prakash","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.enablex.io\/insights\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/3a0ec553fa03c5d264afe0183ffed535?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3a0ec553fa03c5d264afe0183ffed535?s=96&d=mm&r=g","caption":"Jay Prakash"},"description":"Jay has more than 14 years of proven experience in designing &amp; developing web &amp; mobile applications. He is a passionate coder and loves to design and build native &amp; hybrid mobile apps.","url":"https:\/\/www.enablex.io\/insights\/author\/jay-prakash\/"}]}},"_links":{"self":[{"href":"https:\/\/www.enablex.io\/insights\/wp-json\/wp\/v2\/posts\/1980"}],"collection":[{"href":"https:\/\/www.enablex.io\/insights\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.enablex.io\/insights\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.enablex.io\/insights\/wp-json\/wp\/v2\/users\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/www.enablex.io\/insights\/wp-json\/wp\/v2\/comments?post=1980"}],"version-history":[{"count":0,"href":"https:\/\/www.enablex.io\/insights\/wp-json\/wp\/v2\/posts\/1980\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.enablex.io\/insights\/wp-json\/wp\/v2\/media\/1983"}],"wp:attachment":[{"href":"https:\/\/www.enablex.io\/insights\/wp-json\/wp\/v2\/media?parent=1980"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.enablex.io\/insights\/wp-json\/wp\/v2\/categories?post=1980"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.enablex.io\/insights\/wp-json\/wp\/v2\/tags?post=1980"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}