<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Darkwa </title>
    <description>The latest articles on DEV Community by Darkwa  (@codewithdarkwa).</description>
    <link>https://dev.to/codewithdarkwa</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1028392%2Fdd2bedf4-9027-4089-873d-4dc846dd9db1.jpeg</url>
      <title>DEV Community: Darkwa </title>
      <link>https://dev.to/codewithdarkwa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/codewithdarkwa"/>
    <language>en</language>
    <item>
      <title>How To Make A Chat App With ZEGOCLOUD In Flutter</title>
      <dc:creator>Darkwa </dc:creator>
      <pubDate>Thu, 04 May 2023 13:14:03 +0000</pubDate>
      <link>https://dev.to/codewithdarkwa/how-to-make-a-chat-app-with-zegocloud-in-flutter-401c</link>
      <guid>https://dev.to/codewithdarkwa/how-to-make-a-chat-app-with-zegocloud-in-flutter-401c</guid>
      <description>&lt;p&gt;Are you interested in creating your own chat app? Do you want to use Flutter and ZEGOCLOUD to make it happen? Well, you've come to the right place! In this article, we will guide you through the process of creating a chat app using Flutter and ZEGOCLOUD.&lt;/p&gt;

&lt;p&gt;What is ZEGOCLOUD?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.zegocloud.com/"&gt;ZEGOCLOUD&lt;/a&gt; is a cloud platform that provides a range of services and tools to help developers build and deploy applications quickly and easily. One of the services that ZEGOCLOUD provides is the &lt;a href="https://www.zegocloud.com/blog/what-is-real-time-communication"&gt;real-time communication&lt;/a&gt;,which is perfect for building chat applications. &lt;/p&gt;

&lt;p&gt;I've shared a link to a video on my YouTube channel that exhibits a detailed procedure for building a chat app with zegocloud.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/R5GN3s7oURg"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Getting Started&lt;/p&gt;

&lt;p&gt;To get started, you will need to have Flutter installed on your machine. If you haven't done so already, head over to the &lt;a href="https://flutter.dev"&gt;flutter.dev&lt;/a&gt; and follow the installation instructions.Once you have flutter installed, you can create a new Flutter project using the following command:&lt;br&gt;
&lt;code&gt;flutter create my_chat_app&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Setting up ZEGOCLOUD&lt;/p&gt;

&lt;p&gt;To configure ZEGOCLOUD, begin by creating an account on the &lt;a href="https://console.zegocloud.com/"&gt;ZEGOCLOUD Admin Console&lt;/a&gt;  after setting up a new Flutter project. Following this, create a new project and specify the desired use case, such as in-app chat. You'll also need to obtain your project's appID and appSign, which are essential for authenticating your requests to the ZEGOCLOUD API.&lt;/p&gt;

&lt;p&gt;Implementing Real-time Communication&lt;/p&gt;

&lt;p&gt;Now that you have set up ZEGOCLOUD, it's time to implement real-time communication in your Flutter app. First you will need to add the ZEGOCLOUD Flutter SDK to your project.&lt;br&gt;
You can do this by adding the following dependency to your pubspec.yaml file:&lt;br&gt;
&lt;code&gt;dependencies:&lt;br&gt;
  zego_zimkit: ^latest_version&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
or run the following command &lt;br&gt;
&lt;code&gt;flutter pub add zego_zimkit&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The code below initializes the ZIMKit SDK with the required credentials to enable real-time communication features in your Flutter application. By following the steps outlined in the code comments and obtaining the necessary credentials from the ZEGOCLOUD Admin Console.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;void main() {
  ZIMKit().init(
    appID: YourSecret.appID, // your appid
    appSign: YourSecret.appSign, // your appSign
  );
  runApp(YourApp());
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ZIMKit().connectUser(id: id, name: name).then(_){
    Navigator.of(context).push(
        MaterialPageRoute(
            builder: (context) =&amp;gt; const ZIMKitDemoHomePage(),
        ),
    );
}

class ZIMKitDemoHomePage extends StatelessWidget {
  const ZIMKitDemoHomePage({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return WillPopScope(
      onWillPop: () async =&amp;gt; false,
      child: Scaffold(
        appBar: AppBar(
          title: const Text('Conversations'),
          actions: const [HomePagePopupMenuButton()],
        ),
        body: ZIMKitConversationListView(
          onPressed: (context, conversation, defaultAction) {
            Navigator.push(context, MaterialPageRoute(
              builder: (context) {
                return ZIMKitMessageListPage(
                  conversationID: conversation.id,
                  conversationType: conversation.type,
                );
              },
            ));
          },
        ),
      ),
    );
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The code above shows how to connect a user to ZIMKit and navigate to the home page. It uses the &lt;code&gt;ZIMKit().connectUser&lt;/code&gt; method to establish a connection to the user with the given &lt;code&gt;id&lt;/code&gt; and &lt;code&gt;name&lt;/code&gt;. Once the connection is established, the app navigates to the &lt;code&gt;ZIMKitDemoHomePage&lt;/code&gt; using &lt;code&gt;MaterialPageRoute&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;ZIMKitDemoHomePage&lt;/code&gt; is a &lt;code&gt;StatelessWidget&lt;/code&gt; that displays a list of conversations using &lt;code&gt;ZIMKitConversationListView&lt;/code&gt;. When a conversation is clicked, the app navigates to the &lt;code&gt;ZIMKitMessageListPage&lt;/code&gt; widget, which displays the messages for the selected conversation.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;WillPopScope&lt;/code&gt; widget prevents the user from navigating back from the home page. The &lt;code&gt;AppBar&lt;/code&gt; widget provides a title and an overflow menu with a &lt;code&gt;HomePagePopupMenuButton&lt;/code&gt;. The &lt;code&gt;ZIMKitConversationListView&lt;/code&gt; widget listens for user taps and passes the selected conversation to the &lt;code&gt;ZIMKitMessageListPage&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Overall, this code demonstrates how to use ZIMKit to connect to a user, display a list of conversations, and navigate to a conversation's messages.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure Our project in Android and also setup permissions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Go to your_project/android/app/build.gradle file, and modify the compileSdkVersion to 33&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qp8mlVb2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9b6crzltncc58gu2bb9b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qp8mlVb2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9b6crzltncc58gu2bb9b.png" alt="Gradle file" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;And in the same file, edit the minSdkVersion
minSdkVersion 21&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--2iqzZ2rJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yqnhqq5jneotq4rzqaa1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--2iqzZ2rJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yqnhqq5jneotq4rzqaa1.png" alt="Gradle file" width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add app permissions. Open the file your_project/app/src/main/AndroidManifest.xml, and add the following code:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /&amp;gt;
&amp;lt;uses-permission android:name="android.permission.RECORD_AUDIO" /&amp;gt;
&amp;lt;uses-permission android:name="android.permission.INTERNET" /&amp;gt;
&amp;lt;uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /&amp;gt;
&amp;lt;uses-permission android:name="android.permission.CAMERA" /&amp;gt;
&amp;lt;uses-permission android:name="android.permission.BLUETOOTH" /&amp;gt;
&amp;lt;uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /&amp;gt;
&amp;lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&amp;gt;
&amp;lt;uses-permission android:name="android.permission.READ_PHONE_STATE" /&amp;gt;
&amp;lt;uses-permission android:name="android.permission.WAKE_LOCK" /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DuUmAwgJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r36ormb25y4k9ru8nttt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DuUmAwgJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/r36ormb25y4k9ru8nttt.png" alt="AndroidManifest.xml file" width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prevent code obfuscation.
To prevent obfuscation of the SDK public class names, do the following:
a.In your project's your_project &amp;gt; android &amp;gt; app folder, create a proguard-rules.pro file with the following content as shown below:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;keep class **.zego.** { *; }&lt;/code&gt;&lt;br&gt;
b.Add the following config code to the release part of the your_project/android/app/build.gradle file.&lt;br&gt;
&lt;code&gt;proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'&lt;/code&gt;&lt;br&gt;
like this &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8YFc0_Ws--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q4v7atr7rhlbuacl7cw8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8YFc0_Ws--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q4v7atr7rhlbuacl7cw8.png" alt="Gradle" width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuring it for IOS
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;To add permissions, open your_project/ios/Runner/Info.plist, and add the following code to the dict part:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;key&amp;gt;NSCameraUsageDescription&amp;lt;/key&amp;gt;
&amp;lt;string&amp;gt;We require camera access to connect to a call&amp;lt;/string&amp;gt;
&amp;lt;key&amp;gt;NSMicrophoneUsageDescription&amp;lt;/key&amp;gt;
&amp;lt;string&amp;gt;We require microphone access to connect to a call&amp;lt;/string&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oAPR7awd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/va82zxarffxzxe40zjk2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oAPR7awd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/va82zxarffxzxe40zjk2.png" alt="Permission-ios" width="800" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's is the link to github &lt;a href="https://github.com/codewithdarkwa/chat-app"&gt;source code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Conclusion&lt;/p&gt;

&lt;p&gt;And there you have it, a complete guide to creating a chat app with ZEGOCLOUD in Flutter! We hope that you found this article helpful and that you are now ready to start building your own chat app. Remember to keep it simple,engage your users, and have fun!&lt;/p&gt;

</description>
      <category>zegocloud</category>
      <category>chatapp</category>
      <category>flutter</category>
      <category>programming</category>
    </item>
    <item>
      <title>How To Build The Video And Voice Call App With ZEGOCLOUD In React Native</title>
      <dc:creator>Darkwa </dc:creator>
      <pubDate>Sat, 18 Mar 2023 22:27:38 +0000</pubDate>
      <link>https://dev.to/codewithdarkwa/how-to-build-the-video-and-voice-call-app-with-zegocloud-in-react-native-2gj3</link>
      <guid>https://dev.to/codewithdarkwa/how-to-build-the-video-and-voice-call-app-with-zegocloud-in-react-native-2gj3</guid>
      <description>&lt;p&gt;Communication has become more essential than ever before in today's world, especially with the growing trend of remote work and social distancing. As a result, there is an increasing demand for reliable and efficient video and voice calling applications. This is where &lt;a href="https://www.zegocloud.com/" rel="noopener noreferrer"&gt;ZEGOCLOUD&lt;/a&gt; comes in - a leading real-time audio and video cloud service provider with more than two decades of experience in the industry. Their flexible and robust platform allows developers to build seamless &lt;a href="https://www.zegocloud.com/uikits" rel="noopener noreferrer"&gt;live audio and video &lt;/a&gt; experiences on mobile and web platforms.&lt;/p&gt;

&lt;p&gt;With ZEGOCLOUD's video/voice SDK and API, developers can easily create customized video and voice calling apps with minimal coding effort, enabling users to connect in real-time from anywhere in the world. This article will discuss how to build a video and voice call app with ZEGOCLOUD in React Native, offering a range of possibilities for your communication app development needs.&lt;/p&gt;

&lt;p&gt;I have provided a link to a video on my YouTube channel that demonstrates the step-by-step process for integrating it.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/etDm-Z4gx-w"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The prebuilt feature, &lt;a href="https://docs.zegocloud.com/article/14746" rel="noopener noreferrer"&gt;Call Kit&lt;/a&gt;, provided by ZEGOCLOUD comprises a comprehensive range of tools for constructing voice and video calls between individuals and groups within your app. With Call Kit, the development process is streamlined, as it includes all the essential business logic and user interface components, allowing you to customize the features based on your requirements.&lt;/p&gt;

&lt;p&gt;Integrate the SDK&lt;br&gt;
Add @zegocloud/zego-uikit-prebuilt-call-rn as dependencies&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn add @zegocloud/zego-uikit-prebuilt-call-rn@3.0.0-beta.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add these dependencies as well&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;@zegocloud/zego-uikit-rn&lt;/li&gt;
&lt;li&gt;react-delegate-component&lt;/li&gt;
&lt;li&gt;zego-express-engine-reactnative @3.2.0 &lt;/li&gt;
&lt;li&gt;react-native-sound&lt;/li&gt;
&lt;li&gt;@notifee/react-native
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yarn add @zegocloud/zego-uikit-rn react-delegate-component zego-express-engine-reactnative@3.2.0 react-native-sound @notifee/react-native
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;First, navigate to the &lt;a href="https://console.zegocloud.com/" rel="noopener noreferrer"&gt;ZEGOCLOUD Admin Console&lt;/a&gt; and get your project's appID and appSign.&lt;/li&gt;
&lt;li&gt;Next, specify the userID and username that will be used to connect to the Call Kit service.
Finally, create a callID to represent the call you want to make.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To navigate to the call page while passing in the appID, appSign, userID, and userName, include this code. Please note that both userID and callID must only include alphanumeric characters and underscores (_). Participants using the same callID will be able to communicate with one another.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// App.js
import React, { Component } from 'react';
import {ZegoUIKitPrebuiltCall, ONE_ON_ONE_VIDEO_CALL_CONFIG } from '@zegocloud/zego-uikit-prebuilt-call-rn'

export default function VoiceCallPage(props) {
    return (
        &amp;lt;View style={styles.container}&amp;gt;
            &amp;lt;ZegoUIKitPrebuiltCall
                appID={yourAppID}
                appSign={yourAppSign}
                userID={userID} // userID can be something like a phone number or the user id on your own user system. 
                userName={userName}
                callID={callID} // callID can be any unique string. 

                config={{
                    // You can also use ONE_ON_ONE_VOICE_CALL_CONFIG/GROUP_VIDEO_CALL_CONFIG/GROUP_VOICE_CALL_CONFIG to make more types of calls.
                    ...ONE_ON_ONE_VIDEO_CALL_CONFIG,
                    onOnlySelfInRoom: () =&amp;gt; { props.navigation.navigate('HomePage') },
                    onHangUp: () =&amp;gt; { props.navigation.navigate('HomePage') },
                }}
            /&amp;gt;
        &amp;lt;/View&amp;gt;
    );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Configure project in Android and also setup permissions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Go to your_project/android/app/src/main/AndroidManifest.xml file, and add the following permission &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fztt3sahxvxnvt14ufk3z.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fztt3sahxvxnvt14ufk3z.gif" alt="Permission"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /&amp;gt;
&amp;lt;uses-permission android:name="android.permission.RECORD_AUDIO" /&amp;gt;
&amp;lt;uses-permission android:name="android.permission.INTERNET" /&amp;gt;
&amp;lt;uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /&amp;gt;
&amp;lt;uses-permission android:name="android.permission.CAMERA" /&amp;gt;
&amp;lt;uses-permission android:name="android.permission.BLUETOOTH" /&amp;gt;
&amp;lt;uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /&amp;gt;
&amp;lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&amp;gt;
&amp;lt;uses-permission android:name="android.permission.READ_PHONE_STATE" /&amp;gt;
&amp;lt;uses-permission android:name="android.permission.WAKE_LOCK" /&amp;gt;
&amp;lt;uses-permission android:name="android.permission.VIBRATE"/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open the my_project/android/app/proguard-rules.pro file and add the following&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-keep class **.zego.**  { *; }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp4u5wugd8rbd5t8cdi6y.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp4u5wugd8rbd5t8cdi6y.jpg" alt="Proguard rules config"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Configure project in IOS and also setup permissions
&lt;/h2&gt;

&lt;p&gt;Open the my_project/ios/my_project/Info.plist file and add the following&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;key&amp;gt;NSCameraUsageDescription&amp;lt;/key&amp;gt;
&amp;lt;string&amp;gt;We need to use the camera&amp;lt;/string&amp;gt;
&amp;lt;key&amp;gt;NSMicrophoneUsageDescription&amp;lt;/key&amp;gt;
&amp;lt;string&amp;gt;We need to use the microphone&amp;lt;/string&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F03a27ygfds8zg7oqg7wd.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F03a27ygfds8zg7oqg7wd.gif" alt="IOS config"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Voila! You can now run and test your app.&lt;/p&gt;

&lt;p&gt;Here's is the link to github &lt;a href="https://github.com/codewithdarkwa/video-call-app-rn" rel="noopener noreferrer"&gt;source code&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To summarize, ZEGOCLOUD's video/voice SDK and API provide a convenient and effective way for developers to add real-time audio and video communication to their mobile and web applications. The platform's advanced features, such as interactive &lt;a href="https://docs.zegocloud.com/article/14317" rel="noopener noreferrer"&gt;live streaming&lt;/a&gt;, &lt;a href="https://docs.zegocloud.com/article/14936" rel="noopener noreferrer"&gt;video conferencing&lt;/a&gt;, and low-latency transmission, handle the intricacies of real-time communication, freeing developers to focus on building engaging user experiences.&lt;/p&gt;

&lt;p&gt;Additionally, ZEGOCLOUD's Call Kit feature simplifies the development process by offering pre-built tools and UI components that can be easily customized to meet specific app requirements. By following the steps outlined in this article, developers can seamlessly integrate ZEGOCLOUD's Call Kit feature into their projects and begin creating high-quality, uninterrupted video and voice call functionality within minutes.&lt;/p&gt;

&lt;p&gt;Overall, ZEGOCLOUD's platform delivers a groundbreaking and robust solution for developers seeking to incorporate real-time audio and video experiences into their applications. With its user-friendly interface and extensive toolkit, ZEGOCLOUD streamlines the process of building high-quality, interactive applications that offer users a seamless and delightful communication experience.&lt;/p&gt;

</description>
      <category>zegocloud</category>
      <category>reactnative</category>
      <category>voicecall</category>
      <category>videocall</category>
    </item>
    <item>
      <title>How to Build the Video and Voice Call app with ZEGOCLOUD in Flutter</title>
      <dc:creator>Darkwa </dc:creator>
      <pubDate>Tue, 21 Feb 2023 18:38:15 +0000</pubDate>
      <link>https://dev.to/codewithdarkwa/how-to-build-the-video-and-voice-call-app-with-zegocloud-in-flutter-46k9</link>
      <guid>https://dev.to/codewithdarkwa/how-to-build-the-video-and-voice-call-app-with-zegocloud-in-flutter-46k9</guid>
      <description>&lt;p&gt;Video and voice communication has become an essential part of our daily lives, both in personal and professional settings. Whether it's connecting with friends and family, hosting virtual events, or conducting remote meetings, the ability to communicate in real-time via audio and video is crucial.&lt;/p&gt;

&lt;p&gt;If you're a developer looking to incorporate these capabilities into your mobile or web application, you may find yourself facing a steep learning curve. Fortunately, &lt;a href="https://www.zegocloud.com/" rel="noopener noreferrer"&gt;ZEGOCLOUD&lt;/a&gt; offers a solution that simplifies the process of integrating live audio and video experiences into your app.&lt;/p&gt;

&lt;p&gt;In this article, we'll explore how to build a video and voice call app using ZEGOCLOUD's SDK and API in Flutter.&lt;/p&gt;

&lt;p&gt;By the end of this tutorial, you'll have the knowledge and tools you need to &lt;a href="https://www.zegocloud.com/uikits" rel="noopener noreferrer"&gt;create a fully functional video and voice call app&lt;/a&gt;, complete with real-time communication, interactive live streaming, and video conferencing capabilities. So, let's get started!&lt;/p&gt;

&lt;p&gt;ZEGOCLOUD offers a prebuilt feature called &lt;a href="https://docs.zegocloud.com/article/14746" rel="noopener noreferrer"&gt;Call Kit&lt;/a&gt;, which includes a comprehensive set of tools for building one-on-one and group voice/video calls in your app. Call Kit is designed to simplify the development process by providing all the necessary business logic and user interface components, so you can add or remove features according to your specific needs.&lt;/p&gt;

&lt;p&gt;With Call Kit, you can quickly integrate audio and video communication features into your app with just a few lines of code. The prebuilt UI components make it easy to customize the appearance and behavior of the call interface, giving you full control over the user experience.&lt;/p&gt;

&lt;p&gt;Whether you're building a &lt;a href="https://docs.zegocloud.com/article/14902" rel="noopener noreferrer"&gt;video conferencing&lt;/a&gt; app or a social networking platform, Call Kit offers a powerful and flexible solution for incorporating audio and video communication capabilities into your app.&lt;/p&gt;

&lt;p&gt;Here's a video link to my youtube channel showing you the steps by steps to integrate it &lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/dWyNLdoc8NM?start=483"&gt;
&lt;/iframe&gt;
&lt;br&gt;
 You can also follow the article as well&lt;/p&gt;

&lt;p&gt;1.Integrate the SDK&lt;br&gt;
Add ZegoUIKitPrebuiltCall as dependencies&lt;br&gt;
&lt;code&gt;flutter pub add zego_uikit_prebuilt_call&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;2.Import the SDK in you code &lt;br&gt;
&lt;code&gt;package:zego_uikit_prebuilt_call/zego_uikit_prebuilt_call.dart&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;3.To use the ZegoUIKitPrebuiltCall feature in your project, follow these steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First, navigate to the &lt;a href="https://console.zegocloud.com/" rel="noopener noreferrer"&gt;ZEGOCLOUD Admin Console&lt;/a&gt; and retrieve your project's appID and appSign.&lt;/li&gt;
&lt;li&gt;Next, specify the userID and username that will be used to connect to the Call Kit service.
Finally, create a callID to represent the call you want to make.
By completing these steps, you will be able to easily integrate the ZegoUIKitPrebuiltCall feature into your project, allowing you to quickly and efficiently build video and voice call functionality into your app.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Add this code to navigate to the call page passing in the appID, appSign, userID and userName &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;userID and callID can only contain numbers, letters, and underlines (_).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Users that join the call with the same callID can talk to each other.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class CallPage extends StatelessWidget {
  const CallPage({Key? key, required this.callID}) : super(key: key);
  final String callID;

  @override
  Widget build(BuildContext context) {
    return ZegoUIKitPrebuiltCall(
      appID: yourAppID, // Fill in the appID that you get from ZEGOCLOUD Admin Console.
      appSign: yourAppSign, // Fill in the appSign that you get from ZEGOCLOUD Admin Console.
      userID: 'user_id',
      userName: 'user_name',
      callID: callID,
      // You can also use groupVideo/groupVoice/oneOnOneVoice to make more types of calls.
      config: ZegoUIKitPrebuiltCallConfig.oneOnOneVideoCall() 
        ..onOnlySelfInRoom = () =&amp;gt; Navigator.of(context).pop(),
    );
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Configure Our project in Android and also setup permissions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Go to your_project/android/app/build.gradle file, and modify the compileSdkVersion to 33&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9b6crzltncc58gu2bb9b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9b6crzltncc58gu2bb9b.png" alt="Gradle file"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;And in the same file, edit the minSdkVersion
minSdkVersion 21&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyqnhqq5jneotq4rzqaa1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyqnhqq5jneotq4rzqaa1.png" alt="Gradle file"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add app permissions. Open the file your_project/app/src/main/AndroidManifest.xml, and add the following code:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /&amp;gt;
&amp;lt;uses-permission android:name="android.permission.RECORD_AUDIO" /&amp;gt;
&amp;lt;uses-permission android:name="android.permission.INTERNET" /&amp;gt;
&amp;lt;uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /&amp;gt;
&amp;lt;uses-permission android:name="android.permission.CAMERA" /&amp;gt;
&amp;lt;uses-permission android:name="android.permission.BLUETOOTH" /&amp;gt;
&amp;lt;uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /&amp;gt;
&amp;lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&amp;gt;
&amp;lt;uses-permission android:name="android.permission.READ_PHONE_STATE" /&amp;gt;
&amp;lt;uses-permission android:name="android.permission.WAKE_LOCK" /&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr36ormb25y4k9ru8nttt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr36ormb25y4k9ru8nttt.png" alt="AndroidManifest.xml file"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prevent code obfuscation.
To prevent obfuscation of the SDK public class names, do the following:
a.In your project's your_project &amp;gt; android &amp;gt; app folder, create a proguard-rules.pro file with the following content as shown below:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;keep class **.zego.** { *; }&lt;/code&gt;&lt;br&gt;
b.Add the following config code to the release part of the your_project/android/app/build.gradle file.&lt;br&gt;
&lt;code&gt;proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'&lt;/code&gt;&lt;br&gt;
like this &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq4v7atr7rhlbuacl7cw8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq4v7atr7rhlbuacl7cw8.png" alt="Gradle"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuring it for IOS
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;To add permissions, open your_project/ios/Runner/Info.plist, and add the following code to the dict part:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;key&amp;gt;NSCameraUsageDescription&amp;lt;/key&amp;gt;
&amp;lt;string&amp;gt;We require camera access to connect to a call&amp;lt;/string&amp;gt;
&amp;lt;key&amp;gt;NSMicrophoneUsageDescription&amp;lt;/key&amp;gt;
&amp;lt;string&amp;gt;We require microphone access to connect to a call&amp;lt;/string&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fva82zxarffxzxe40zjk2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fva82zxarffxzxe40zjk2.png" alt="Permission-ios"&gt;&lt;/a&gt;&lt;br&gt;
So that's basically it you can run and test your app &lt;br&gt;
In conclusion, ZEGOCLOUD's video/voice SDK and API provide developers with an easy and efficient way to incorporate &lt;a href="https://www.zegocloud.com/blog/what-is-real-time-communication" rel="noopener noreferrer"&gt;real-time audio and video communication&lt;/a&gt; into their mobile and web applications. With features such as interactive live streaming, video conferencing, and low-latency transmission, ZEGOCLOUD's platform handles the complexities of real-time communication, enabling developers to focus on building engaging user experiences.&lt;/p&gt;

&lt;p&gt;Moreover, ZEGOCLOUD's Call Kit feature simplifies the development process by providing pre-built tools and UI components that can be easily customized to meet specific app requirements. By following the steps outlined in this article, developers can quickly integrate ZEGOCLOUD's Call Kit feature into their projects and start building high-quality, seamless video and voice call functionality in just minutes.&lt;/p&gt;

&lt;p&gt;Overall, ZEGOCLOUD's platform offers an innovative and powerful solution for developers looking to create engaging, real-time audio and video experiences in their applications. With its user-friendly interface and comprehensive set of tools, ZEGOCLOUD makes it easy to build high-quality, interactive applications that offer users a seamless and enjoyable communication experience.&lt;/p&gt;

</description>
      <category>zegocloud</category>
      <category>flutter</category>
      <category>callapp</category>
      <category>voicecall</category>
    </item>
  </channel>
</rss>
