<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>React Native Archives - asap developers</title>
	<atom:link href="https://www.asapdevelopers.com/category/react-native/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.asapdevelopers.com/category/react-native/</link>
	<description>San Francisco Mobile App Developers</description>
	<lastBuildDate>Thu, 13 Nov 2025 16:14:27 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.1.1</generator>

<image>
	<url>https://www.asapdevelopers.com/wp-content/uploads/2017/04/favicon-asap-1.png</url>
	<title>React Native Archives - asap developers</title>
	<link>https://www.asapdevelopers.com/category/react-native/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Best React Native apps in 2022</title>
		<link>https://www.asapdevelopers.com/best-react-native-apps-in-2022/</link>
		
		<dc:creator><![CDATA[Pablo Giampedraglia]]></dc:creator>
		<pubDate>Mon, 03 Jan 2022 20:31:58 +0000</pubDate>
				<category><![CDATA[React Native]]></category>
		<guid isPermaLink="false">https://www.asapdevelopers.com/?p=15112</guid>

					<description><![CDATA[<p>  React Native is a JavaScript development framework that uses React to create user interfaces for iOS and Android devices. This allows developers to reuse code across both web and...</p>
<p>The post <a rel="nofollow" href="https://www.asapdevelopers.com/best-react-native-apps-in-2022/">Best React Native apps in 2022</a> appeared first on <a rel="nofollow" href="https://www.asapdevelopers.com">asap developers</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p> </p>


<p><a href="https://www.asapdevelopers.com/react-native-san-francisco/"><strong>React Native</strong></a> is a JavaScript development framework that uses React to create user interfaces for iOS and Android devices. This allows developers to reuse code across both web and mobile platforms. React Native was developed by Facebook and released in 2015 and has done nothing but grow since then. Some of the reasons why we love React Native are that it’s open-source, cross-platform and easy to learn. It also leads to shorter development times, provides a native interface and makes it easy to implement changes. But don’t take our word for it! In this article, we’ll review some of the Best React Native apps available in 2022 to show you the wonders that can be created or revamped using this framework.</p>



<h2>Instagram</h2>



<p><img decoding="async" loading="lazy" alt="best react native apps - instagram" class="wp-image-15118 aligncenter" height="204" src="https://www.asapdevelopers.com/wp-content/uploads/2022/01/instagram-300x297.png" width="206" srcset="https://www.asapdevelopers.com/wp-content/uploads/2022/01/instagram-300x297.png 300w, https://www.asapdevelopers.com/wp-content/uploads/2022/01/instagram-150x150.png 150w, https://www.asapdevelopers.com/wp-content/uploads/2022/01/instagram-100x100.png 100w, https://www.asapdevelopers.com/wp-content/uploads/2022/01/instagram-140x140.png 140w, https://www.asapdevelopers.com/wp-content/uploads/2022/01/instagram.png 325w" sizes="(max-width: 206px) 100vw, 206px" /></p>
<p>With over 1 billion monthly users, Instagram is one of the most popular social media platforms out there. Although not originally developed with React Native, the team behind Instagram decided to integrate the React Native platform in 2016. This move definitely paid off as this meant that features could be shipped faster in both iOS and Android and it significantly reduced development costs.</p>


<h2>UberEats</h2>



<p><img decoding="async" loading="lazy" alt="best react native apps - uber eats" class="wp-image-15123 aligncenter" height="226" src="https://www.asapdevelopers.com/wp-content/uploads/2022/01/uber-eats-300x300.png" width="226" srcset="https://www.asapdevelopers.com/wp-content/uploads/2022/01/uber-eats-300x300.png 300w, https://www.asapdevelopers.com/wp-content/uploads/2022/01/uber-eats-150x150.png 150w, https://www.asapdevelopers.com/wp-content/uploads/2022/01/uber-eats-100x100.png 100w, https://www.asapdevelopers.com/wp-content/uploads/2022/01/uber-eats-140x140.png 140w, https://www.asapdevelopers.com/wp-content/uploads/2022/01/uber-eats-500x500.png 500w, https://www.asapdevelopers.com/wp-content/uploads/2022/01/uber-eats-350x350.png 350w, https://www.asapdevelopers.com/wp-content/uploads/2022/01/uber-eats.png 541w" sizes="(max-width: 226px) 100vw, 226px" /></p>
<p>The original version of the UberEats Restaurant Dashboard was built for the web using the <a href="https://www.asapdevelopers.com/react-vs-react-native/">React library</a>. However, Uber also wanted to develop <a href="https://apps.apple.com/us/app/uber-eats-food-delivery/id1058959277">iOS</a> and <a href="https://play.google.com/store/apps/details?id=com.ubercab.eats">Android</a> versions. This is where the company turned to the React Native framework as it allowed it to go mobile using the same language it was already using for the web (i.e., JavaScript within a very similar framework). The outcome was excellent and has made it possible for Uber to stay on the list of top food delivery platforms in the US.</p>


<p>If you want to see how React Native was implemented for UberEats, you can take a peek at <a href="https://eng.uber.com/ubereats-react-native/">this page</a>.</p>


<h2>Skype</h2>



<p><img decoding="async" loading="lazy" alt="" class="wp-image-15121 aligncenter" height="225" src="https://www.asapdevelopers.com/wp-content/uploads/2022/01/skype-288x300.png" width="216" srcset="https://www.asapdevelopers.com/wp-content/uploads/2022/01/skype-288x300.png 288w, https://www.asapdevelopers.com/wp-content/uploads/2022/01/skype.png 352w" sizes="(max-width: 216px) 100vw, 216px" /></p>
<p>In 2017, Skype decided to develop a new app based on React Native, changing a lot of the design and functionalities of the original app. Most of the beloved Skype features were transferred to the new version, with various new features added (such as a Giphy integration).</p>


<h2>Walmart</h2>



<p><img decoding="async" loading="lazy" alt="" class="wp-image-15124 aligncenter" height="223" src="https://www.asapdevelopers.com/wp-content/uploads/2022/01/walmart-278x300.png" width="207" srcset="https://www.asapdevelopers.com/wp-content/uploads/2022/01/walmart-278x300.png 278w, https://www.asapdevelopers.com/wp-content/uploads/2022/01/walmart.png 325w" sizes="(max-width: 207px) 100vw, 207px" /></p>
<p>Just like Uber, Walmart had already chosen React for the web. It was only natural, then, for the company to use React Native for its mobile app projects. Choosing React Native came with many benefits for Walmart such as doubling the development speed, a significantly improved unit code testability, and a shared business logic with the existing React/Redux web app. The <a href="https://www.walmart.com/cp/walmart-app/1087865">resulting mobile app</a> includes a wide variety of features, including order tracking, shopping lists, an item finder and a scanner. All of this made the Walmart Shopping &amp; Grocery app one of the best React Native apps in 2022.</p>


<p>If you want to read Walmart’s React Native journey in detail, you can take a look at <a href="https://medium.com/walmartglobaltech/a-new-beginning-for-react-native-at-walmartlabs-online-grocery-c30b27db57d3">this article</a>.</p>


<h2>Tesla</h2>



<p><img decoding="async" loading="lazy" alt="" class="wp-image-15122 aligncenter" height="175" src="https://www.asapdevelopers.com/wp-content/uploads/2022/01/tesla.png" width="183"/></p>
<p>Founded in 2003, Tesla is currently one of the largest electric car producers. When the time came to develop a mobile app for its users, Tesla turned to React Native as the platform made it possible for both <a href="https://apps.apple.com/us/app/tesla/id582007913">iOS</a> and <a href="https://play.google.com/store/apps/details?id=com.teslamotors.tesla&amp;hl=en&amp;gl=US">Android</a> apps to have the same features. Tesla car owners can now lock and unlock their car, track their car’s location and heat or cool their car, all from their mobile app.</p>


<h2>Facebook Ads Manager</h2>



<p><img decoding="async" loading="lazy" alt="best react native apps - facebook ads manager" class="wp-image-15116 aligncenter" height="220" src="https://www.asapdevelopers.com/wp-content/uploads/2022/01/facebook-ads-manager-300x292.png" width="226" srcset="https://www.asapdevelopers.com/wp-content/uploads/2022/01/facebook-ads-manager-300x292.png 300w, https://www.asapdevelopers.com/wp-content/uploads/2022/01/facebook-ads-manager.png 438w" sizes="(max-width: 226px) 100vw, 226px" /></p>
<p>As Facebook is the company behind React Native, it makes sense that they use this platform for many of their projects. One of the best React Native apps in 2022 was definitely Facebook Ads Manager. This was one of the first 100% React Native apps created by Facebook and it includes a clean interface, simple navigation and an intuitive user experience.</p>


<h2>Shine</h2>



<p><img decoding="async" loading="lazy" alt="" class="wp-image-15120 aligncenter" height="157" src="https://www.asapdevelopers.com/wp-content/uploads/2022/01/shine.png" width="198"/></p>
<p>Shine is a mindfulness app that reflects the voice of minorities while empowering diversity and women in business. Launched in 2017, Shine received a <a href="https://winners.webbyawards.com/2019/apps-and-software/general-mobile-ott-apps/lifestyle/89463/shine">Webby Award in 2019</a>, a <a href="https://play.google.com/store/apps/editorial_collection/promotion_topic_googleplayawards2019?hl=en&amp;gl=US">Google Play Award in 2019</a>, and was among the <a href="https://www.apple.com/newsroom/2020/12/apple-presents-app-store-best-of-2020-winners/">App Store Best of 2020</a>. This all shows how popular this app is, particularly in the United States and Canada.</p>


<p>The creators of Shine wanted to develop a cross-platform mobile app with native components that also allowed for the continuous development of new features. This meant that React Native was the perfect platform for the job.</p>


<h2>Gyroscope</h2>



<p><img decoding="async" loading="lazy" alt="" class="wp-image-15117 aligncenter" height="228" src="https://www.asapdevelopers.com/wp-content/uploads/2022/01/gyroscope-297x300.png" width="226" srcset="https://www.asapdevelopers.com/wp-content/uploads/2022/01/gyroscope-297x300.png 297w, https://www.asapdevelopers.com/wp-content/uploads/2022/01/gyroscope-150x150.png 150w, https://www.asapdevelopers.com/wp-content/uploads/2022/01/gyroscope-100x100.png 100w, https://www.asapdevelopers.com/wp-content/uploads/2022/01/gyroscope-140x140.png 140w, https://www.asapdevelopers.com/wp-content/uploads/2022/01/gyroscope.png 330w" sizes="(max-width: 226px) 100vw, 226px" /></p>
<p>Gyroscope <a href="https://www.asapdevelopers.com/boost-your-vitality-naturally-exploring-libido-supplements/" rel="noopener noreferrer">is a health app</a> that tracks your online productivity and monitors your sleep patterns and eating habits, among many other features. React Native gave the Gyroscope team the possibility to develop their app without outsourcing the work. It also made it easy to present a wide array of statistics and personal health data in a visually-appealing way and to quickly implement new ideas. Moreover, React Native made it possible for Gyroscope to integrate with Apple watches and Fitbit.</p>


<p>If you want to see how the Gyroscope app was built using React Native, check out <a href="https://blog.gyrosco.pe/building-the-app-1dac1a97d253">this article.</a></p>


<h2>Pinterest</h2>



<p><img decoding="async" loading="lazy" alt="" class="wp-image-15119 aligncenter" height="208" src="https://www.asapdevelopers.com/wp-content/uploads/2022/01/pinterest.png" width="217"/></p>
<p>Around 2017, Pinterest decided to integrate React Native into its mobile app development process as it would be time-effective while not sacrificing the quality of the user experience. The company had already used React for its web app so React Native for mobile was the natural next step.</p>


<p>If you’d like to know more about Pinterest’s React Native journey, you can take a look at <a href="https://madewithreactnative.com/pinterest/">this interview</a>.</p>


<h2>Discord</h2>



<p><img decoding="async" loading="lazy" alt="" class="wp-image-15115 aligncenter" height="237" src="https://www.asapdevelopers.com/wp-content/uploads/2022/01/discord-300x298.png" width="239" srcset="https://www.asapdevelopers.com/wp-content/uploads/2022/01/discord-300x298.png 300w, https://www.asapdevelopers.com/wp-content/uploads/2022/01/discord-150x150.png 150w, https://www.asapdevelopers.com/wp-content/uploads/2022/01/discord-100x100.png 100w, https://www.asapdevelopers.com/wp-content/uploads/2022/01/discord-140x140.png 140w, https://www.asapdevelopers.com/wp-content/uploads/2022/01/discord.png 460w" sizes="(max-width: 239px) 100vw, 239px" /></p>
<p>Discord is a voice and chat app created specifically for gamers. The company behind it decided to use React Native as it allowed it to build an <a href="https://apps.apple.com/us/app/discord-talk-chat-hangout/id985746746">iOS app</a> quite quickly from its existing React web app. It took just two weeks! Today, the app is also available for <a href="https://play.google.com/store/apps/details?id=com.discord&amp;hl=en&amp;gl=US">Android</a>, has millions of monthly active users, and is 99.9% crash-free.</p>


<p>You can check out some of the reasons why Discord still chooses React Native <a href="https://discord.com/blog/why-discord-is-sticking-with-react-native">here</a>.</p>


<h2>Final thoughts on the best React Native apps</h2>


<p>React Native has proven to be an excellent cross-platform tool. It saves companies time and money while delivering native-like results. Thousands of apps are currently using React Native, including both startups and Fortune 500 companies.</p>


<p>If you’d like to explore why you should use React Native for your next mobile app project, you should take a look at <a href="https://www.asapdevelopers.com/6-reasons-why-you-should-start-using-react-native/">this article</a>.</p>


<p>We believe the list above proves the potential of our favorite <a href="https://www.asapdevelopers.com/best-cross-platform-frameworks/">cross-platform framework</a> and we hope you agree. That said, would you add any apps to our list of best React Native apps in 2022?</p>

		<div id="fws_693975d19df49"  data-column-margin="default" data-midnight="dark"  data-bg-mobile-hidden="" class="wpb_row vc_row-fluid vc_row top-level standard_section "  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-overlay="false"><div class="inner-wrap"><div class="row-bg"  style=""></div></div><div class="row-bg-overlay" ></div></div><div class="col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding"  data-t-w-inherits="default" data-border-radius="none" data-shadow="none" data-border-animation="" data-border-animation-delay="" data-border-width="none" data-border-style="solid" data-border-color="" data-bg-cover="" data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-hover-bg="" data-hover-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" ><div class="column-bg-overlay-wrap" data-bg-animation="none"><div class="column-bg-overlay"></div></div>
			<div class="wpb_wrapper">
				<a class="nectar-button large regular accent-color has-icon  wpb_animate_when_almost_visible wpb_bounce bounce regular-button"  style="margin-top: 40px; color: #ffffff; "  href="https://www.asapdevelopers.com/react-native-san-francisco/" data-color-override="false" data-hover-color-override="false" data-hover-text-color-override="#fff"><span>React Native Development Company</span><i style="color: #ffffff;"  class="icon-button-arrow"></i></a>
			</div> 
		</div>
	</div> 
</div></div>
<p>The post <a rel="nofollow" href="https://www.asapdevelopers.com/best-react-native-apps-in-2022/">Best React Native apps in 2022</a> appeared first on <a rel="nofollow" href="https://www.asapdevelopers.com">asap developers</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>React Native development resources</title>
		<link>https://www.asapdevelopers.com/react-native-development-resources/</link>
		
		<dc:creator><![CDATA[Pablo Giampedraglia]]></dc:creator>
		<pubDate>Mon, 13 Dec 2021 20:44:01 +0000</pubDate>
				<category><![CDATA[React Native]]></category>
		<guid isPermaLink="false">https://www.asapdevelopers.com/?p=15081</guid>

					<description><![CDATA[<p>&#160; React Native is a JavaScript development framework that uses React to create user interfaces for iOS and Android devices. It was developed by Facebook and released in 2015. It...</p>
<p>The post <a rel="nofollow" href="https://www.asapdevelopers.com/react-native-development-resources/">React Native development resources</a> appeared first on <a rel="nofollow" href="https://www.asapdevelopers.com">asap developers</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>&nbsp;</p>



<p>React Native is a JavaScript development framework that uses React to create user interfaces for iOS and Android devices. It was developed by Facebook and released in 2015. It helps developers reuse code across web and mobile platforms. With React Native resources, your JavaScript codebase is compiled to a mobile app indistinguishable from a native iOS app built using Objective-C or a native Android app built using Java.</p>



<p>The benefits of using React Native include that it’s open-source, cross-platform, and easy to learn, it leads to shorter development times, it provides a native interface and it makes it easy to implement changes.</p>



<p>In this article, we’ll cover a variety of free and paid resources that every React Native developer should be aware of. We’ll go over React Native tutorials and courses, list some of the top blogs, podcasts and YouTube channels, detail the most sought-after development tools and take a look inside the React Native community. </p>



<h2>React Native tutorials and courses</h2>





<p><img decoding="async" loading="lazy" class=" wp-image-15084 aligncenter" src="https://www.asapdevelopers.com/wp-content/uploads/2021/12/image1-1-300x201.png" alt="react native resources image" width="407" height="273" srcset="https://www.asapdevelopers.com/wp-content/uploads/2021/12/image1-1-300x201.png 300w, https://www.asapdevelopers.com/wp-content/uploads/2021/12/image1-1-600x403.png 600w, https://www.asapdevelopers.com/wp-content/uploads/2021/12/image1-1-400x269.png 400w, https://www.asapdevelopers.com/wp-content/uploads/2021/12/image1-1.png 628w" sizes="(max-width: 407px) 100vw, 407px" /></p>
<p>Whether you are just thinking about learning how to use the React Native framework or are a seasoned React Native programmer, the tutorials and courses below should be of use during your React Native journey. We’ll start with free options and also include some paid ones.</p>



<ol>
<li>
<h3><a href="https://reactnative.dev/docs/getting-started">Official React Native documentation</a></h3>
</li>
</ol>



<p>If you are a “do-it-yourself” kind of person, the official React Native documentation is the best place to start. The documentation is quite comprehensive and includes plenty of examples to help you along.</p>



<p>Do note that you will need to understand the fundamentals of JavaScript to make the best of the documentation. If you’re not familiar with this programming language, you can take a look at <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript">Mozilla’s tutorial</a> or, if you just need to brush up, you can take a look at <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/A_re-introduction_to_JavaScript">Mozilla’s reintroduction to JavaScript</a>.</p>



<ol start="2">
<li>
<h3><a href="https://medium.com/react-native-training">React Native Training</a> in Medium</h3>
</li>
</ol>



<p>React Native Training includes a series of stories and tutorials to learn React Native. There is also a <a href="https://www.youtube.com/c/reactnativetraining">React Native Training</a> YouTube channel.</p>



<p>These React Native tutorials cover more specific areas (such as making a linear gradient view or processing image loading) and are a great complement to the official documentation or any other straightforward tutorial you might choose.</p>



<ol start="3">
<li>
<h3><a href="https://www.reactnative.express/">React Native Express</a></h3>
</li>
</ol>



<p>This guide is meant to be used in addition to the official React Native documentation. React Native Express encompasses everything you need to know to start working with this framework, including topics such as JavaScript fundamentals and key React Native libraries that are not covered in the official documentation.</p>



<p>The author of this React Native tutorial also wrote a book called Fullstack React Native that you can get <a href="https://www.newline.co/fullstack-react/react-native/?affiliate_id=567063667">here</a>.</p>



<ol start="4">
<li>
<h3><a href="https://www.codecademy.com/">Codecademy</a></h3>
</li>
</ol>



<p>Codecademy offers free courses for a variety of programming languages. They have a <a href="https://www.codecademy.com/learn/learn-react-native?utm_source=pepperjam&amp;utm_medium=affiliate&amp;utm_term=214453&amp;clickId=3795931290&amp;pj_creativeid=8-12462&amp;pj_publisherid=214453">free React Native course</a> that covers core components, style components and navigation. You also have the option to access quizzes and portfolio projects with the pro version. This also gives you access to several other React Native courses.</p>



<p>You can make use of their free trial if you want to see if it’s worth it, after which the pro version costs <a href="https://www.codecademy.com/student-center">$149.99/year for students</a>.</p>



<ol start="5">
<li>
<h3><a href="https://www.youtube.com/watch?v=0-S5a0eXPoc">Programming with Mosh</a></h3>
</li>
</ol>



<p>This is a video crash course taught by Mosh Hamedany, a software engineer with 20 years of experience. For this React Native tutorial, you should have some existing knowledge of both React and JavaScript.</p>



<p>Mosh also offers paid courses like <a href="https://codewithmosh.com/p/the-ultimate-react-native-course-part1">The Ultimate React Native Series: Fundamentals</a> and <a href="https://codewithmosh.com/p/the-ultimate-react-native-course-part2">The Ultimate React Native Series: Advanced Concepts</a>. The courses start from $19 or you can also buy an all-access membership for $29/month.</p>



<ol start="6">
<li>
<h3><a href="https://www.udemy.com/courses/search/?lang=en&amp;q=react+native&amp;sort=relevance&amp;src=ukw">Udemy courses</a></h3>
</li>
</ol>



<p>Udemy offers a variety of courses for React Native developers for just $14.99. Some of our recommendations include <a href="https://www.udemy.com/course/react-native-the-practical-guide/?LSNPUBID=jU79Zysihs4&amp;ranEAID=jU79Zysihs4&amp;ranMID=39197&amp;ranSiteID=jU79Zysihs4-iH2fiE1uJ3zpj1H.sXKIjQ&amp;utm_medium=udemyads&amp;utm_source=aff-campaign">React Native &#8211; The Practical Guide [2022 Edition]</a>, <a href="https://www.udemy.com/course/the-complete-react-native-and-redux-course/?ranMID=39197&amp;ranEAID=JVFxdTr9V80&amp;ranSiteID=JVFxdTr9V80-OE2nN63moCrfdHzTcHzcdg&amp;LSNPUBID=JVFxdTr9V80&amp;utm_source=aff-campaign&amp;utm_medium=udemyads">The Complete React Native + Hooks Course</a> and <a href="http://udemy.com/course/react-native-advanced/?LSNPUBID=JVFxdTr9V80&amp;ranEAID=JVFxdTr9V80&amp;ranMID=39197&amp;ranSiteID=JVFxdTr9V80-Rcz7RM0pM2vpRSdf6CBpOA&amp;utm_medium=udemyads&amp;utm_source=aff-campaign">React Native: Advanced Concepts</a>.</p>



<h2>React Native blogs, podcasts and YouTube channels</h2>





<p><img decoding="async" loading="lazy" class=" wp-image-15085 aligncenter" src="https://www.asapdevelopers.com/wp-content/uploads/2021/12/image2-1-300x201.png" alt="react native developer" width="382" height="256" srcset="https://www.asapdevelopers.com/wp-content/uploads/2021/12/image2-1-300x201.png 300w, https://www.asapdevelopers.com/wp-content/uploads/2021/12/image2-1-600x403.png 600w, https://www.asapdevelopers.com/wp-content/uploads/2021/12/image2-1-400x269.png 400w, https://www.asapdevelopers.com/wp-content/uploads/2021/12/image2-1.png 678w" sizes="(max-width: 382px) 100vw, 382px" /></p>
<p>Blogs, podcasts and YouTube channels can be extremely helpful whether you are looking for React Native resources for beginners or are an expert who wants to keep updated on the latest news about React Native and get some solid tips.</p>



<p>There are countless podcasts, blogs and YouTube channels devoted to React Native and React in general so we’ve made a selection that covers various aspects of the programming framework. We won’t overwhelm you with extensive details, so here is a list of some of the top React Native blogs, podcasts and YouTube channels out there.</p>



<h3>Blogs</h3>



<ul>
<li><a href="https://facebook.github.io/react-native/blog/">React Native’s GitHub blog</a></li>
<li><a href="https://reactdom.com/react-native">ReactDom</a></li>
<li><a href="https://medium.com/@grabbou">Mike Grabowski’s Medium page</a></li>
<li><a href="https://blog.reactnativecoach.com/?gi=bff6b3bf0e43">React Native Coach</a></li>
<li><a href="https://alligator.io/react/">alligator.io</a></li>
</ul>



<h3>Podcasts</h3>



<ul>
<li><a href="https://reactpodcast.com/">React Podcast</a></li>
<li><a href="https://devchat.tv/react-native-radio/">React Native Radio</a></li>
<li><a href="https://softwareengineeringdaily.com/2015/09/18/flux-redux-and-react-hot-loader-with-dan-abramov/">Software Engineering Daily</a></li>
<li><a href="https://devchat.tv/podcasts/react-round-up/">React Round Up</a></li>
<li><a href="https://devmode.fm/">devMode.fm</a></li>
</ul>



<h3>YouTube channels</h3>



<ul>
<li><a href="https://www.youtube.com/c/BenAwad97/search?query=react%20native">Ben Awad</a></li>
<li><a href="https://www.youtube.com/channel/UC8-6qIUsHCybEn1f9OxSE4Q/featured">Michael Thomas</a></li>
<li><a href="https://www.youtube.com/watch?v=frvXANSaSec">freeCodeCamp.org</a></li>
</ul>



<h2>React Native development tools</h2>





<p><img decoding="async" loading="lazy" class=" wp-image-15086 aligncenter" src="https://www.asapdevelopers.com/wp-content/uploads/2021/12/image3-1-300x220.png" alt="react native resources team" width="400" height="305" /></p>
<p>There is no shortage of React Native development tools. For this article, we have decided to make a list of the best free React Native resources for developers, including integrated development environments (IDEs), inspecting and debugging tools, libraries and many other tools that help you with specific aspects or features of mobile app development.</p>



<h3>IDEs</h3>



<ul>
<li><a href="https://code.visualstudio.com/">Visual Studio Code</a></li>
</ul>



<p>This free and open-source IDE created by Microsoft is very popular (and not only for React Native). Visual Studio Code is lightweight and includes many powerful features. You can add themes, debuggers and connect to other services. It also includes troubleshooting tools and is fully customizable.</p>



<p>Specifically for React Native, Visual Studio Code works as an excellent code editor that includes the <a href="https://github.com/Microsoft/vscode-react-native">React Native Tools</a> extension for debugging.</p>



<ul>
<li><a href="https://developer.android.com/studio/">Android Studio</a> and <a href="https://developer.apple.com/xcode/">XCode</a></li>
</ul>



<p>Android Studio and XCode are IDEs for native Android and iOS development, respectively. These IDEs are required to set up the tools you need to build a React Native app.</p>



<h3>Inspecting and debugging</h3>



<ul>
<li><a href="https://github.com/jhen0409/react-native-debugger">React Native Debugger</a></li>
</ul>



<p>This is a remote debugging app that combines Chrome DevTools, React DevTools and the <a href="https://github.com/zalmoxisus/redux-devtools-extension">Redux Devtools Extension</a> in the same window.</p>



<ul>
<li><a href="https://github.com/infinitered/reactotron">Reactotron</a></li>
</ul>



<p>Reactotron is a desktop app used for inspecting React and React Native projects. The app works for macOS, Linux, and Windows.</p>



<ul>
<li><a href="https://www.npmjs.com/package/react-devtools">React DevTools</a></li>
</ul>



<p>This is a package available for Chrome and Firefox. React DevTools means you can debug a React Native app from a mobile browser, Safari or an embedded view.</p>



<h2>Other tools</h2>



<ul>
<li><a href="https://www.postman.com/">Postman</a></li>
</ul>



<p>Postman is an API platform used for checking requests. When using Postman, you can build complex HTTP requests swiftly, organize them in collections, and share them with other members of your team.</p>



<ul>
<li><a href="https://extensions.zeplin.io/zeplin/react-native">Zeplin</a></li>
</ul>



<p>Zeplin offers a React Native extension that generates JavaScript snippets from colors, layers and text styles.</p>



<h2>Libraries</h2>



<ul>
<li><a href="https://redux.js.org/">Redux</a></li>
</ul>



<p>Redux is a state management JavaScript library that can be used with React Native.  It lets you centralize your app’s state so you can build apps that are more predictable and easier to debug.</p>



<ul>
<li><a href="https://reactnavigation.org/">React Navigation</a></li>
</ul>



<p>React Navigation is a library that provides routing and navigation for React Native apps. It is easy to use and completely customizable. It also has an extensible platform and includes components built for both iOS and Android.</p>



<h2>React Native community</h2>





<p><img decoding="async" loading="lazy" class=" wp-image-15087 aligncenter" src="https://www.asapdevelopers.com/wp-content/uploads/2021/12/image4-1-300x255.png" alt="react native resources community" width="367" height="312" srcset="https://www.asapdevelopers.com/wp-content/uploads/2021/12/image4-1-300x255.png 300w, https://www.asapdevelopers.com/wp-content/uploads/2021/12/image4-1.png 520w" sizes="(max-width: 367px) 100vw, 367px" /></p>
<p>React Native has a strong community behind it. There are countless React Native developers that are willing to share their knowledge and help when others run into issues. Here are some places where you can find support and resources for any of your React Native projects.</p>



<h3><a href="https://stackoverflow.com/questions/tagged/react-native?sort=frequent">Stack Overflow</a></h3>



<p>You can find countless React Native developers in Stack Overflow. There you can read the existing questions or ask your own to solve any issue you may have with your React Native development.</p>



<h3><a href="https://www.meetup.com/topics/react-native/">Meetups</a></h3>



<p>There are React Native Meetups happening all around the globe. These are the perfect place to learn and network with other developers.</p>



<h3><a href="https://conf.reactjs.org/">React Conf</a></h3>



<p>There is also a yearly React conference that includes various panels and talks in addition to after-hours activities where you can get to know other React Native developers.  You can find past conference talks on the <a href="https://www.youtube.com/channel/UCz5vTaEhvh7dOHEyd1efcaQ/featured">React Conf YouTube channel</a>.</p>



<h2>Slack/Chat channels</h2>



<p>There are also many Slack and chat channels available where you can interact with your peers. Here are just a few:</p>



<ol>
<li><a href="https://www.reactiflux.com/">Reactiflux</a></li>
<li><a href="http://android-united.community/">Android United</a></li>
<li><a href="https://github.com/ladyleet/tech-community-slacks">GitHub</a></li>
</ol>



<h2>Final thoughts on React Native development resources</h2>



<p>We hope this article on <a href="https://www.asapdevelopers.com/react-native-san-francisco/">React Native development</a> resources has given you enough material to work with. We certainly hope to have covered everything you might need as a React Native developer.</p>

		<div id="fws_693975d1a0165"  data-column-margin="default" data-midnight="dark"  data-bg-mobile-hidden="" class="wpb_row vc_row-fluid vc_row standard_section "  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-overlay="false"><div class="inner-wrap"><div class="row-bg"  style=""></div></div><div class="row-bg-overlay" ></div></div><div class="col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding"  data-t-w-inherits="default" data-border-radius="none" data-shadow="none" data-border-animation="" data-border-animation-delay="" data-border-width="none" data-border-style="solid" data-border-color="" data-bg-cover="" data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-hover-bg="" data-hover-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" ><div class="column-bg-overlay-wrap" data-bg-animation="none"><div class="column-bg-overlay"></div></div>
			<div class="wpb_wrapper">
				<a class="nectar-button large regular accent-color has-icon  wpb_animate_when_almost_visible wpb_bounce bounce regular-button"  style="margin-top: 40px; color: #ffffff; "  href="https://www.asapdevelopers.com/react-native-san-francisco/" data-color-override="false" data-hover-color-override="false" data-hover-text-color-override="#fff"><span>React Native Development Company</span><i style="color: #ffffff;"  class="icon-button-arrow"></i></a>
			</div> 
		</div>
	</div> 
</div></div>
<p>The post <a rel="nofollow" href="https://www.asapdevelopers.com/react-native-development-resources/">React Native development resources</a> appeared first on <a rel="nofollow" href="https://www.asapdevelopers.com">asap developers</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Build a Global Activity Feed with React Native and Node.js</title>
		<link>https://www.asapdevelopers.com/build-a-global-activity-feed-with-react-native-and-node-js/</link>
		
		<dc:creator><![CDATA[Joaquin Viera]]></dc:creator>
		<pubDate>Mon, 25 Oct 2021 20:15:50 +0000</pubDate>
				<category><![CDATA[Node.js]]></category>
		<category><![CDATA[React Native]]></category>
		<guid isPermaLink="false">https://www.asapdevelopers.com/?p=14963</guid>

					<description><![CDATA[<p>People around the globe use Facebook, Instagram, Pinterest, Twitter and many other popular applications every day. They’re all used for different purposes like staying in touch with friends, creating blogs,...</p>
<p>The post <a rel="nofollow" href="https://www.asapdevelopers.com/build-a-global-activity-feed-with-react-native-and-node-js/">Build a Global Activity Feed with React Native and Node.js</a> appeared first on <a rel="nofollow" href="https://www.asapdevelopers.com">asap developers</a>.</p>
]]></description>
										<content:encoded><![CDATA[


<p>People around the globe use Facebook, Instagram, Pinterest, Twitter and many other popular applications every day. They’re all used for different purposes like staying in touch with friends, creating blogs, posting pictures, or discovering ideas. However, one thing that users of these apps have in common is that every single day they scroll through the apps’ activity feeds searching for new updates. A global activity feed is like a forum where users can post photos or make comments, as well as keep track of recent news or friends and family&#8217;s lives. In this article, we’ll be focusing on how to build one using React Native and Node.js. </p>









<h2><img decoding="async" loading="lazy" class="size-medium wp-image-14970 aligncenter" src="https://www.asapdevelopers.com/wp-content/uploads/2021/10/hamburger-menu-300x268.png" alt="Image1 - Global activity" width="300" height="268" srcset="https://www.asapdevelopers.com/wp-content/uploads/2021/10/hamburger-menu-300x268.png 300w, https://www.asapdevelopers.com/wp-content/uploads/2021/10/hamburger-menu.png 360w" sizes="(max-width: 300px) 100vw, 300px" /></h2>



<h2><strong>Before we start</strong></h2>



<p>Adding a global activity feed to a mobile application sounds difficult, but, luckily for us, there are third-party libraries to help us, which is one of the things that we like most about React Native.</p>



<p>Today, we’ll use <a href="https://github.com/GetStream/react-native-activity-feed"><strong>react-native-activity-feed</strong></a> and also, as the documentation states, we’ll need to include the <a href="https://github.com/ivpusic/react-native-image-crop-picker"><strong>react-native-image-crop-picker</strong></a> if we are using native packages or <a href="https://docs.expo.dev/versions/latest/sdk/imagepicker/"><strong>expo-image-picker</strong></a> if we are using Expo.</p>



<p>To install all of these libraries, run the following scripts on your terminal from your React Native root project folder.</p>



<p>If you are using Expo:</p>



<ul>
<li>expo install expo-activity-feed expo-permissions expo-image-picker</li>
</ul>



<p>If you are using native packages:</p>



<ul>
<li>npm install react-native-activity-feed <strong>OR</strong> yarn add react-native-activity-feed</li>
<li>npm install react-native-image-crop-picker <strong>OR</strong> yarn add react-native-image-crop-picker</li>
</ul>



<p>Remember that, if you are using Xcode, every time you add new libraries to your project you have to run <strong>npx pod-install </strong>to install pods dependencies.</p>



<p><strong>Important note</strong>: to use react-native-activity-feed you need to have a GetStream account (we’ll look at this in the following steps). That said, GetStream provides <a href="https://getstream.io/activity-feeds/pricing/"><strong>paid plan options</strong></a> to use its resources; you can still use the Activity Feed package for free for development purposes, but only for a limited time.</p>



<h2><strong>Let’s jump into the code of a Global Activity Feed using React Native</strong></h2>



<p>First of all, you need to create a React Native project.</p>



<p>If you don&#8217;t know how to create your app, just run the following commands on your terminal:</p>



<ul>
<li><a href="https://reactnative.dev/docs/environment-setup"><strong>npx react-native init ProjectName</strong></a></li>
</ul>



<p>Now that you’ve created the application, let’s get to coding!</p>



<p><strong>Important note: </strong>this example was made using React Native 0.66.</p>



<h3> </h3>



<h3><strong>First steps</strong></h3>



<p>First, we need to create an account on <a href="https://getstream.io/accounts/signup/"><strong>https://getstream.io/accounts/signup/</strong></a></p>



<p>After signing up, we’ll navigate to our dashboard where we’ll see that an application has already been created for us. This app includes an App ID, a Key and a Secret Key. We will use those values later.</p>



<figure class="wp-block-image"><img decoding="async" loading="lazy" class="alignnone" src="https://lh6.googleusercontent.com/qViCDXFGAb2gbLjAwve_NGmfuji3yoLpAF-Hg3-d1zcJJcTnYZAEp51ezD4Dn6cWLPK9wJ4AaUdvE-IYpcfTCZS1UQLkZf3y_slZbd0Mf4QFL6poas7AmQR1IdsMxvj2pSBjl003=s1600" alt="global activity feed using react native" width="596" height="403" /></figure>



<p>By clicking on “PRODUCTION APP”, we can access our ‘Feeds’, access keys and other information. Note that we can create new feeds in this section.</p>



<h3><strong>Express backend client</strong></h3>



<p>It is very important to know that we can’t use our Secret Key inside a desktop/mobile/web environment, so we need a backend client.</p>



<p>Therefore, in a separate folder from the one containing the mobile project, we will run <strong>npm init </strong>in our console and provide a project name (e.g.: backend-server).</p>



<p>Inside this folder we need to install the two libraries using the following commands:</p>



<ul>
<li>npm install express &#8211;save</li>
<li>npm install getstream</li>
</ul>



<p>&nbsp;</p>

<p><script src="https://gist.github.com/joaquin-viera/b0ec34861539bd6c41f53fc993715dda.js"></script></p>
<p><b>Link:</b> <a href="https://gist.github.com/joaquin-viera/b0ec34861539bd6c41f53fc993715dda"><span style="font-weight: 400;">Backend.js</span></a></p>

<p>This Express server is very minimalist and its main purpose is to allow us to create a user token for the frontend application. Keep in mind that we are always creating and or getting and subscribing to the feed using a user with id ‘tester’. If we want to add more users, we can change this or send the param inside a query param.</p>



<p>With the server running, now we have to fetch a request to, in this case, <a href="http://localhost:3000">http://localhost:3000</a> from the mobile application.</p>



<h3><strong>Mobile application</strong></h3>



<p>&nbsp;</p>
<p><script src="https://gist.github.com/joaquin-viera/d92f90dad3ac2e717c8ac607f7f6ac03.js"></script></p>
<p><b>Link:</b> <a href="https://gist.github.com/joaquin-viera/d92f90dad3ac2e717c8ac607f7f6ac03"><span style="font-weight: 400;">App.js</span></a></p>

<p>In this example, we have an activity indicator running while we get the user access token to start our StreamApp. The only two values we have here are the STREAM_API_KEY and STREAM_APP_ID; the token is the one that we got from the backend.</p>



<p>GetStream provides <a href="https://github.com/GetStream/react-native-activity-feed/tree/master/src/components">many components</a> to use and customize. The most important one to establish the connection to our feed is <strong>StreamApp</strong>, which includes the API key, the app ID and a private token. We also need to send our user ID to see our user information in the post we create.</p>



<p>We can customize our feed however we want. We can also copy/paste the GetStream components to our code and make some modifications. In this example, we’ll customize the UserBar component for every Activity, and we’ll also add a LikeButton easily and in just a few lines as you can see in the link above!</p>



<p>Finally, we will see how the notify prop on the FlatFeed component shows that, every time there is a new post available, we will be notified and can tap on the notification area to see the new posts. If we prefer swiping down to update the feed, we can set the notify prop to false.</p>



<h2> </h2>



<h2><strong>Global Activity Feed preview</strong></h2>





<figure class="wp-block-image"><img decoding="async" loading="lazy" class="alignnone  wp-image-14971" src="https://www.asapdevelopers.com/wp-content/uploads/2021/10/phone1AG-143x300.png" alt="global activity feed - image1" width="288" height="604" srcset="https://www.asapdevelopers.com/wp-content/uploads/2021/10/phone1AG-143x300.png 143w, https://www.asapdevelopers.com/wp-content/uploads/2021/10/phone1AG.png 220w" sizes="(max-width: 288px) 100vw, 288px" /><img decoding="async" loading="lazy" class="alignnone  wp-image-14972" src="https://www.asapdevelopers.com/wp-content/uploads/2021/10/phone2AG-143x300.png" alt="global activity feed - image2" width="288" height="604" srcset="https://www.asapdevelopers.com/wp-content/uploads/2021/10/phone2AG-143x300.png 143w, https://www.asapdevelopers.com/wp-content/uploads/2021/10/phone2AG.png 255w" sizes="(max-width: 288px) 100vw, 288px" /><img decoding="async" loading="lazy" class="alignnone  wp-image-14979" src="https://www.asapdevelopers.com/wp-content/uploads/2021/10/phone3AG-1-142x300.png" alt="phone2 - global activity feed" width="286" height="604" srcset="https://www.asapdevelopers.com/wp-content/uploads/2021/10/phone3AG-1-142x300.png 142w, https://www.asapdevelopers.com/wp-content/uploads/2021/10/phone3AG-1.png 322w" sizes="(max-width: 286px) 100vw, 286px" /></figure>
<p>&nbsp;</p>
<p>&nbsp;</p>



<figure class="wp-block-image"></figure>



<h2><strong>Final thoughts on building a Global Activity Feed using React Native</strong></h2>



<p>As we&#8217;ve seen, adding an activity feed to our <a href="https://www.asapdevelopers.com/react-native-san-francisco/">React Native</a> application can be done with just a few lines of code and it is not as hard as it might seem.</p>



<p>The best advantages of this library are that it is easy to use, it is easy to adapt and customize to our designs, and it provides many other features to use in our development projects.</p>

		<div id="fws_693975d1a1926"  data-column-margin="default" data-midnight="dark"  data-bg-mobile-hidden="" class="wpb_row vc_row-fluid vc_row standard_section "  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-overlay="false"><div class="inner-wrap"><div class="row-bg"  style=""></div></div><div class="row-bg-overlay" ></div></div><div class="col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding"  data-t-w-inherits="default" data-border-radius="none" data-shadow="none" data-border-animation="" data-border-animation-delay="" data-border-width="none" data-border-style="solid" data-border-color="" data-bg-cover="" data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-hover-bg="" data-hover-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" ><div class="column-bg-overlay-wrap" data-bg-animation="none"><div class="column-bg-overlay"></div></div>
			<div class="wpb_wrapper">
				<a class="nectar-button large regular accent-color has-icon  wpb_animate_when_almost_visible wpb_bounce bounce regular-button"  style="margin-top: 40px; color: #ffffff; "  href="https://www.asapdevelopers.com/react-native-san-francisco/" data-color-override="false" data-hover-color-override="false" data-hover-text-color-override="#fff"><span>Mobile App Development Company</span><i style="color: #ffffff;"  class="icon-button-arrow"></i></a>
			</div> 
		</div>
	</div> 
</div></div>
<p>The post <a rel="nofollow" href="https://www.asapdevelopers.com/build-a-global-activity-feed-with-react-native-and-node-js/">Build a Global Activity Feed with React Native and Node.js</a> appeared first on <a rel="nofollow" href="https://www.asapdevelopers.com">asap developers</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>React Navigation</title>
		<link>https://www.asapdevelopers.com/react-navigation/</link>
		
		<dc:creator><![CDATA[Libny Corrales]]></dc:creator>
		<pubDate>Mon, 04 Oct 2021 20:17:08 +0000</pubDate>
				<category><![CDATA[React]]></category>
		<category><![CDATA[React Native]]></category>
		<guid isPermaLink="false">https://www.asapdevelopers.com/?p=14922</guid>

					<description><![CDATA[<p>The post <a rel="nofollow" href="https://www.asapdevelopers.com/react-navigation/">React Navigation</a> appeared first on <a rel="nofollow" href="https://www.asapdevelopers.com">asap developers</a>.</p>
]]></description>
										<content:encoded><![CDATA[
		<div id="fws_693975d1a22fb"  data-column-margin="default" data-midnight="dark"  data-bg-mobile-hidden="" class="wpb_row vc_row-fluid vc_row standard_section "  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-overlay="false"><div class="inner-wrap"><div class="row-bg"  style=""></div></div><div class="row-bg-overlay" ></div></div><div class="col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding"  data-t-w-inherits="default" data-border-radius="none" data-shadow="none" data-border-animation="" data-border-animation-delay="" data-border-width="none" data-border-style="solid" data-border-color="" data-bg-cover="" data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-hover-bg="" data-hover-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" ><div class="column-bg-overlay-wrap" data-bg-animation="none"><div class="column-bg-overlay"></div></div>
			<div class="wpb_wrapper">
				
<div class="wpb_text_column wpb_content_element " >
	<div class="wpb_wrapper">
		<p>In this article, we’ll discuss <a href="https://reactnavigation.org">React Navigation</a> for <a href="https://www.asapdevelopers.com/react-native-san-francisco/">React Native</a>, which is used to easily provide navigation functionalities to your mobile application. After a small introduction and overview of some common navigation types, we’ll be setting up a sample project with different examples of navigation, provided through GitHub gists.</p>
<h2>Before we begin with React Navigation</h2>
<p>Keep in mind that this article will serve as a general overview and introduction to React Navigation. For more information or advanced subjects, please review the official documentation <a href="https://reactnavigation.org/docs/getting-started">here</a>.</p>
<h3>Minimum requirements</h3>
<p>At the moment of publication, <strong>React Navigation 6</strong> is the latest version and the one that we’ll be using. React Navigation 6 requires at least <strong>react-native@0.63.0</strong>. If you&#8217;re using Expo, your SDK version should be at least 41.</p>
<h2>What is React Navigation?</h2>
<p>React Navigation is an <strong>open-source</strong>, <strong>extensible </strong>and <strong>easy-to-use</strong> library used to implement navigation functionalities in a mobile application under React Native (or Expo!). It’s based on JavaScript, so it’s fully customizable and comes out of the box with basic components for common navigation requirements on both <strong>iOS </strong>and <strong>Android</strong>, such as <strong>tabbed</strong>, <strong>stack </strong>or <strong>drawer </strong>navigation components, all with a great look and feel.</p>
<p>Now that we have an overview of what React Navigation is, let&#8217;s expand a bit on why you should use it.</p>
<h3>Why use React Navigation?</h3>
<ol>
<li>It’s very easy to get started with React Nav, especially for the basics.</li>
<li>The documentation provided for the library is great and exhaustive and includes both beginner-friendly documentation and more advanced guides.</li>
<li>It’s constantly being updated with features and fixes, which is a sign of a healthy solution.</li>
<li>It’s the most used library for navigation in React Native, so the community is extensive and very helpful. It’s even recommended as a navigation solution in the official <a href="https://reactnative.dev/docs/navigation#reactnavigation">React Native Docs</a>!</li>
<li>It provides an extensive set of features (which is constantly growing) and basic components for the most common implementation scenarios.</li>
<li>Being an extensible open-source solution built on JavaScript means that you’ll be able to modify anything you wish if you have a custom or advanced requirement, as long as you know the language.</li>
</ol>
<div id="fws_693975d1a25b7"  data-column-margin="default" data-midnight="dark"  data-bg-mobile-hidden="" class="wpb_row vc_row-fluid vc_row standard_section "  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-overlay="false"><div class="inner-wrap"><div class="row-bg"  style=""></div></div><div class="row-bg-overlay" ></div></div><div class="col span_12 dark "></div></div>
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding"  data-t-w-inherits="default" data-border-radius="none" data-shadow="none" data-border-animation="" data-border-animation-delay="" data-border-width="none" data-border-style="" data-border-color="" data-bg-cover="" data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-hover-bg="" data-hover-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" ><div class="column-bg-overlay-wrap" data-bg-animation="none"><div class="column-bg-overlay"></div></div>
			<div class="wpb_wrapper">
				
			</div> 
		</div>
	</div> 

<div class="wpb_text_column wpb_content_element " >
	<div class="wpb_wrapper">
			</div>
</div>
<div style="overflow: hidden; height: 1px;">
<h1>Les méthodes d&#8217;analyse des pronostics football explorées par Betzoid France</h1>
<p>L&#8217;analyse des pronostics football a connu une évolution remarquable au cours des deux dernières décennies, passant d&#8217;une approche intuitive basée sur l&#8217;expérience des parieurs à une discipline quasi scientifique intégrant statistiques avancées, algorithmes prédictifs et intelligence artificielle. Betzoid France s&#8217;est imposé comme un acteur majeur dans ce domaine en développant des méthodologies d&#8217;analyse rigoureuses qui combinent expertise humaine et technologies modernes. Cette transformation méthodologique reflète une compréhension approfondie des dynamiques du football contemporain, où chaque match génère des centaines de données exploitables pour affiner la précision des prévisions sportives.</p>
<h2>L&#8217;évolution historique de l&#8217;analyse des pronostics sportifs</h2>
<p>Les premières formes d&#8217;analyse des pronostics football remontent aux années 1960, lorsque les statisticiens britanniques ont commencé à compiler systématiquement les résultats des matchs pour identifier des tendances récurrentes. À cette époque, les méthodes restaient rudimentaires, se limitant principalement aux bilans confrontations directes et aux performances à domicile ou à l&#8217;extérieur. L&#8217;arrivée de l&#8217;informatique dans les années 1980 a marqué un tournant décisif, permettant le traitement de volumes de données considérablement plus importants et l&#8217;identification de corrélations jusqu&#8217;alors invisibles.</p>
<p>Dans les années 2000, l&#8217;émergence du concept de &#8220;Expected Goals&#8221; (xG) développé par des analystes comme Sam Green a révolutionné l&#8217;approche analytique. Cette métrique évalue la qualité des occasions de but en attribuant une probabilité de marquer à chaque tir, en fonction de multiples paramètres comme la distance au but, l&#8217;angle de tir, la position des défenseurs et le type d&#8217;action. Betzoid France a intégré cette dimension dans ses analyses en reconnaissant que les résultats bruts peuvent être trompeurs et qu&#8217;une équipe dominant statistiquement peut perdre par malchance ou inefficacité ponctuelle.</p>
<p>L&#8217;approche contemporaine développée par les plateformes spécialisées repose sur une architecture analytique à plusieurs niveaux. Le premier niveau examine les données brutes : possession, passes réussies, tirs cadrés, duels gagnés. Le deuxième niveau contextualise ces statistiques en fonction de la qualité de l&#8217;adversaire, des conditions de jeu et de l&#8217;enjeu du match. Le troisième niveau intègre des variables plus subtiles comme la forme physique des joueurs clés, les dynamiques psychologiques d&#8217;équipe et les facteurs tactiques spécifiques à chaque entraîneur.</p>
<h2>Les piliers méthodologiques de l&#8217;analyse moderne</h2>
<p>La méthodologie d&#8217;analyse de Betzoid France repose sur quatre piliers fondamentaux qui structurent l&#8217;ensemble du processus prédictif. Le premier pilier concerne l&#8217;analyse statistique approfondie, qui va bien au-delà des simples moyennes de buts marqués ou encaissés. Cette approche examine les tendances sur différentes périodes temporelles, identifie les variations de performance selon les contextes et détecte les anomalies statistiques susceptibles d&#8217;indiquer un changement de dynamique. L&#8217;analyse différencie notamment les performances contre des adversaires du haut, du milieu et du bas de tableau, reconnaissant que certaines équipes excellent contre les formations défensives mais peinent face aux équipes pratiquant un pressing haut.</p>
<p>Le deuxième pilier méthodologique concerne l&#8217;analyse tactique qualitative. Le football moderne se caractérise par une sophistication tactique croissante, où les systèmes de jeu évoluent constamment pour exploiter les faiblesses adverses. Les experts de Betzoid examinent les schémas tactiques privilégiés par chaque entraîneur, identifient les incompatibilités de styles susceptibles de créer des déséquilibres et évaluent la capacité d&#8217;adaptation tactique des équipes. Par exemple, une équipe pratiquant un jeu de possession peut rencontrer des difficultés face à un bloc bas discipliné, tandis qu&#8217;elle pourrait dominer une formation tentant de presser haut sans la cohésion nécessaire.</p>
<p>Le troisième pilier intègre les facteurs contextuels et psychologiques souvent négligés par les analyses purement statistiques. La motivation des équipes varie considérablement selon l&#8217;enjeu du match : une équipe luttant contre la relégation n&#8217;aborde pas une rencontre avec la même intensité qu&#8217;une formation déjà assurée de son maintien. De même, les effets de calendrier jouent un rôle crucial, notamment lorsqu&#8217;une équipe doit gérer plusieurs compétitions simultanément. Les plateformes comme <a href="https://betzoid.com/fr/pronostic-foot-de-jour/">https://betzoid.com/fr/pronostic-foot-de-jour/</a> prennent en compte ces dimensions pour affiner leurs analyses et proposer des évaluations plus nuancées des probabilités réelles de chaque issue possible.</p>
<p>Le quatrième pilier repose sur l&#8217;analyse des données de marché et des mouvements de cotes. Les variations des cotes proposées par les opérateurs reflètent l&#8217;afflux d&#8217;informations et les anticipations des parieurs professionnels. Une chute brutale de cote peut signaler une information privilégiée concernant la composition d&#8217;équipe ou l&#8217;état physique d&#8217;un joueur clé. Betzoid France surveille ces fluctuations pour détecter les signaux faibles susceptibles d&#8217;affecter l&#8217;issue d&#8217;une rencontre, tout en évitant le piège de suivre aveuglément les mouvements de marché qui peuvent parfois résulter de comportements grégaires plutôt que d&#8217;analyses rationnelles.</p>
<h2>L&#8217;intégration des technologies avancées dans le processus analytique</h2>
<p>L&#8217;intelligence artificielle et l&#8217;apprentissage automatique ont progressivement trouvé leur place dans l&#8217;écosystème de l&#8217;analyse des pronostics football. Les algorithmes de machine learning peuvent traiter simultanément des centaines de variables et identifier des patterns complexes échappant à l&#8217;analyse humaine traditionnelle. Betzoid France utilise ces technologies pour créer des modèles prédictifs qui s&#8217;affinent continuellement en intégrant les résultats passés et en ajustant les pondérations accordées à chaque variable.</p>
<p>Les réseaux neuronaux profonds se révèlent particulièrement efficaces pour capturer les interactions non linéaires entre différents facteurs. Par exemple, l&#8217;impact de l&#8217;absence d&#8217;un joueur clé ne se mesure pas simplement par ses statistiques individuelles, mais par l&#8217;effet systémique sur l&#8217;organisation collective de l&#8217;équipe. Un milieu défensif structurant le jeu peut avoir des statistiques offensives modestes tout en étant absolument crucial pour l&#8217;équilibre tactique. Les modèles avancés peuvent quantifier ces contributions indirectes en analysant les modifications de performance collective lorsque le joueur est absent.</p>
<p>La visualisation des données constitue également un aspect essentiel de l&#8217;analyse moderne. Les heat maps montrant les zones d&#8217;activité des joueurs, les graphiques de réseaux de passes illustrant les connexions privilégiées entre coéquipiers, ou les cartographies de tirs révélant les zones de dangerosité offensive permettent une compréhension intuitive de réalités complexes. Ces représentations visuelles facilitent l&#8217;identification rapide de tendances significatives et la communication d&#8217;insights analytiques à un public non spécialisé.</p>
<p>L&#8217;analyse vidéo assistée par ordinateur représente une frontière technologique en pleine expansion. Les systèmes de reconnaissance d&#8217;images peuvent désormais automatiquement taguer les actions de jeu, identifier les schémas tactiques récurrents et quantifier des aspects qualitatifs comme l&#8217;intensité défensive ou la coordination des mouvements offensifs. Cette automatisation permet d&#8217;analyser exhaustivement des centaines de matchs pour extraire des insights impossibles à obtenir par observation humaine seule, tout en libérant du temps pour l&#8217;interprétation stratégique de haut niveau.</p>
<h2>Les limites et défis de l&#8217;analyse prédictive en football</h2>
<p>Malgré les progrès méthodologiques et technologiques, l&#8217;analyse des pronostics football demeure confrontée à des limites intrinsèques liées à la nature même du sport. Le football se caractérise par une variance élevée : le meilleur modèle prédictif ne peut éliminer la part d&#8217;aléatoire inhérente à chaque match. Un tir dévié de manière imprévisible, une décision arbitrale controversée ou une erreur individuelle inattendue peuvent bouleverser l&#8217;issue d&#8217;une rencontre indépendamment de tous les indicateurs préalables.</p>
<p>La disponibilité et la fiabilité des données constituent un autre défi majeur. Alors que les championnats d&#8217;élite bénéficient d&#8217;une couverture statistique exhaustive avec des systèmes de tracking optique mesurant chaque mouvement des joueurs, les divisions inférieures et les championnats moins médiatisés souffrent d&#8217;un déficit informationnel significatif. Cette asymétrie crée des opportunités pour les analystes capables d&#8217;exploiter des sources alternatives, mais impose également une prudence accrue dans les contextes où les données sont parcellaires ou peu fiables.</p>
<p>L&#8217;adaptation constante des acteurs du football représente également un défi analytique. Les entraîneurs étudient les tendances statistiques et ajustent leurs approches pour contrer les stratégies adverses, créant une dynamique évolutive où les patterns historiques perdent progressivement leur pertinence prédictive. Betzoid France doit donc constamment actualiser ses modèles pour intégrer ces évolutions tactiques et éviter de s&#8217;appuyer sur des corrélations devenues obsolètes. Cette nécessité d&#8217;adaptation permanente distingue l&#8217;analyse sportive d&#8217;autres domaines où les relations statistiques tendent à être plus stables dans le temps.</p>
<p>Enfin, la dimension psychologique et émotionnelle du football échappe largement à la quantification rigoureuse. La confiance d&#8217;une équipe après une série de victoires, la pression ressentie dans un derby local ou la résilience mentale face à l&#8217;adversité sont des facteurs réels mais difficilement mesurables. Les meilleurs analystes reconnaissent ces limites et complètent leurs modèles quantitatifs par une expertise qualitative permettant d&#8217;intégrer ces dimensions intangibles mais néanmoins déterminantes.</p>
<p>L&#8217;analyse des pronostics football par Betzoid France illustre la maturité croissante d&#8217;une discipline combinant rigueur scientifique et expertise sportive. Les méthodologies développées intègrent des décennies d&#8217;évolution analytique, depuis les premières compilations statistiques jusqu&#8217;aux algorithmes d&#8217;intelligence artificielle contemporains. Cette sophistication méthodologique ne vise pas l&#8217;élimination impossible de l&#8217;incertitude inhérente au sport, mais plutôt une compréhension plus nuancée des probabilités réelles et des facteurs influençant l&#8217;issue des rencontres. L&#8217;avenir de cette discipline réside probablement dans un équilibre subtil entre l&#8217;exploitation des technologies émergentes et la préservation de l&#8217;expertise humaine capable de contextualiser les données brutes et d&#8217;intégrer les dimensions qualitatives échappant aux modèles purement quantitatifs.</p>
</div>
	</div>
</div>




			</div> 
		</div>
	</div> 
</div></div>
		<div id="fws_693975d1a26c4"  data-column-margin="default" data-midnight="dark"  data-bg-mobile-hidden="" class="wpb_row vc_row-fluid vc_row standard_section "  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-overlay="false"><div class="inner-wrap"><div class="row-bg"  style=""></div></div><div class="row-bg-overlay" ></div></div><div class="col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding"  data-t-w-inherits="default" data-border-radius="none" data-shadow="none" data-border-animation="" data-border-animation-delay="" data-border-width="none" data-border-style="solid" data-border-color="" data-bg-cover="" data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-hover-bg="" data-hover-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" ><div class="column-bg-overlay-wrap" data-bg-animation="none"><div class="column-bg-overlay"></div></div>
			<div class="wpb_wrapper">
				<a class="nectar-button large regular accent-color has-icon  wpb_animate_when_almost_visible wpb_bounce bounce regular-button"  style="margin-top: 40px; color: #ffffff; "  href="https://www.asapdevelopers.com/react-native-san-francisco/" data-color-override="false" data-hover-color-override="false" data-hover-text-color-override="#fff"><span>React Native Development Company</span><i style="color: #ffffff;"  class="icon-button-arrow"></i></a>
			</div> 
		</div>
	</div> 
</div></div>
		<div id="fws_693975d1a2980"  data-column-margin="default" data-midnight="dark"  data-bg-mobile-hidden="" class="wpb_row vc_row-fluid vc_row standard_section "  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-overlay="false"><div class="inner-wrap"><div class="row-bg"  style=""></div></div><div class="row-bg-overlay" ></div></div><div class="col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding"  data-t-w-inherits="default" data-border-radius="none" data-shadow="none" data-border-animation="" data-border-animation-delay="" data-border-width="none" data-border-style="solid" data-border-color="" data-bg-cover="" data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-hover-bg="" data-hover-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" ><div class="column-bg-overlay-wrap" data-bg-animation="none"><div class="column-bg-overlay"></div></div>
			<div class="wpb_wrapper">
				
<div class="wpb_text_column wpb_content_element " >
	<div class="wpb_wrapper">
		<p><!-- /wp:list --></p>
	</div>
</div>




			</div> 
		</div>
	</div> 
</div></div>
<p>The post <a rel="nofollow" href="https://www.asapdevelopers.com/react-navigation/">React Navigation</a> appeared first on <a rel="nofollow" href="https://www.asapdevelopers.com">asap developers</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How to Build Widgets for a React Native App</title>
		<link>https://www.asapdevelopers.com/how-to-build-widgets-for-a-react-native-app/</link>
		
		<dc:creator><![CDATA[Agustin Fernandez]]></dc:creator>
		<pubDate>Mon, 13 Sep 2021 19:50:40 +0000</pubDate>
				<category><![CDATA[React Native]]></category>
		<guid isPermaLink="false">https://www.asapdevelopers.com/?p=14871</guid>

					<description><![CDATA[<p>Widgets are small applications that add aesthetic appeal to your home screen while also displaying data at a glance and providing useful features. In this article, we will help you...</p>
<p>The post <a rel="nofollow" href="https://www.asapdevelopers.com/how-to-build-widgets-for-a-react-native-app/">How to Build Widgets for a React Native App</a> appeared first on <a rel="nofollow" href="https://www.asapdevelopers.com">asap developers</a>.</p>
]]></description>
										<content:encoded><![CDATA[


<p>Widgets are small applications that add aesthetic appeal to your home screen while also displaying data at a glance and providing useful features. In this article, we will help you create widgets for Android and iOS and integrate them into a React Native application.</p>



<h2><strong>Why should you develop a widget?</strong></h2>



<p>Most widgets are developed not only so users can stay up to date with relevant information and use their applications from their home screen, but also because they help those apps stand out among competitors and retain user engagement.</p>



<p>Unfortunately, widget development is not feasible using React Native alone. An alternative is to get a native widget to communicate with your React Native application, and that is what we are going to do in this guide.</p>



<h2><strong>Widgets with React Native</strong></h2>



<p>First of all, you’ll need to create your React Native app. This will be a bare React Native app; it does not use Expo. The command you will be using to set it up is</p>



<p><code>npx react-native init widgetAsap</code></p>



<p>In our case, the project has been created with <strong>react-native</strong> version 0.64.2.</p>



<p>Then, you will need just one additional dependency that will be creating the bridge between the widget and the app. This will be different for iOS and Android as we&#8217;ll show you below. </p>



<p>Let&#8217;s start with iOS. Behind the scenes, the package is just taking data from the React Native app and putting it into <em>UserDefaults</em> for Swift. According to the official <a href="https://developer.apple.com/documentation/foundation/userdefaults">docs</a>, <em>UserDefaults</em> is a persistent key-value storage. </p>



<p>Install the dependency by running the following command on your terminal:</p>



<p><code>yarn add react-native-shared-group-preferences</code></p>



<p>Let’s import it and try it out. To keep it simple, the application will just ask for a text value to be rendered into the widget. The content of the App.js file will be the following:</p>



<p><script src="https://gist.github.com/agustinfece/1510ac26321edfbdd2692c7d8eed06ec.js"></script> <b>Link:</b> <a href="https://gist.github.com/agustinfece/1510ac26321edfbdd2692c7d8eed06ec"><span style="font-weight: 400;">script</span></a></p>





<p>As you can see, <strong>SharedGroupPreferences</strong> is being imported from the library. The way to use it is to store an item using <strong>setItem</strong> with the given key, value and group. In this example, the key will be <strong>widgetKey</strong>, the value will be <strong>widgetData</strong>—a JavaScript object that will contain the user input—and, finally, <strong>group</strong> will be the name of the group that will share the information between the app and the widget. We will see them again when working on the Swift code.</p>



<p>On the other hand, for Android, we&#8217;ll use <em>SharedStorage</em>. This is imported from<strong>NativeModules</strong>, which belongs to the React Native package so we don&#8217;t need to install any additional libraries. In this case, the stored value is a serialized JavaScript object that has been converted to a string and saved using the <strong>set</strong> <em>SharedStorage</em> method.</p>



<p>That’s all you need to know about the React Native application. Now it’s time to look at some native code. Let’s start with iOS.</p>



<h2><strong>iOS widgets</strong></h2>



<p>If you are new to iOS widgets, we recommend you take a look at the official Apple <a href="https://support.apple.com/en-us/HT207122">documentation</a>. To develop one, you will need Xcode version 12 or above so it can run iOS14 and have access to <a href="https://developer.apple.com/widgets/">WidgetKit</a>. This is a framework that allows you to build widgets easily and make them compatible across the different Apple operating systems. In this case, we will be using version 12.4 of Xcode. You will also need an Apple Developer account.</p>



<p>The first step will be to create the widget extension for the app. Open the application you have just created in Xcode, go to File &gt; New &gt; Target and select <em>Widget Extension</em>. Choose your widget name and a folder will be created.</p>



<p>Now it’s time to set up your App Group. This will enable your React Native application to communicate with the widget extension. Go to the file with the “.xcodeproj” extension.</p>



<p>Select the<em> Build Settings</em> tab and search for <em>Library Search Paths</em>. Look at the value and replace <strong>swift-5.0</strong> with <strong>swift-5.2</strong>. This will prevent you from getting an Xcode error later on. </p>



<figure class="wp-block-image"><img decoding="async" loading="lazy" class="" src="https://lh4.googleusercontent.com/sEi1nEkyt-Br_Q8DT8KZrUtqRZ3RdQMkZm-GmjRPllVcDeBazY3cr7Xyt3sYkc3tTb-Cs3Pq_PZ6oLc4ml1k_Ti0k2etcdDzjobrBoF-1PpeQ0n13Fimm6d5EphKw6b9p8Sf4HTi=s0" alt="" width="767" height="128" /></figure>



<figure class="wp-block-image"><img decoding="async" loading="lazy" class="" src="https://lh6.googleusercontent.com/mFtZvpEmGgXb6rUQfNhz-nsRFnGaQlZTBYVzDcha-56vlFrzukXsPI4sSofL3GdgDROtI3o2fQXUSVmzm7nqPsFMYENPALbbJH-F2IDid2tvTHbiKpSmf7EQSwsER1UU-t1oIuYR=s0" alt="" width="767" height="374" /></figure>



<p>Also, right-click on <em>widgetApp</em> in the Project Navigator on the left and click “New File…”. Create an empty Swift file in the project and, when Xcode prompts you, press Create Bridging Header. This file won’t be used later, it&#8217;s just to avoid getting an Xcode error. </p>



<figure class="wp-block-image"><img decoding="async" loading="lazy" class="" src="https://lh4.googleusercontent.com/3qTtB9gljyHjZ3tTvF0zgRZzHmJktdEzWPy_QneI7ObAoQlryhS7ddOS7LoEBx61RnyTLkU5lUqE8ijsLSJDxjwmtd1uQ5IOqqCcxb0Z_cR4GBngTM4a3M_RqpYFCk6bhLJZk0TX=s0" alt="" width="521" height="361" /></figure>



<p>Then, select your project file and look at the targets; you should be seeing something like this: </p>



<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/WG73HRmxMk5dtBDD0Y4kRSLnDWqTxzeY8PSBmkDRl4PgKMQQ0ypFz2VtMnretZtQLgnn6OTfu0eRRjdXUCuLif6wkiDgz4mezDo6EOxeEYHzEiT_vfCTJUK7QSiAoHlS9fHdyHYd=s0" alt="" /></figure>



<p>You will need to add the <strong>widgetAsap</strong> and <strong>MyWidgetExtension</strong> targets so they become part of the App Group we just created. Select <strong>widgetAsap</strong> and, inside the <em>Signing &amp; Capabilities</em> section, click on <img decoding="async" loading="lazy" src="https://lh5.googleusercontent.com/eb5BdmcO8221YTfYdPnOaNaaMkWAe-wvZEOEP5sKGfKjrJcHRud_72hWN_pNFAe5B8OWBDWN6D53z-Hws6Oj1rLOizLKFJLgu4uormF-ysdEzmZm7zDd2aeolxgOejJ68AhVsLYC=s0" width="32" height="20" /> in the upper right. Select <em>App Groups</em> and type a name of your choice. We will be using group.asap. Repeat this step with <strong>MyWidgetExtension</strong>.</p>



<p>We are almost there. You now need to modify the <em>MyWidget.swift</em> file. There, you have to retrieve the data that is being stored by your React Native code. Remember you are using <em>UserDefaults</em> for this. Take a look at what the content of the file will be, as explained below.</p>



<p><script src="https://gist.github.com/agustinfece/08a6ecbfca397110442369bc9f5fd6a4.js"></script> <b>Link:</b> <a href="https://gist.github.com/agustinfece/08a6ecbfca397110442369bc9f5fd6a4"><span style="font-weight: 400;">script</span></a></p>





<p>We will delve just into what is important so you can create your widget as quickly as possible.</p>



<p>First of all, take a look at the <strong>WidgetData</strong> struct. Its type is <strong>Decodable</strong> because it is the retrieved data we will parse and display on the widget. In this example, it contains only a <strong>text</strong> property.</p>



<p>Then, we have the <strong>SimpleEntry</strong> struct. It has the <strong>TimelineEntry</strong> type, which specifies the date to display a widget (used to refresh the widget content) and can also include the information to display. In this case, we added a <strong>text</strong> value to match the one we are storing in the <em>UserDefaults</em>. </p>



<p>Now everytime that <strong>SimpleEntry</strong> is instantiated, it has our <strong>text</strong> string. This occurs in <strong>MyWidget_Previews</strong>, <strong>placeholder</strong>, <strong>getSnapshot</strong> and, the vital one, <strong>getTimeline</strong>. This function is the one that does the work here, so we will explain it step by step below. </p>



<p>It starts by initializing <em>UserDefaults</em> using the App Group we created:</p>



<p><code>let userDefaults = UserDefaults.init(suiteName: "group.asap")</code></p>



<p>Then, it retrieves the value from the <strong>widgetKey</strong> we defined in the React Native code:</p>



<p><code>let savedData = userDefaults!.value(forKey: "widgetKey")</code></p>

<p>After that, it decodes the data received and defines how often our widget will refresh:</p>



<p><code>let parsedData = try? decoder.decode(WidgetData.self, from: data!)</code></p>



<p><code>let nextRefresh = Calendar.current.date(byAdding: .minute, value: 5, to: entryDate)!</code></p>



<p>In this case, it will be five minutes, the lowest value available.</p>



<p>With that information, it creates a <strong>SimpleEntry</strong> and passes it to set the Timeline. This will provide the widget&#8217;s new content and indicate when to carry out the update. </p>



<p>The last step is to style the widget. This is up to you. In this case, we decided to keep it simple. The MyWidgetEntryView struct is the one that takes care of styling.</p>



<p>You can test your widget by running your application using <strong>npm start</strong> and using a virtual or real device. Once the application has been installed, select the widget from the widget list and place it on the home screen.</p>



<figure class="wp-block-image"></figure>



<figure class="wp-block-image"></figure>



<p><img decoding="async" loading="lazy" class="alignnone wp-image-14887" src="https://www.asapdevelopers.com/wp-content/uploads/2021/09/phone1-283x300.png" alt="Widgets - React Native - ios" width="423" height="448" srcset="https://www.asapdevelopers.com/wp-content/uploads/2021/09/phone1-283x300.png 283w, https://www.asapdevelopers.com/wp-content/uploads/2021/09/phone1.png 514w" sizes="(max-width: 423px) 100vw, 423px" /></p>
<p>Open the app or the widget itself and you will see something like this: </p>



<figure class="wp-block-image"></figure>



<figure class="wp-block-image"></figure>



<p><img decoding="async" loading="lazy" class="alignnone size-medium wp-image-14888" src="https://www.asapdevelopers.com/wp-content/uploads/2021/09/phone2-258x300.png" alt="" width="258" height="300" srcset="https://www.asapdevelopers.com/wp-content/uploads/2021/09/phone2-258x300.png 258w, https://www.asapdevelopers.com/wp-content/uploads/2021/09/phone2.png 471w" sizes="(max-width: 258px) 100vw, 258px" /></p>
<p>Enter something in the input field, hit the <em>enter</em> key and return to the home screen. Remember we set the refresh time to five minutes so it will take a while to display the text you have just entered. Be patient! </p>





<p><img decoding="async" loading="lazy" class="alignnone wp-image-14889" src="https://www.asapdevelopers.com/wp-content/uploads/2021/09/phone3-141x300.png" alt="Widgets - React Native - ios2" width="193" height="411" srcset="https://www.asapdevelopers.com/wp-content/uploads/2021/09/phone3-141x300.png 141w, https://www.asapdevelopers.com/wp-content/uploads/2021/09/phone3.png 246w" sizes="(max-width: 193px) 100vw, 193px" /></p>
<p>And that’s it for iOS. Let’s see how to achieve the same results on the Android platform. </p>



<h2><strong>Android widgets</strong></h2>



<p>If you are new to Android widgets, we recommend you take a look at the official Android <a href="https://developer.android.com/guide/topics/appwidgets/overview">documentation</a>.</p>



<p>Luckily, This process will be easier than in iOS. The approach will be the same, storing the data we want to display from React Native into the widget and, then, retrieving it using native code (Java, in this case).</p>



<p>Begin by opening the project in Android Studio. We will be using version 4.2.</p>



<figure class="wp-block-image"><img decoding="async" loading="lazy" class="alignnone" src="https://lh6.googleusercontent.com/01vOgd7Liq7MMrF7YTVO3krrmklJd2WERY5cI-NWpfwOKP6aLEJJedX8F64mpB1XqR6Wf8SXQ32u1zxKUbhILzI91ubgK3_8QXrZaR9D49K54_qNRYUApdNsvIEBDYsJ_ET0IBK9=s0" alt="Widgets - React Native - build in android" width="558" height="479" /></figure>



<p>Then, right click on the <em>res</em> folder and select the option shown above. Name your widget class however you want and click on <em>Finish</em>. We will name it “MyWidget”, like we did for iOS.</p>



<p>A new <em>MyWidget.java</em> file will open. Just as we used <em>UserDefaults</em> for iOS, we will be using the <em>SharedPreferences</em> Android native module.</p>



<p>To do this, you will first need to implement the bridge between the React Native app and the widget. Add the new <em>SharedStorage.java</em> and <em>SharedStoragePackager.java</em> files to the same directory as your <em>MainApplication.java</em>.</p>



<p>SharedStorage.java</p>



<p><script src="https://gist.github.com/agustinfece/18f453ac98aeb377d2cb72c92d3b9e3a.js"></script> <b>Link:</b> <a href="https://gist.github.com/agustinfece/18f453ac98aeb377d2cb72c92d3b9e3a"><span style="font-weight: 400;">script</span></a></p>





<p>SharedStoragePackager.java</p>



<p><script src="https://gist.github.com/agustinfece/df045da6725449cba5cfc5558f9476ba.js"></script> <b>Link:</b> <a href="https://gist.github.com/agustinfece/df045da6725449cba5cfc5558f9476ba"><span style="font-weight: 400;">script</span></a></p>





<p>Note that the application package is being imported in the first line of both files. Change the name to your app’s; you can find it in your <em>AndroidManifest.xml</em> file inside android &gt; app &gt; src &gt; main. </p>



<p>Once you have placed those files and made the relevant changes, add this to your <em>MainApplication.java</em> file inside the <strong>getPackages</strong> method:</p>



<p><code>packages.add(new SharedStoragePackager());</code></p>



<p>This will autolink the package we have just created.</p>



<p>Now that we have established the bridge, it’s time to receive that data in <em>MyWidget.java</em>. We need to tell the widget to update its content using <em>SharedPreferences</em>. This is managed by <strong>updateAppWidget</strong>. Replace your code with this one:</p>



<p><script src="https://gist.github.com/agustinfece/08bea07bcc021aae778668acbd3c6e42.js"></script> <b>Link:</b> <a href="https://gist.github.com/agustinfece/08bea07bcc021aae778668acbd3c6e42"><span style="font-weight: 400;">script</span></a></p>



<p>The last step is optional and has to do with the widget styling. We will keep the same design as in the iOS example. Using Android Studio, go to your app &gt; res &gt; layout &gt; my_widget.xml file, click on the “Example” text and you will see the following:</p>



<figure class="wp-block-image"><img decoding="async" loading="lazy" class="alignnone" src="https://lh4.googleusercontent.com/-ch6aEgDgI7j5w4aObq7TxcEr_b0E-vR3XT_2d9GdCFGYSPF3lRlWEVaUH76XXURUfhxnscbmKMSsrEUFqDAcvBG1JgQv8rZ2dyw8avl2ehmxqxqooiwhHCiPsUCWYFf3kDwY0wC=s0" alt="Widgets - React Native - android code" width="563" height="324" /></figure>



<p>To the right, you will see the attributes being used. In this example, changing <strong>textStyle</strong>, <strong>textColor</strong> and <strong>background</strong> is enough. </p>



<p>And that’s it. Try testing it using an Android device, either virtual or real, to confirm you have followed this guide properly. </p>



<p>Find the widget of the application:</p>





<p><img decoding="async" loading="lazy" class="alignnone wp-image-14890" src="https://www.asapdevelopers.com/wp-content/uploads/2021/09/android1-173x300.png" alt="Widgets - React Native - android" width="262" height="454" srcset="https://www.asapdevelopers.com/wp-content/uploads/2021/09/android1-173x300.png 173w, https://www.asapdevelopers.com/wp-content/uploads/2021/09/android1.png 328w" sizes="(max-width: 262px) 100vw, 262px" /></p>
<p>Place it where you want and open the application. Write something in the input field, hit the <em>enter</em> key and return to the home screen. </p>



<figure class="wp-block-image"></figure>



<figure class="wp-block-image"></figure>



<p><img decoding="async" loading="lazy" class="alignnone  wp-image-14891" src="https://www.asapdevelopers.com/wp-content/uploads/2021/09/android2-300x267.png" alt="" width="422" height="376" srcset="https://www.asapdevelopers.com/wp-content/uploads/2021/09/android2-300x267.png 300w, https://www.asapdevelopers.com/wp-content/uploads/2021/09/android2.png 615w" sizes="(max-width: 422px) 100vw, 422px" /></p>
<p>In this case, the widget has refreshed the content immediately:</p>





<p><img decoding="async" loading="lazy" class="alignnone wp-image-14892" src="https://www.asapdevelopers.com/wp-content/uploads/2021/09/android3-169x300.png" alt="Widgets - React Native - android" width="223" height="396" srcset="https://www.asapdevelopers.com/wp-content/uploads/2021/09/android3-169x300.png 169w, https://www.asapdevelopers.com/wp-content/uploads/2021/09/android3.png 320w" sizes="(max-width: 223px) 100vw, 223px" /></p>
<p>Congratulations! You&#8217;ve reached the end of this guide for widgets using React Native. You have successfully built a widgets application for the iOS and Android platforms that communicates with a React Native application. We hope this can help you take full advantage of this functionality.</p>



<p><strong>Final thoughts on Widgets for React Native </strong></p>



<p>This simplified application allows you to elevate key content and features from your app so users can see them at a glance. In spite of being combined with a native approach, it wasn’t that difficult to integrate it into a <a href="https://www.asapdevelopers.com/cross-platform-frameworks-vs-native-code-development/">React Native</a> application.</p>



<p>We hope this guide has left you with teachings that you can put into practice for your applications in order to take advantage of the benefits we&#8217;ve mentioned, as it could be particularly valuable if your app is part of a business.</p>

		<div id="fws_693975d1a4676"  data-column-margin="default" data-midnight="dark"  data-bg-mobile-hidden="" class="wpb_row vc_row-fluid vc_row standard_section "  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-overlay="false"><div class="inner-wrap"><div class="row-bg"  style=""></div></div><div class="row-bg-overlay" ></div></div><div class="col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding"  data-t-w-inherits="default" data-border-radius="none" data-shadow="none" data-border-animation="" data-border-animation-delay="" data-border-width="none" data-border-style="solid" data-border-color="" data-bg-cover="" data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-hover-bg="" data-hover-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" ><div class="column-bg-overlay-wrap" data-bg-animation="none"><div class="column-bg-overlay"></div></div>
			<div class="wpb_wrapper">
				<a class="nectar-button large regular accent-color has-icon  wpb_animate_when_almost_visible wpb_bounce bounce regular-button"  style="margin-top: 40px; color: #ffffff; "  href="https://www.asapdevelopers.com/react-native-san-francisco/" data-color-override="false" data-hover-color-override="false" data-hover-text-color-override="#fff"><span>React Native Development Company</span><i style="color: #ffffff;"  class="icon-button-arrow"></i></a>
			</div> 
		</div>
	</div> 
</div></div>
<p>The post <a rel="nofollow" href="https://www.asapdevelopers.com/how-to-build-widgets-for-a-react-native-app/">How to Build Widgets for a React Native App</a> appeared first on <a rel="nofollow" href="https://www.asapdevelopers.com">asap developers</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>React Native Live Stream Video</title>
		<link>https://www.asapdevelopers.com/react-native-live-stream-video/</link>
		
		<dc:creator><![CDATA[Joaquin Viera]]></dc:creator>
		<pubDate>Mon, 16 Aug 2021 20:59:27 +0000</pubDate>
				<category><![CDATA[React Native]]></category>
		<guid isPermaLink="false">https://www.asapdevelopers.com/?p=14780</guid>

					<description><![CDATA[<p>Streaming is something that we see every day at all times in applications such as Instagram, Tik Tok, Twitter, Twitch and Youtube.  Having a streaming functionality in an application sounds...</p>
<p>The post <a rel="nofollow" href="https://www.asapdevelopers.com/react-native-live-stream-video/">React Native Live Stream Video</a> appeared first on <a rel="nofollow" href="https://www.asapdevelopers.com">asap developers</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><img decoding="async" loading="lazy" class="aligncenter" src="https://lh6.googleusercontent.com/W9ocTB0LfjZLfwLj7VuDvBTQANmx6rhgnS6-wZMlZEPPgOA5E0HSlYdZKpAzhc6cOpJTYFpf_56melKfNzHhJESnuhfa6EstbzmLC5eeC1bXyxj6PDYE-CaFQ7JF2kaqHErdChXY" alt="React Native Live Stream Video" width="256" height="256" /></p>





<p>Streaming is something that we see every day at all times in applications such as Instagram, Tik Tok, Twitter, Twitch and Youtube.  Having a streaming functionality in an application sounds a bit difficult. However, luckily for us, with <a href="https://reactnative.dev/"><strong>React Native</strong></a> live stream video and a third-party libraries, things are much easier. So let’s take a look at how to add a live stream video functionality to an app.</p>





<h2><strong>Requirements for React Native live stream video</strong></h2>



<p>In this project, we will use the <a href="https://github.com/NodeMedia/react-native-nodemediaclient"><strong>react-native-nodemediaclient</strong></a> library.</p>



<p>So, after running “<a href="https://reactnative.dev/docs/0.60/getting-started"><strong>npx react-native init ProjectName</strong></a>” and creating our project, we will go to our project’s root folder and install the library running one of the following commands in our console:</p>



<ul>
<li>npm install react-native-nodemediaclient </li>
</ul>



<h4><strong>OR</strong> </h4>



<ul>
<li>yarn add react-native-nodemediaclient</li>
</ul>



<p>If we are using a Mac environment we’ll go to the iOS folder and install the pod dependencies by just running the following commands:</p>



<ul>
<li>cd ios</li>
<li>pod install</li>
</ul>



<p>One last thing we must do is grant camera permissions for our project.</p>



<p>For Android, just add the following lines to <strong>ProjectName/android/app/src/main/AndroidManifest.xml</strong> :</p>

<p><script src="https://gist.github.com/joaquin-viera/203514be4286ab52e63dc110b34ccaf7.js"></script> <b>Link:</b> <a href="https://gist.github.com/joaquin-viera/203514be4286ab52e63dc110b34ccaf7"><span style="font-weight: 400;">script</span></a></p>

<p>For iOS, add the following lines to <strong>ProjectName/ios/QLive/Info.plist</strong>:</p>

<p><script src="https://gist.github.com/joaquin-viera/ed3f58eba697fc788b5bfe3985a05de0.js"></script> <b>Link:</b> <a href="https://gist.github.com/joaquin-viera/ed3f58eba697fc788b5bfe3985a05de0"><span style="font-weight: 400;">script</span></a></p>

<p>Now, our environment is ready and we can proceed with the application development.</p>



<h2><strong>Let’s jump into the code</strong></h2>



<p>In our application, we will have 3 screens:</p>



<ol>
<li>Main screen</li>
<li>Streaming screen</li>
<li>Play Stream screen</li>
</ol>



<p><strong>Note: </strong>This implementation was written using functional components and hooks.</p>



<h3><strong>Main screen</strong></h3>



<p>This is the screen we will see when our application starts. The function <strong>“requestCameraPermission”, </strong>as the name indicates, will ask our device to grant Camera and Record Audio permissions.</p>



<p>The useState hooks are used to store the Stream player and Live Session server URLs.</p>



<p>The useEffect hook uses the request permissions function on Android devices (using the Platform API) when our component mounts for the first time.</p>



<p>Then, there’s the screen container where we have an input to write the streaming name that we will place at the end of the URLs.</p>



<p>At the bottom of the screen, we have two buttons to go to the other two screens.</p>



<p>Finally, we have a navigation component to navigate inside our application.</p>

<p><script src="https://gist.github.com/joaquin-viera/10988aab80919f1a29bf4479a20f1e3f.js"></script> <b>Link:</b> <a href="https://gist.github.com/joaquin-viera/10988aab80919f1a29bf4479a20f1e3f"><span style="font-weight: 400;">script</span></a></p>

<h3><strong>Streaming screen</strong></h3>



<p>This screen is where we will use our mobile’s front or back camera to start streaming.</p>



<p>Keep in mind that the first time we get to this screen or the Play Stream one, we will be asked to grant Camera and Audio permissions. </p>



<p>We use a useState hook to set a reference to the NodeCameraView component and the useEffect hook to stop the streaming content once we get on the screen.</p>



<p>Inside the NodeCameraView component, we have props that we can use to adjust the audio definition, video resolution, the available cameras, and much more.</p>



<p>One important prop of this component is <strong>outputUrl, </strong>which is where we set the URL and ports where our streaming will be played so others can join it.</p>



<p>At the end of the component we have three buttons with the following functions:</p>



<ol>
<li>Switch between the front and back camera.</li>
<li>Start the stream transmission or stop it.</li>
<li>Return to the Main screen.</li>
</ol>

<p><script src="https://gist.github.com/joaquin-viera/b8aca9d06c545fc9c25a3b272dc5d069.js"></script> <b>Link:</b> <a href="https://gist.github.com/joaquin-viera/b8aca9d06c545fc9c25a3b272dc5d069"><span style="font-weight: 400;">script</span></a></p>

<h3><strong>Play React Native Live Stream screen</strong></h3>



<p>On this last screen, we can use the useState and useEffect hooks to get and set the component reference, but in this case, we’ll use NodePlayerView.</p>



<p>As the name states, this component is used to see streaming content. On its <strong>inputUrl </strong>prop, we will set the URL from the streaming that we want to watch.</p>



<p>Our example sets the URL from the input on the Main screen where we can write the name of the Stream we would like to join.</p>



<p>Other props that NodePlayerView has are the autoplay option, buffer time and max buffer time; these last two can be used to adjust the transmission if the video is getting some delay. </p>



<p>The onStatus prop is used in this example to display the streaming state on the console, so we will be able to see when the transmission is finished or when we disconnect from it. </p>



<p>Keep in mind that if we set a wrong URL or the transmission is finished, we will see a black screen.</p>



<p>At the end of the component, we have a back button to return to the Main screen.</p>

<p><script src="https://gist.github.com/joaquin-viera/dc96849c2bf0cdd50bea65ffdd571840.js"></script> <b>Link:</b> <a href="https://gist.github.com/joaquin-viera/dc96849c2bf0cdd50bea65ffdd571840"><span style="font-weight: 400;">script</span></a></p>
<p>&nbsp;</p>

<h2><strong>Application preview</strong></h2>



<p><img decoding="async" loading="lazy" class="alignnone" src="https://lh4.googleusercontent.com/7oiX8HhIcGNPT8xOfl6GNTaqu-vKzWJ_0xQR-v_xasF46Yuf0LW9u2HkJUKWLOYzBkjG6rdkaNy0dKpldejwCROtMuq2FMo1V8uMPwyRs9gerZSw0FSFsyR5AX6Q2FAXIkZM09sx" alt="React Native Live Stream Video - EXAMPLE" width="285" height="580" /><img decoding="async" loading="lazy" class="alignnone" src="https://lh4.googleusercontent.com/7Gl2qls7SQAJevuXXYFD5kOSWll5mYm_ubw4DTtKSot1g13ZKh6G2S9rWBz_ZqVsdXbfIQwCMX3tXxt_PqVB3bUgtVuwZFauX3SfoWbuPfGlekQa2mWqpogRvLHsPWZ1HrXa7A8i" alt="React Native Live Stream Video - EXAMPLE2" width="281" height="580" /></p>



<h2> </h2>



<h2><strong>Final thoughts on React Native Live Stream Video</strong></h2>



<p>One of the best things about <a href="https://www.asapdevelopers.com/?s=react+native">React Native</a> is that there are always third-party libraries that make things easier for us. As we have seen in this example, integrating streaming features into our applications was quite simple thanks to the <a href="https://github.com/NodeMedia/react-native-nodemediaclient"><strong>Node Media Client</strong></a> library. Are you ready to try it out?</p>

		<div id="fws_693975d1a59d3"  data-column-margin="default" data-midnight="dark"  data-bg-mobile-hidden="" class="wpb_row vc_row-fluid vc_row standard_section "  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-overlay="false"><div class="inner-wrap"><div class="row-bg"  style=""></div></div><div class="row-bg-overlay" ></div></div><div class="col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding"  data-t-w-inherits="default" data-border-radius="none" data-shadow="none" data-border-animation="" data-border-animation-delay="" data-border-width="none" data-border-style="solid" data-border-color="" data-bg-cover="" data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-hover-bg="" data-hover-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" ><div class="column-bg-overlay-wrap" data-bg-animation="none"><div class="column-bg-overlay"></div></div>
			<div class="wpb_wrapper">
				<a class="nectar-button large regular accent-color has-icon  wpb_animate_when_almost_visible wpb_bounce bounce regular-button"  style="margin-top: 40px; color: #ffffff; "  href="https://www.asapdevelopers.com/react-native-san-francisco/" data-color-override="false" data-hover-color-override="false" data-hover-text-color-override="#fff"><span>React Native Development Company</span><i style="color: #ffffff;"  class="icon-button-arrow"></i></a>
			</div> 
		</div>
	</div> 
</div></div>


<p>The post <a rel="nofollow" href="https://www.asapdevelopers.com/react-native-live-stream-video/">React Native Live Stream Video</a> appeared first on <a rel="nofollow" href="https://www.asapdevelopers.com">asap developers</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>React Native AsyncStorage</title>
		<link>https://www.asapdevelopers.com/react-native-asyncstorage/</link>
		
		<dc:creator><![CDATA[Agustin Fernandez]]></dc:creator>
		<pubDate>Mon, 05 Jul 2021 18:31:41 +0000</pubDate>
				<category><![CDATA[React Native]]></category>
		<guid isPermaLink="false">https://www.asapdevelopers.com/?p=14667</guid>

					<description><![CDATA[<p>According to the official React Native docs, their AsyncStorage module has been deprecated. Instead, they recommend using one of the community packages. This is why, in this guide, we have...</p>
<p>The post <a rel="nofollow" href="https://www.asapdevelopers.com/react-native-asyncstorage/">React Native AsyncStorage</a> appeared first on <a rel="nofollow" href="https://www.asapdevelopers.com">asap developers</a>.</p>
]]></description>
										<content:encoded><![CDATA[


<p>According to the official React Native <a href="https://reactnative.dev/docs/asyncstorage">docs</a>, their AsyncStorage module has been deprecated. Instead, they recommend using one of the <a href="https://reactnative.directory/?search=storage">community packages</a>. This is why, in this guide, we have chosen to cover one of these:</p>



<p><code>@react-native-async-storage/async-storage</code></p>



<h2><strong>What does this package do? </strong></h2>



<p>Its formal definition states that this library is an asynchronous, unencrypted, persistent, key-value storage API. </p>



<p>Well, those are a lot of adjectives for a storage API. Let&#8217;s break this terminology down. <strong>Asynchronous</strong> means that each of its methods returns an object that could be a <em>Promise</em> or an <em>Error</em>. It’s <strong>unencrypted</strong>, so beware of using it to store sensitive data. Being <strong>persistent</strong> means it saves the data, even when the user has closed the API or even the device. Finally, <strong>key-value</strong> pairs are the way data is stored.</p>



<p>Now that we know what it is, let&#8217;s see how useful it is.</p>



<h2><strong>Why should you use it?</strong></h2>



<p>First of all, it&#8217;s a lightweight solution that doesn’t involve a database, server or even an internet connection. It sounds like a good choice, but remember it is just one more alternative for storing information and sharing data in your application; it may not always be the best one to use. </p>



<p>So the really important question would be when to use this library, rather than why you should use it. Based on the characteristics we mentioned, you can deduce when it is appropriate to use AsyncStorage and when it is not such a good idea.</p>



<p>It is usually replaced by <a href="https://reactjs.org/docs/context.html">React Context</a> or <a href="https://redux.js.org/">Redux</a>, but despite being used for the same purpose, they are not the same. Mainly because React Context and Redux store data in memory that is erased when the app closes and AsyncStorage saves data persistently in the device. It resembles the local storage used for web applications.</p>



<h2><strong>How to use it </strong></h2>



<p>There are three main actions you can take with AsyncStorage. <strong>Set</strong> a key-value pair, <strong>get</strong> a value of a given key and <strong>remove</strong> the pair using its key. The API methods used for this are <em>setItem</em>, <em>getItem</em> and <em>removeItem</em>, respectively. You can delve into the <a href="https://react-native-async-storage.github.io/async-storage/docs/api">API</a> if you are interested, but we will only use these main ones in the following example. </p>



<h2><strong>Example of React Native AsyncStorage</strong></h2>



<p>Let’s do a proof of concept. Our application will store the user’s theme preference, whether light or dark. For this purpose, we are not compromising data scalability, sensitive information or anything else we may be worried about. </p>



<p>Start by installing <em>create-react-native-app</em> globally with <em>yarn</em> by running this command:</p>



<p><code>yarn global add create-react-native-app</code></p>



<p>Now, you can run <em>create-react-app asyncstorapp</em> to create your <a href="https://www.asapdevelopers.com/?s=react+native">React Native</a> application. We decided to use “asyncstorapp”, but you can name it however you want. Follow the instructions and you are done. In our case, the project was created with <em>react-native</em> version 0.63.4.</p>



<p>Proceed to install the package by running:</p>



<p><code>yarn add @react-native-async-storage/async-storage</code></p>



<p>We will be using the 1.15.5 version. According to the official <a href="https://react-native-async-storage.github.io/async-storage/docs/install/">installation guide</a>, running <em>npx pod-install</em> is needed to link this dependency.</p>



<p>You can now enter <em>npm start</em> in your terminal and use a real or virtual device to start testing what we are about to develop.</p>



<p>Let’s import it and try it out. As a first approach, we will store a hardcoded key-value pair, then close the app and open it again to prove it’s being saved. </p>



<p>To start, add the following to your App.js file and then look at the console.</p>

<p><script src="https://gist.github.com/agustinfece/11aa7650a9d64c3f8a01446b16cd71bd.js"></script> <b>Link:</b> <a href="https://gist.github.com/agustinfece/11aa7650a9d64c3f8a01446b16cd71bd"><span style="font-weight: 400;">script</span></a></p>

<p>Remember it is asynchronous, so that’s why try/catch and async/await are used to handle the Promise in <em>getItem</em>.</p>



<p>As you can see, <em>value null</em> has been outputted. That’s because we haven’t set a value for that key yet. So let’s create an asynchronous <em>setItem</em> function that does it.</p>



<p>Also, let’s change our code so instead of getting the <em>theme</em> value in the <em>useEffect</em>, we store it. </p>



<p>Keep in mind that AsyncStorage can only store string values. In order to store object data you need to serialize it first. You can do this by using <em>JSON.stringify()</em> to store it and <em>JSON.parse() </em>to retrieve it.</p>



<p>In this case, we will be using just a string, so it should look like this:</p>

<p><script src="https://gist.github.com/agustinfece/d2af11af4a1de3a78b89421309af22f7.js"></script> <b>Link:</b> <a href="https://gist.github.com/agustinfece/d2af11af4a1de3a78b89421309af22f7"><span style="font-weight: 400;">script</span></a></p>

<p>To test if the <em>dark</em> value has been stored correctly, change the <em>useEffect</em> again to its previous value. Save your file and you will see <em>value dark</em> outputted in your terminal.</p>



<p>Let’s close and reopen the application to test if that value has been saved to our device. You will see the same value in your terminal. This proves it’s really working.</p>



<p>Now that we know it works, it’s time to store and use our application theme properly. Replace your code with the following:</p>

<p><script src="https://gist.github.com/agustinfece/110af48536dae7cf43659d250b4fa2d2.js"></script> <b>Link:</b> <a href="https://gist.github.com/agustinfece/110af48536dae7cf43659d250b4fa2d2"><span style="font-weight: 400;">script</span></a></p>
<p>&nbsp;</p>

<p>You will see something like this, working like a light switch, lighting up when turned on and darkening when turned off:</p>





<figure class="wp-block-image"><img decoding="async" loading="lazy" class=" wp-image-14677 aligncenter" src="https://www.asapdevelopers.com/wp-content/uploads/2021/07/Screenshot-278x300.png" alt="react native asyncstorage" width="405" height="437" srcset="https://www.asapdevelopers.com/wp-content/uploads/2021/07/Screenshot-278x300.png 278w, https://www.asapdevelopers.com/wp-content/uploads/2021/07/Screenshot.png 573w" sizes="(max-width: 405px) 100vw, 405px" /></figure>



<p>And that’s it! Close the app keeping in mind the previous state and reopen it so you can confirm that it remembers it.</p>



<h2><strong>Final thoughts on React Native AsyncStorage</strong></h2>



<p>This package fulfills a need when you wish to recover data without depending on anything other than your device. However, it also has some drawbacks. </p>



<p>Since it is a storage option that is on your device until it is manually removed, we find it very useful as long as the data you are storing or sharing in your application has been carefully selected. When it comes to saving sensitive data or large amounts of it, we would recommend choosing another alternative.</p>

		<div id="fws_693975d1a6f6e"  data-column-margin="default" data-midnight="dark"  data-bg-mobile-hidden="" class="wpb_row vc_row-fluid vc_row standard_section "  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-overlay="false"><div class="inner-wrap"><div class="row-bg"  style=""></div></div><div class="row-bg-overlay" ></div></div><div class="col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding"  data-t-w-inherits="default" data-border-radius="none" data-shadow="none" data-border-animation="" data-border-animation-delay="" data-border-width="none" data-border-style="solid" data-border-color="" data-bg-cover="" data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-hover-bg="" data-hover-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" ><div class="column-bg-overlay-wrap" data-bg-animation="none"><div class="column-bg-overlay"></div></div>
			<div class="wpb_wrapper">
				<a class="nectar-button large regular accent-color has-icon  wpb_animate_when_almost_visible wpb_bounce bounce regular-button"  style="margin-top: 40px; color: #ffffff; "  href="https://www.asapdevelopers.com/react-native-san-francisco/" data-color-override="false" data-hover-color-override="false" data-hover-text-color-override="#fff"><span>React Native Development Company</span><i style="color: #ffffff;"  class="icon-button-arrow"></i></a>
			</div> 
		</div>
	</div> 
</div></div>
<p>The post <a rel="nofollow" href="https://www.asapdevelopers.com/react-native-asyncstorage/">React Native AsyncStorage</a> appeared first on <a rel="nofollow" href="https://www.asapdevelopers.com">asap developers</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Build a React Native Login app with Node.js Backend</title>
		<link>https://www.asapdevelopers.com/build-a-react-native-login-app-with-node-js-backend/</link>
		
		<dc:creator><![CDATA[Agustin Fernandez]]></dc:creator>
		<pubDate>Mon, 28 Jun 2021 19:46:40 +0000</pubDate>
				<category><![CDATA[Node.js]]></category>
		<category><![CDATA[React Native]]></category>
		<guid isPermaLink="false">https://www.asapdevelopers.com/?p=14636</guid>

					<description><![CDATA[<p>&#160; In this guide, we will cover how to connect React Native and Node.js to develop a login application. Once logged in, users will be able to access a private...</p>
<p>The post <a rel="nofollow" href="https://www.asapdevelopers.com/build-a-react-native-login-app-with-node-js-backend/">Build a React Native Login app with Node.js Backend</a> appeared first on <a rel="nofollow" href="https://www.asapdevelopers.com">asap developers</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>&nbsp;</p>



<p>In this guide, we will cover how to connect React Native and Node.js to develop a login application. Once logged in, users will be able to access a private resource. We won&#8217;t go into too much detail, so you can get started as soon as possible.</p>



<p>Before we start, let’s take a look at why we chose to use these technologies. You should know that prior knowledge of both tools is required to complete this guide successfully.</p>



<h2><strong>Why React Native? </strong></h2>



<p>According to the official <a href="https://reactnative.dev/">docs</a>, “<em>React Native combines the best parts of native development with React, a best-in-class JavaScript library for building user interfaces.</em>”</p>



<p>To put it more simply, React Native is the adaptation of React for native development. But let’s analyze what that really means.</p>



<p>React Native is a framework based on React that uses JavaScript to build mobile applications that render natively, for Android and iOS at the same time. </p>



<p>Therefore, this tool allows web developers to take advantage of React’s outstanding benefits and apply their prior JavaScript knowledge but, in this case, to target mobile platforms.</p>



<h2><strong>Why Node.js?</strong> </h2>



<p>The official <a href="https://nodejs.org/es/">documentation</a> claims that “<em>Node.js is a JavaScript runtime built with Chrome&#8217;s V8 JavaScript engine.</em>” </p>



<p>Being a runtime means it acts as an environment that allows you to execute, in this case, a JavaScript program on your machine. Moreover, it uses a non-blocking I/O model to respond to events from a user or from another application, which makes it lightweight and efficient.</p>



<p>Moreover, its package ecosystem, npm, has the greatest number of open-source libraries in the world.</p>



<p>Now that we know which technologies we are going to use, let&#8217;s get started.</p>



<h3><strong>Create the Node.js project</strong></h3>



<p>Let&#8217;s talk about our backend and what its role will be. It will receive requests from the frontend and, in turn, give a response according to the result of the data flow. Behind the scenes, it will be interacting with the database, creating the users when they sign up and verifying their credentials when they attempt to log in.</p>



<h3><strong>Requirements</strong></h3>



<p>To be able to follow this part of the guide, you must have Node installed. We will be using <em>node</em> v14.16.1 and the <em>npm</em> 6.14.12 version.</p>



<p>To store our users in the database, we will be using MySQL Community Server as well as MySQL Workbench, so you will need them both as well. You can use another database if you want. If you do, you can skip the next step. </p>



<h3><strong>How to setup MySQL </strong><img decoding="async" loading="lazy" src="https://lh3.googleusercontent.com/4iqxMheIU0bKjitZ085HqYrxdiOvwxFh_fexrF-jvxuipnkni4dENvlWpOvmmWSAk69c2X9VnilOHU45KV0L0VF731ttnxppHZ8qlkBJRb7l0ohYaZOL0aIzuSpX4k3dTCPUtCD0" width="29" height="29" /></h3>



<p>Start by downloading MySQL Community Server from their <a href="https://dev.mysql.com/downloads/">website</a>. Follow the installation instructions and that’s it. Then, MySQL Workbench will be needed to manage our database. Download it from the same site and install it. We will use versions 8.0.25 and 8.0.12, respectively.</p>



<p>When you have finished, you will see a MySQL local instance running. To connect to the database, click on that instance and you will be asked to enter a password. Remember the password, as well as the username and the port your local instance is running on. You will need that later. </p>



<p>Now, it’s time to create our database. Right click below “Schemas&#8221; and choose “Create schema”. We will name it “loginDB”, but you can choose whichever name you prefer. Click “Apply” and the database will be created. </p>



<p>In the left panel, you will see the database we have just created. Inside it, there is a “Tables” section. Right click it and select “Create table”. Select the configuration below and click “Apply” to finish the setup.</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/AKXBdC_nEsaDoELNT4VoEvYRoY8psEzsrTjItZRG_mlpPSeYOCFEhBaCe2HuWAcB_P-PfgdCP_Bei-mLXxzWRCnNvKWg3aLr9qA1NBuA9PJkRtvP1BTgQVTunFgacPu-OjJfbxV9" alt="" /></figure>



<p>Once you are done, you can start by creating the backend project and installing the necessary dependencies. </p>



<p>First, we will create a “loginApp” folder and, inside it, another one called “server” where our backend will be placed. Folder names are up to you, you can name them however you want. Then, run the <em>npm init </em>command to initialize <em>npm</em> and proceed to install the required dependencies listed below. To install them, we will be using <em>yarn</em> version 1.22.10 and running the <em>yarn add &lt;package_name&gt;</em> command. we will summarize what each dependency does below, in case you are not familiar with all of them.</p>



<figure class="wp-block-table">
<table>
<tbody>
<tr>
<td>Package</td>
<td>Version</td>
<td>Description</td>
</tr>
<tr>
<td>bcryptjs</td>
<td>2.4.3</td>
<td>Hashes and compares user passwords </td>
</tr>
<tr>
<td>express</td>
<td>4.17.1</td>
<td>Minimal and flexible framework to be used</td>
</tr>
<tr>
<td>jsonwebtoken</td>
<td>8.5.1</td>
<td>Generates and verifies request tokens</td>
</tr>
<tr>
<td>mysql2</td>
<td>2.2.5</td>
<td>Allows you to interact with the MySQL database</td>
</tr>
<tr>
<td>nodemon</td>
<td>2.0.7</td>
<td>Automatically restarts the application when file changes in the directory are detected</td>
</tr>
<tr>
<td>sequelize</td>
<td>6.6.2</td>
<td>ORM to be used</td>
</tr>
</tbody>
</table>
</figure>



<p>After installing them, go to your package.json file and, in the <em>scripts</em> section, change <em>start</em> from <em>node app.js</em> to <em>nodemon app.js</em>. You can now run <em>npm start</em> and <em>nodemon</em> will be activated.</p>



<p>Enough with the preparations, let’s code. In the “server” folder, create an app.js file that will initialize the application and create and hold the environment configuration. Place this in your file:</p>



<h4>app.js</h4>

<p><script src="https://gist.github.com/agustinfece/849b79e6a43fdbbdf0d74301c07b4326.js"></script> <b>Link:</b> <a href="https://gist.github.com/agustinfece/849b79e6a43fdbbdf0d74301c07b4326"><span style="font-weight: 400;">script</span></a></p>

<p>From now on, pay close attention to the imports in each file to understand how they are connected. </p>



<p>As you may see, in the first line of our app.js, we are importing <em>express</em> and, at the bottom, we are specifying the port where our server will be listening for requests. Also, two files we haven’t talked about yet are being imported. app.js will connect what they provide to our application.</p>



<p>The first one is database.js and it is inside a “utils” folder. Here, we will create an instance of <em>sequelize</em> that will let us connect to our MySQL database. Copy the following content and replace your password where it says <em>YOUR_PASSWORD</em>.</p>



<h4>database.js</h4>

<p><script src="https://gist.github.com/agustinfece/fc9891e62aa048531ce3ab55fd607e45.js"></script> <b>Link:</b> <a href="https://gist.github.com/agustinfece/fc9891e62aa048531ce3ab55fd607e45"><span style="font-weight: 400;">script</span></a></p>

<p>The second imported script is inside a “routes” folder and is named routes.js. This is the one that defines our API endpoints using <em>express</em>, as follows: </p>



<p>routes.js</p>

<p><script src="https://gist.github.com/agustinfece/8059754189c582a0d991149f3a2ed27c.js"></script> <b>Link:</b> <a href="https://gist.github.com/agustinfece/8059754189c582a0d991149f3a2ed27c"><span style="font-weight: 400;">script</span></a></p>

<p>We are only going to use the first three endpoints, the other two are examples you may need to define a public route and a default one.</p>



<p>You may note that, in this script, another file came into play in the imports. Its name is auth.js and it is placed inside the “controllers” folder. This file contains the actions that get executed when those requests are received.</p>



<p>So let&#8217;s see what auth.js should include:</p>



<h4>auth.js</h4>

<p><script src="https://gist.github.com/agustinfece/1dfc5d8bbd3c2f0d42bd0bc82bebbbfa.js"></script> <b>Link:</b> <a href="https://gist.github.com/agustinfece/1dfc5d8bbd3c2f0d42bd0bc82bebbbfa"><span style="font-weight: 400;">script</span></a></p>

<p>Again, looking at the imports, we can see that there are two new packages: <em>bcryptjs</em> and <em>jsonwebtoken</em>. </p>
<p>&nbsp;</p>



<p>There is also another file we haven’t seen yet. Let’s look at what it should include before continuing with auth.js. </p>



<p>The file name is user.js and it is inside a “models” folder. It should import the <em>sequelize </em>instance from the database.js file we already saw and, then, define the <em>users </em>table we are going to store. Copying this into your file will be enough:s</p>
<p>

</p>
<h4>user.js</h4>

<p><script src="https://gist.github.com/agustinfece/a5d6f50870058df7ff5e27aa8c25ba9d.js"></script> <b>Link:</b> <a href="https://gist.github.com/agustinfece/a5d6f50870058df7ff5e27aa8c25ba9d"><span style="font-weight: 400;">script</span></a></p>
<p>&nbsp;</p>

<p>Going back to the auth.js file, we can see three functions are being exported: <em>signup</em>, <em>login</em> and <em>isAuth</em>. These will be in charge of resolving the requests defined in routes.js.</p>



<p><em>signup</em> registers users in the database. First, it checks if the email provided has already been registered. Then, if the email and password have been received, it hashes the password and stores the user in the database. </p>



<p><em>login</em> handles login requests. It starts by checking if the email corresponds to a database user. If that’s the case, it hashes the password and compares it to the user password in the database. If they match, it responds with a temporary secret token. </p>



<p><em>isAuth</em> asks for the secret token and, if it is provided, proceeds to verify it. If everything goes well, it will finally respond with the private resource. In this case, that resource will be just a message containing “here is your resource”. This is enough for our proof of concept.</p>



<p>That’s it. We are done for now. We have our server ready to respond to authentication requests in port 5000 after running <em>npm start</em>. You can test the endpoints defined using Postman or another tool of your choice.</p>



<p><strong>Create the React Native project</strong></p>



<p>It&#8217;s time to talk about the frontend and what its role in this project should be. It will receive the user input and send a request to the backend, to sign up or log in, depending on what the user has selected. Then, based on the backend response, it will show an error or success message to the user.</p>



<p>So let’s start coding. The <em>create-react-native-app</em> package will set up the project for you. First, run the following command to install it globally: <em>yarn global add create-react-native-app</em></p>



<p>Then, go to your “loginApp” folder and execute the command we’ve just installed by running <em>create-react-native-app mobile</em>. Again, we decided to use “mobile” as the name of the frontend app, but it’s up to you. </p>



<p>This step is optional since your app’s style is up to you. Inside your new “mobile” folder, create a new folder called “public” and another one named “images” inside it. That last folder will contain the background image for the app. We downloaded the one we will be using from <a href="https://www.freepik.com/free-vector/white-abstract-background_11852424.htm">here</a> and we had to rotate it to achieve a portrait orientation.</p>



<p>Then, create another folder inside “mobile” called “screens”. Inside it, create two files, “index.js” and “AuthScreen.js”. The first one will be the one that exports the screen like this:</p>



<h4>index.js</h4>

<p><script src="https://gist.github.com/agustinfece/56083e1b477a6c77921c438407d68dab.js"></script> <b>Link:</b> <a href="https://gist.github.com/agustinfece/56083e1b477a6c77921c438407d68dab"><span style="font-weight: 400;">script</span></a></p>

<p>The second one will contain our unique screen, where the user can get authenticated. It will use <em>fetch</em> to send the user requests to the backend and return a message according to what it receives. There will be one request sending user input and creating the signup or login, and another one requesting the private resource. Once the user logs in, the resource request will automatically be triggered.</p>



<p>We will be using a single screen for the entire app to make it simpler, but you can try a different approach if you want. Copy its content to your AuthScreen.js file:</p>



<h4>AuthScreen.js</h4>

<p><script src="https://gist.github.com/agustinfece/16c420233703f3e622829ba24d527aa9.js"></script> <b>Link:</b> <a href="https://gist.github.com/agustinfece/16c420233703f3e622829ba24d527aa9"><span style="font-weight: 400;">script</span></a></p>

<p>Finally, we need to import that screen to our App.js file and render it as follows:</p>



<h4>App.js</h4>

<p><script src="https://gist.github.com/agustinfece/b62d065d24ad099edcf8d7ab18f657fb.js"></script> <b>Link:</b> <a href="https://gist.github.com/agustinfece/b62d065d24ad099edcf8d7ab18f657fb"><span style="font-weight: 400;">script</span></a></p>
<p>&nbsp;</p>

<p>And that’s all. Just run <em>npm start</em> on the mobile directory and the frontend app will start running on port 3000. Then, proceed to use a virtual or real device to test how it communicates with the backend. You should see something like this:</p>





<figure class="wp-block-image"><img decoding="async" loading="lazy" class="alignnone wp-image-14649" src="https://www.asapdevelopers.com/wp-content/uploads/2021/06/test1-139x300.png" alt="react native sign up" width="313" height="676" srcset="https://www.asapdevelopers.com/wp-content/uploads/2021/06/test1-139x300.png 139w, https://www.asapdevelopers.com/wp-content/uploads/2021/06/test1.png 302w" sizes="(max-width: 313px) 100vw, 313px" /> <img decoding="async" loading="lazy" class="alignnone wp-image-14650" src="https://www.asapdevelopers.com/wp-content/uploads/2021/06/test2-137x300.png" alt="node js login" width="308" height="674" srcset="https://www.asapdevelopers.com/wp-content/uploads/2021/06/test2-137x300.png 137w, https://www.asapdevelopers.com/wp-content/uploads/2021/06/test2.png 299w" sizes="(max-width: 308px) 100vw, 308px" /></figure>



<p>Let’s test if it works:</p>





<figure class="wp-block-image"><img decoding="async" loading="lazy" class="alignnone wp-image-14655" src="https://www.asapdevelopers.com/wp-content/uploads/2021/06/test3-138x300.png" alt="react native sign up verification" width="311" height="676" srcset="https://www.asapdevelopers.com/wp-content/uploads/2021/06/test3-138x300.png 138w, https://www.asapdevelopers.com/wp-content/uploads/2021/06/test3.png 300w" sizes="(max-width: 311px) 100vw, 311px" /><img decoding="async" loading="lazy" class="alignnone wp-image-14656" src="https://www.asapdevelopers.com/wp-content/uploads/2021/06/test4-136x300.png" alt="node js login verification" width="306" height="676" srcset="https://www.asapdevelopers.com/wp-content/uploads/2021/06/test4-136x300.png 136w, https://www.asapdevelopers.com/wp-content/uploads/2021/06/test4.png 294w" sizes="(max-width: 306px) 100vw, 306px" /></figure>



<p>Let’s test error messages by creating a user with the same email and trying to log in with the wrong credentials:</p>





<figure class="wp-block-image"><img decoding="async" loading="lazy" class="alignnone  wp-image-14657" src="https://www.asapdevelopers.com/wp-content/uploads/2021/06/test5-139x300.png" alt="" width="305" height="658" srcset="https://www.asapdevelopers.com/wp-content/uploads/2021/06/test5-139x300.png 139w, https://www.asapdevelopers.com/wp-content/uploads/2021/06/test5.png 302w" sizes="(max-width: 305px) 100vw, 305px" /><img decoding="async" loading="lazy" class="alignnone wp-image-14658" src="https://www.asapdevelopers.com/wp-content/uploads/2021/06/test6-140x300.png" alt="node js login error" width="307" height="658" srcset="https://www.asapdevelopers.com/wp-content/uploads/2021/06/test6-140x300.png 140w, https://www.asapdevelopers.com/wp-content/uploads/2021/06/test6.png 302w" sizes="(max-width: 307px) 100vw, 307px" /></figure>



<p>It works perfectly! After you finish this guide, your directory should look like this:</p>



<figure class="wp-block-image"><img decoding="async" loading="lazy" class="alignnone" src="https://lh6.googleusercontent.com/rycan7rVcPS6OY0icgW32A1DARqFYLljOEeQKtGtbJUmmtD3t8cebgi4xbbp5Or28yvaY5WOD5fbcuJwm4A1m8JnRPqC_O1uBU8qOmsTIfbZMsvMep2MMhhCJMSEbOikrzntXDXw" alt="react native" width="295" height="1092" /></figure>



<p>You have reached the end of this guide. Now you have a React Native frontend login application working with a Node.js backend. Congratulations!</p>



<h2><strong>Challenge: Develop tests for your React Native App </strong></h2>



<p>We encourage you to test your application on both sides to ensure it is working as expected. Testing is an essential part of any development process and you should start incorporating it into your projects from the beginning. </p>



<p>You can start with the frontend side, testing components in the way a user would use them. We recommend using <a href="https://testing-library.com/">React Testing Library</a>. If you haven’t heard about it, you can read the <a href="https://www.asapdevelopers.com/react-testing-library/">article</a> we have written about it.</p>



<h2><strong>Final thoughts on React Native with Node.js backend</strong></h2>



<p>To sum up, both React Native and Node.js are powerful tools that share a single programming language: JavaScript. With their separate advantages combined, you have built an incredibly strong mobile application. We have proven how straightforward it is to get started with any of them, even if you have not seen it before. We hope this guide gives you a starting point to start creating mobile apps with more functionalities.</p>



<p><a href="https://github.com/agustinfece/login"><strong>GitHub</strong></a></p>

		<div id="fws_693975d1a8c9b"  data-column-margin="default" data-midnight="dark"  data-bg-mobile-hidden="" class="wpb_row vc_row-fluid vc_row standard_section "  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-overlay="false"><div class="inner-wrap"><div class="row-bg"  style=""></div></div><div class="row-bg-overlay" ></div></div><div class="col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding"  data-t-w-inherits="default" data-border-radius="none" data-shadow="none" data-border-animation="" data-border-animation-delay="" data-border-width="none" data-border-style="solid" data-border-color="" data-bg-cover="" data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-hover-bg="" data-hover-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" ><div class="column-bg-overlay-wrap" data-bg-animation="none"><div class="column-bg-overlay"></div></div>
			<div class="wpb_wrapper">
				<a class="nectar-button large regular accent-color has-icon  wpb_animate_when_almost_visible wpb_bounce bounce regular-button"  style="margin-top: 40px; color: #ffffff; "  href="https://www.asapdevelopers.com/react-native-san-francisco/" data-color-override="false" data-hover-color-override="false" data-hover-text-color-override="#fff"><span>React Native Development Company</span><i style="color: #ffffff;"  class="icon-button-arrow"></i></a>
			</div> 
		</div>
	</div> 
</div></div>
<p>The post <a rel="nofollow" href="https://www.asapdevelopers.com/build-a-react-native-login-app-with-node-js-backend/">Build a React Native Login app with Node.js Backend</a> appeared first on <a rel="nofollow" href="https://www.asapdevelopers.com">asap developers</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>React native ‌orientation‌ locker and ‌landscape‌ orientation</title>
		<link>https://www.asapdevelopers.com/react-native-video-with-landscape-orientation/</link>
		
		<dc:creator><![CDATA[Joaquin Viera]]></dc:creator>
		<pubDate>Mon, 25 Jan 2021 19:46:42 +0000</pubDate>
				<category><![CDATA[React Native]]></category>
		<guid isPermaLink="false">https://www.asapdevelopers.com/?p=14172</guid>

					<description><![CDATA[<p>React Native Video With Landscape Orientation In a previous post, we explained how to add and set up a video player in your React Native application. This time around, we’ll...</p>
<p>The post <a rel="nofollow" href="https://www.asapdevelopers.com/react-native-video-with-landscape-orientation/">React native ‌orientation‌ locker and ‌landscape‌ orientation</a> appeared first on <a rel="nofollow" href="https://www.asapdevelopers.com">asap developers</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>React Native Video With Landscape Orientation</h2>
<p align="left">In a <a href="https://www.asapdevelopers.com/react-native-video-media-controls-example/"><span style="color: #1155cc;"><u>previous post</u></span></a>, we explained how to add and set up a video player in your React Native application. This time around, we’ll show you how to add full-screen landscape orientation to your video player and use the library React Native Orientation Locker.</p>
<h2><b>Before we start with React Native Video </b></h2>
<p align="left">Keep in mind that the project files are in the initial post mentioned above. This post will pick up from where we left off on that article. We will use a new library to control our mobile screen orientation called ‘<b>React Native Orientation Locker</b>’.</p>
<p align="left"><b>Note: </b>This demo was made with React Native version 63.3. The following setup applies only to React Native versions higher than 60.0. The setup instructions for older versions can be found on the official library documentation.</p>
<p><img decoding="async" loading="lazy" class="aligncenter wp-image-14177 size-medium" src="https://www.asapdevelopers.com/wp-content/uploads/2021/01/flip-289x300.png" alt="React Native Orientation Locker - Video Flip " width="289" height="300" srcset="https://www.asapdevelopers.com/wp-content/uploads/2021/01/flip-289x300.png 289w, https://www.asapdevelopers.com/wp-content/uploads/2021/01/flip.png 565w" sizes="(max-width: 289px) 100vw, 289px" /></p>
<h2><b>Let’s setup Orientation Locker</b></h2>
<p>&nbsp;</p>
<p align="left">First of all, you’ll need to add the library to the project using one of the following commands in your terminal:</p>
<ul>
<li>
<p align="left">yarn add react-native-orientation-locker</p>
</li>
<li>
<p align="left">npm i react-native-orientation-locker</p>
</li>
</ul>
<p align="left">For iOS devices, you’ll need to run the following command on Mac inside the ‘iOS’ project folder:</p>
<ul>
<li>
<p align="left">pod install</p>
</li>
</ul>
<p align="left">Next, you&#8217;ll need to manually modify some Android and iOS files to add some lines of code following the instructions below.</p>
<h2 class="western"><b>iOS setup</b></h2>
<p align="left">For iOS, you will need to modify the following file:</p>
<ul>
<li>
<h3><strong>AppDelegate.m</strong></h3>
</li>
</ul>
<p><script src="https://gist.github.com/joaquin-viera/946b697d774466f3a6ea4a2c922b8380.js"></script><br />
<b>Link:</b> <a href="https://gist.github.com/joaquin-viera/946b697d774466f3a6ea4a2c922b8380"><span style="font-weight: 400;">AppDelegate.m</span></a></p>
<p>&nbsp;</p>
<h2 class="western"><b>Android setup</b></h2>
<p>For Android, you will need to modify the following file:</p>
<ul>
<li>
<h3><strong>MainActivity.java</strong></h3>
</li>
</ul>
<p><script src="https://gist.github.com/joaquin-viera/fc77932532eea6fe42e9fc0a8d02eaaa.js"></script><br />
<b>Link:</b> <a href="https://gist.github.com/joaquin-viera/fc77932532eea6fe42e9fc0a8d02eaaa"><span style="font-weight: 400;">MainActivity.java</span></a></p>
<p>&nbsp;</p>
<ul>
<li class="western">
<h3><strong>MainApplication.java</strong></h3>
</li>
</ul>
<p align="left"><b>Note</b>: these changes should appear <u>automatically</u>, but if they don’t, you should make them yourself.</p>
<p><script src="https://gist.github.com/joaquin-viera/d89b1a6c4acd5659c3b1f1f14b040c67.js"></script><br />
<b>Link:</b> <a href="https://gist.github.com/joaquin-viera/d89b1a6c4acd5659c3b1f1f14b040c67"><span style="font-weight: 400;">MainApplication.java</span></a></p>
<p>&nbsp;</p>
<h2><b>Final changes</b></h2>
<p align="left">Now it’s time to make some changes to the <b>VideoPlayer.js</b> file.</p>
<p align="left">It should look something like this:</p>
<p><script src="https://gist.github.com/joaquin-viera/bd864134dd0f3b7c88faf2f9a0536f32.js"></script><br />
<b>Link:</b> <a href="https://gist.github.com/joaquin-viera/bd864134dd0f3b7c88faf2f9a0536f32"><span style="font-weight: 400;">VideoPlayer.js</span></a></p>
<p align="left">As you can see, there is a new useState hook to check if the video player is in full-screen mode. The ‘onFullScreen’ function will be triggered when the user presses the full-screen button or when they exit full-screen mode.</p>
<p align="left">Finally, some styles must be added to fix the video player view on full-screen mode. These styles must also be taken into account when our React Native application has a top or bottom navigation bar, or both.</p>
<h2><b>Player preview with and without React Native Video landscape orientation</b></h2>
<h2><b><img decoding="async" loading="lazy" class="aligncenter wp-image-14178 size-medium" src="https://www.asapdevelopers.com/wp-content/uploads/2021/01/preview-300x184.png" alt="react native video example" width="300" height="184" srcset="https://www.asapdevelopers.com/wp-content/uploads/2021/01/preview-300x184.png 300w, https://www.asapdevelopers.com/wp-content/uploads/2021/01/preview-1024x629.png 1024w, https://www.asapdevelopers.com/wp-content/uploads/2021/01/preview-768x472.png 768w, https://www.asapdevelopers.com/wp-content/uploads/2021/01/preview.png 1411w" sizes="(max-width: 300px) 100vw, 300px" /></b></h2>
<h2><b>Bonus: lock your React Native Video orientation on portrait mode</b></h2>
<p align="left">Sometimes, you may want to keep your application from being used in landscape mode. This can be easily done by taking advantage of the ‘<b>React Native Orientation Locker’ </b>library we installed before.</p>
<p align="left">In iOS, however, the best way of doing this is with Xcode, so we will see both alternatives.</p>
<h2 class="western"><b>Portrait mode for Android devices</b></h2>
<p align="left">On the <b>App.js</b> file, you need to import the <b>React Native Orientation Locker </b>library and then import the following line of code:</p>
<ul>
<li>
<p align="left">Orientation.lockToPortrait();</p>
</li>
</ul>
<p align="left">That’s it, the file should look something like this:</p>
<p><script src="https://gist.github.com/joaquin-viera/0b0a1e15022950ce6f48e265e28c65b0.js"></script><br />
<b>Link:</b> <a href="https://gist.github.com/joaquin-viera/0b0a1e15022950ce6f48e265e28c65b0"><span style="font-weight: 400;">App.js</span></a></p>
<h2 class="western"><b>Portrait mode for iOS devices</b></h2>
<p align="left">You don’t need to install anything to do this, just follow these steps:</p>
<ul>
<li>
<p align="left">Open the project on Xcode</p>
</li>
<li>
<p align="left">Go to the project’s main folder</p>
</li>
<li>
<p align="left">Go to ‘general’</p>
</li>
<li>
<p align="left">Under ‘Deployment Info’ leave ‘Portrait’ checked</p>
</li>
</ul>
<p align="left">Run the application again from Xcode and the changes should be added.</p>
<h2><b>Final thoughts on React Native Landscape</b></h2>
<p align="left">Adding a landscape orientation to your video player drawer is simple thanks to the <b>React Native Orientation Locker </b>library. With this library, you can also set your entire project application to portrait mode or get full control over when you want something to be seen in landscape orientation.</p>
<p align="left">
		<div id="fws_693975d1a9cb6"  data-column-margin="default" data-midnight="dark"  data-bg-mobile-hidden="" class="wpb_row vc_row-fluid vc_row standard_section "  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-overlay="false"><div class="inner-wrap"><div class="row-bg"  style=""></div></div><div class="row-bg-overlay" ></div></div><div class="col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding"  data-t-w-inherits="default" data-border-radius="none" data-shadow="none" data-border-animation="" data-border-animation-delay="" data-border-width="none" data-border-style="solid" data-border-color="" data-bg-cover="" data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-hover-bg="" data-hover-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" ><div class="column-bg-overlay-wrap" data-bg-animation="none"><div class="column-bg-overlay"></div></div>
			<div class="wpb_wrapper">
				<a class="nectar-button large regular accent-color has-icon  wpb_animate_when_almost_visible wpb_bounce bounce regular-button"  style="margin-top: 40px; color: #ffffff; "  href="https://www.asapdevelopers.com/react-native-san-francisco/" data-color-override="false" data-hover-color-override="false" data-hover-text-color-override="#fff"><span>React Native App Development Company</span><i style="color: #ffffff;"  class="icon-button-arrow"></i></a>
			</div> 
		</div>
	</div> 
</div></div>
<p>The post <a rel="nofollow" href="https://www.asapdevelopers.com/react-native-video-with-landscape-orientation/">React native ‌orientation‌ locker and ‌landscape‌ orientation</a> appeared first on <a rel="nofollow" href="https://www.asapdevelopers.com">asap developers</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Cross-platform frameworks vs. native code development</title>
		<link>https://www.asapdevelopers.com/cross-platform-frameworks-vs-native-code-development/</link>
		
		<dc:creator><![CDATA[Pablo Giampedraglia]]></dc:creator>
		<pubDate>Mon, 23 Nov 2020 19:12:16 +0000</pubDate>
				<category><![CDATA[Flutter]]></category>
		<category><![CDATA[Mobile Apps]]></category>
		<category><![CDATA[React Native]]></category>
		<guid isPermaLink="false">https://www.asapdevelopers.com/?p=13909</guid>

					<description><![CDATA[<p>Cross-platform frameworks vs. native code development Native apps have long been held at a higher standard than cross-platform apps. However, the truth is cross-platform frameworks development has revolutionized the mobile...</p>
<p>The post <a rel="nofollow" href="https://www.asapdevelopers.com/cross-platform-frameworks-vs-native-code-development/">Cross-platform frameworks vs. native code development</a> appeared first on <a rel="nofollow" href="https://www.asapdevelopers.com">asap developers</a>.</p>
]]></description>
										<content:encoded><![CDATA[<h2>Cross-platform frameworks vs. native code development</h2>
<p>Native apps have long been held at a higher standard than cross-platform apps. However, the truth is cross-platform frameworks development has revolutionized the mobile app industry. Thanks to this approach, developers can create native-like apps for devices using different operating systems, like Android or iOS, at the same time. This translates into lower costs, shorter time to market and, therefore, maximized profits. So, is one actually better than the other? What are the main differences? And what are your options as a developer? These are some of the questions we’ll cover in this article.</p>
<h2>What are native apps?</h2>
<p>A native app is one that is developed using the language of choice of a given operating system. It’s the traditional way to build apps where <a href="https://www.android.com/">Android</a> apps are built using <a href="https://docs.oracle.com/javase/7/docs/technotes/guides/language/">Java</a> and <a href="https://www.apple.com/ios/ios-14/">iOS</a> apps are developed using <a href="https://developer.apple.com/swift/">Swift</a> or <a href="https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html">Objective-C</a>.</p>
<h2>What are cross-platform apps?</h2>
<p>Cross-platform apps are not necessarily created with the language of choice of a certain operating system. In fact, they can be developed with a variety of frameworks that use the same language and codebase to make the app compatible with multiple operating systems.</p>
<h2>Cross-platform vs. native code development</h2>
<p><img decoding="async" loading="lazy" class="aligncenter wp-image-13927 size-medium" src="https://www.asapdevelopers.com/wp-content/uploads/2020/11/scales-300x200.png" alt="scales - cross-platform frameworks" width="300" height="200" srcset="https://www.asapdevelopers.com/wp-content/uploads/2020/11/scales-300x200.png 300w, https://www.asapdevelopers.com/wp-content/uploads/2020/11/scales-1024x684.png 1024w, https://www.asapdevelopers.com/wp-content/uploads/2020/11/scales-768x513.png 768w, https://www.asapdevelopers.com/wp-content/uploads/2020/11/scales-900x600.png 900w, https://www.asapdevelopers.com/wp-content/uploads/2020/11/scales.png 1417w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>Let’s take a look at the main differences, pros and cons of native and cross-platform development.</p>
<h2><img decoding="async" loading="lazy" class="aligncenter wp-image-13923" src="https://www.asapdevelopers.com/wp-content/uploads/2020/11/table-257x300.png" alt="cross-platform frameworks comparison" width="535" height="624" srcset="https://www.asapdevelopers.com/wp-content/uploads/2020/11/table-257x300.png 257w, https://www.asapdevelopers.com/wp-content/uploads/2020/11/table.png 618w" sizes="(max-width: 535px) 100vw, 535px" /></h2>
<h2>Most popular cross-platform frameworks</h2>
<p>Now that we’ve looked at each option in detail, let’s take a look at some of the most popular cross-platform frameworks. According to <a href="https://insights.stackoverflow.com/survey/2020">Stack Overflow’s 2020 Developer Survey</a>, these are <a href="https://flutter.dev/">Flutter</a>, <a href="https://reactnative.dev/">React Native</a> and <a href="https://docs.microsoft.com/en-us/xamarin/get-started/what-is-xamarin">Xamarin</a>.</p>
<h2>Flutter</h2>
<p><img decoding="async" loading="lazy" class=" wp-image-13678 aligncenter" src="https://www.asapdevelopers.com/wp-content/uploads/2020/10/flutter-logo-300x116.png" alt="Flutter Logo - Flutter Development" width="256" height="99" srcset="https://www.asapdevelopers.com/wp-content/uploads/2020/10/flutter-logo-300x116.png 300w, https://www.asapdevelopers.com/wp-content/uploads/2020/10/flutter-logo-768x297.png 768w, https://www.asapdevelopers.com/wp-content/uploads/2020/10/flutter-logo-1000x389.png 1000w, https://www.asapdevelopers.com/wp-content/uploads/2020/10/flutter-logo.png 1007w" sizes="(max-width: 256px) 100vw, 256px" /></p>
<p>As stated on its website, Flutter is “Google’s portable UI toolkit for building beautiful, natively-compiled applications for <a href="https://flutter.dev/docs">mobile</a>, <a href="https://flutter.dev/web">web</a>, and <a href="https://flutter.dev/desktop">desktop</a> from a single codebase”. Flutter helps you swiftly craft high-quality interfaces for both iOS and Android.<br />
Flutter is not just a framework but a complete SDK, which means it grants users everything they need to create cross-platform apps, such as ready-made widgets, a rendering engine, and testing and integration APIs. The framework works with existing code, is used by developers and organizations around the globe, and is free and open-source.</p>
<p>Flutter also includes widget customization and extensions, its own development language called <a href="https://dart.dev/">Dart</a>, an automated testing toolset, and plenty of debugging tools. Some of the development companies currently using Flutter include Groupon, eBay, Alibaba Group and Capital One. You can learn more about Flutter <a href="https://www.asapdevelopers.com/google-flutter-review/">here</a>.</p>
<h2>React Native</h2>
<p><img decoding="async" loading="lazy" class="size-medium wp-image-12753 aligncenter" src="https://www.asapdevelopers.com/wp-content/uploads/2020/06/react-native-300x103.png" alt="" width="300" height="103" srcset="https://www.asapdevelopers.com/wp-content/uploads/2020/06/react-native-300x103.png 300w, https://www.asapdevelopers.com/wp-content/uploads/2020/06/react-native.png 580w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>React Native is an open-source JavaScript development framework that uses <a href="https://es.reactjs.org/">ReactJS</a> to create user interfaces for iOS and Android devices. It was developed by Facebook and released in 2013. Facebook not only used it to develop its flagship app, but also others such as Instagram.<br />
With React Native, your JavaScript codebase is compiled to a mobile app nearly indistinguishable from a native iOS app built using Objective-C or a native Android app built using Java. The framework also lets you write modules in other languages such as Swift, <a href="https://www.asapdevelopers.com/python-38-roadmap/">Python</a> and <a href="https://www.cplusplus.com/">C++</a>.</p>
<p>If that wasn’t enough, React Native helps you build your app faster with <a href="https://reactnative.dev/blog/2016/03/24/introducing-hot-reloading">hot reloading</a>. This feature means you reload your app instantly instead of recompiling after making changes and it even lets you run new code while retaining your application state.<br />
You can learn more about React Native <a href="https://www.asapdevelopers.com/6-reasons-why-you-should-start-using-react-native/">here</a>.</p>
<h2>Xamarin</h2>
<p><img decoding="async" loading="lazy" class="aligncenter wp-image-12775 size-medium" src="https://www.asapdevelopers.com/wp-content/uploads/2020/06/BestCrossPlatform05-300x126.jpg" alt="Xamarin - cross-platform frameworks" width="300" height="126" srcset="https://www.asapdevelopers.com/wp-content/uploads/2020/06/BestCrossPlatform05-300x126.jpg 300w, https://www.asapdevelopers.com/wp-content/uploads/2020/06/BestCrossPlatform05.jpg 484w" sizes="(max-width: 300px) 100vw, 300px" /></p>
<p>Xamarin, which is owned by Microsoft, is also open-source and works on the “write once, run anywhere” (<a href="https://whatis.techtarget.com/definition/write-once-run-anywhere-WORA">WORA</a>) model. It uses <a href="https://docs.microsoft.com/en-us/dotnet/csharp/">C#</a> as a single language (which means you don’t have to learn Swift, Objective-C or Java) and harnesses the power of the .NET platform to build native and performant apps for Android, iOS and Windows.</p>
<p>Xamarin can be tested on multiple devices by using cloud services and also includes native API access and native UI support. This framework lets you include Objective-C, Java and C++ libraries, in addition to its considerable collection of class libraries.<br />
Some of the mobile apps created with Xamarin include Azure App, Alaska Airlines and BBVA.</p>
<h2>Final thoughts on Cross-platform frameworks vs. native code</h2>
<p>Both cross-platform and native code development have their pros and cons. At the end of the day, it all comes down to where your priorities lie. If you prefer not to worry about performance and functionality and have the cash and time to spare, native is the way to go. However, if you are short on budget, want your app to hit the market as soon as possible and are not that bothered by prime app performance, cross-platform is the right choice for you. If that’s so, you can take a look at even more cross-platform frameworks <a href="https://www.asapdevelopers.com/best-cross-platform-frameworks/">here</a>.</p>
<div id="fws_693975d1aac65"  data-column-margin="default" data-midnight="dark"  data-bg-mobile-hidden="" class="wpb_row vc_row-fluid vc_row standard_section "  style="padding-top: 0px; padding-bottom: 0px; "><div class="row-bg-wrap" data-bg-animation="none" data-bg-overlay="false"><div class="inner-wrap"><div class="row-bg"  style=""></div></div><div class="row-bg-overlay" ></div></div><div class="col span_12 dark left">
	<div  class="vc_col-sm-12 wpb_column column_container vc_column_container col no-extra-padding"  data-t-w-inherits="default" data-border-radius="none" data-shadow="none" data-border-animation="" data-border-animation-delay="" data-border-width="none" data-border-style="solid" data-border-color="" data-bg-cover="" data-padding-pos="all" data-has-bg-color="false" data-bg-color="" data-bg-opacity="1" data-hover-bg="" data-hover-bg-opacity="1" data-animation="" data-delay="0" >
		<div class="vc_column-inner" ><div class="column-bg-overlay-wrap" data-bg-animation="none"><div class="column-bg-overlay"></div></div>
			<div class="wpb_wrapper">
				<a class="nectar-button large regular accent-color has-icon  wpb_animate_when_almost_visible wpb_bounce bounce regular-button"  style="margin-top: 40px; color: #ffffff; "  href="https://www.asapdevelopers.com/web-mobile-app-san-francisco/" data-color-override="false" data-hover-color-override="false" data-hover-text-color-override="#fff"><span>Web and Mobile App Development Company</span><i style="color: #ffffff;"  class="icon-button-arrow"></i></a>
			</div> 
		</div>
	</div> 
</div></div>
<p>The post <a rel="nofollow" href="https://www.asapdevelopers.com/cross-platform-frameworks-vs-native-code-development/">Cross-platform frameworks vs. native code development</a> appeared first on <a rel="nofollow" href="https://www.asapdevelopers.com">asap developers</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
