<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Orbis Alonzo Gutierrez</title>
    <description>The latest articles on DEV Community by Orbis Alonzo Gutierrez (@orbis25).</description>
    <link>https://dev.to/orbis25</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F456038%2F7866ea3a-fec2-454e-9336-52c310c0783e.jpg</url>
      <title>DEV Community: Orbis Alonzo Gutierrez</title>
      <link>https://dev.to/orbis25</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/orbis25"/>
    <language>en</language>
    <item>
      <title>Swagger en .NET Core, UI y GEN</title>
      <dc:creator>Orbis Alonzo Gutierrez</dc:creator>
      <pubDate>Sun, 27 Sep 2020 00:13:10 +0000</pubDate>
      <link>https://dev.to/orbis25/swagger-en-net-core-ui-y-gen-47ek</link>
      <guid>https://dev.to/orbis25/swagger-en-net-core-ui-y-gen-47ek</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/vFCfEtTWTSY"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;FOLLOW MY CHANEL&lt;/p&gt;

&lt;p&gt;SIGUEME EN MI CANAL&lt;/p&gt;

&lt;p&gt;LINK : &lt;a href="https://www.youtube.com/channel/UCHjyhBUaqk3HFsf7f-TrfXw"&gt;https://www.youtube.com/channel/UCHjyhBUaqk3HFsf7f-TrfXw&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Notificaciones con expo y .Net Core en react-native</title>
      <dc:creator>Orbis Alonzo Gutierrez</dc:creator>
      <pubDate>Sat, 12 Sep 2020 01:37:27 +0000</pubDate>
      <link>https://dev.to/orbis25/notificaciones-con-expo-y-netcore-en-react-native-22fa</link>
      <guid>https://dev.to/orbis25/notificaciones-con-expo-y-netcore-en-react-native-22fa</guid>
      <description>&lt;p&gt;Hola, hoy quiero hablarte de un tema muy importante cuando desarrollamos aplicaciones moviles y efectivamente son &lt;strong&gt;las notificaciones&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Simpre necesitamos ese feedback que nos indique que pasa dentro de nuestra aplicación, se compró un nuevo producto, se agregó un nuevo cliente y entre otras... Son muchas las notificaciones que requerimos y recibimos a diario y por esto es que quiero enseñarte como crear una aplicación con un backend en .netCore y poder recibir esas notificaciones que enviamos en una aplicación desarrollada con &lt;strong&gt;react native&lt;/strong&gt; y &lt;strong&gt;Expo&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Lo primero que vamos a hacer es crear nuestro proyecto de &lt;strong&gt;React native con expo&lt;/strong&gt;; corremos los siguientes comandos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install --global expo-cli

expo init my-project

cd my-project
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En mi caso tendré la siguiente estructura debido a que cree el proyecto con el template de &lt;strong&gt;TypeScript&lt;/strong&gt; pero aplica para &lt;strong&gt;JavaScript&lt;/strong&gt; igual asi que no te preocupes 😁.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ATlq_PBF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/38229144/92526943-a6c1e900-f1fc-11ea-844e-faa4089cfbd3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ATlq_PBF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/38229144/92526943-a6c1e900-f1fc-11ea-844e-faa4089cfbd3.png" alt="Screenshot_2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora abrimos nuestro &lt;strong&gt;App.tsx&lt;/strong&gt; o &lt;strong&gt;App.js&lt;/strong&gt; y agregamos el siguiente codigo a nuesto componente App para sacar el token correspondiente a nuestro dispositivo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//metodo que genera y registra el token unico
async function registerForPushNotificationsAsync() {
  let token;
  if (Constants.isDevice) {
    const { status: existingStatus } = await Permission.getAsync(
      Permission.NOTIFICATIONS
    );
    let finalStatus = existingStatus;
    if (existingStatus !== "granted") {
      const { status } = await Permission.askAsync(Permission.NOTIFICATIONS);
      finalStatus = status;
    }
    if (finalStatus !== "granted") {
      alert("Failed to get push token for push notification!");
      return;
    }
    token = (await Notifications.getExpoPushTokenAsync()).data;
    console.log(token);
  } else {
    alert("Must use physical device for Push Notifications");
  }

  if (Platform.OS === "android") {
    Notifications.setNotificationChannelAsync("default", {
      name: "default",
      importance: Notifications.AndroidImportance.MAX,
      vibrationPattern: [0, 250, 250, 250],
      lightColor: "#FF231F7C",
    });
  }

  console.log(token);
  alert(token); //mostramos el token
  return token;
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora en nuestro hook &lt;strong&gt;useEffect&lt;/strong&gt; llamamos dicha función para obtener el token que posteriormente necesitaremos para enviarle las notificaciones desde nuestro backend en &lt;strong&gt;.netCore&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  useEffect(() =&amp;gt; {
    (async () =&amp;gt; {
      registerForPushNotificationsAsync();
    })();
  }, []);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Luego corremos nuestra app y veremos el token en ella, ejemplo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tQuEyLrM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/38229144/92529354-be9b6c00-f200-11ea-9f36-5eb35e959981.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tQuEyLrM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/38229144/92529354-be9b6c00-f200-11ea-9f36-5eb35e959981.png" alt="Screenshot_2020-09-08-17-21-45"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Listo tenemos la primera parte funcionando, todo va excelente!&lt;/p&gt;

&lt;h2&gt;
  
  
  Aplicación en .netCore
&lt;/h2&gt;

&lt;p&gt;En este ejemplo utilizaremos una aplicación de consola, pero puedes implementarlo en una api, web app etc. aplica para cada caso solo depende de tu necesidad. (Lo correcto seria que ese token se lo asignemos a nuesto usuario en la db 😎 para posteriormente llamar esa información de alli. Pero para ilustrar el ejemplo lo voy a hacer &lt;strong&gt;Hard code&lt;/strong&gt;)&lt;/p&gt;

&lt;p&gt;Creamos nuestra aplicación de consola en .netCore (OJO sirve para cualquier tipo de proyecto en .netCore).&lt;/p&gt;

&lt;p&gt;Paso 2: Instalar el siguiente nugget package : &lt;strong&gt;Expo.Server.SDK&lt;/strong&gt; &lt;br&gt;
y luego tendremos que hacer un codigo como el siguiente:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--q0rwMaTV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/38229144/92984217-fc0d2d00-f47e-11ea-807a-b45aea726373.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--q0rwMaTV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://user-images.githubusercontent.com/38229144/92984217-fc0d2d00-f47e-11ea-807a-b45aea726373.png" alt="Screenshot_2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Listo solo tienes que correr el proyecto y llegara tu notificación
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Tip&lt;/strong&gt;: Lo correcto seria que guardaramos estos tokens asignados a los usuarios de la app en nuestra db y luego llamaramos esos token con alguna logica que necesitemos implementar.&lt;/p&gt;

&lt;p&gt;Espero que sirva, recuerda dejar tu like y tus dudas en los comentarios; aqui debajo te dejo los repositorios.&lt;/p&gt;

&lt;p&gt;Repositorio NetCore =&amp;gt; &lt;a href="https://github.com/Orbis25/expo-notifications-netCore"&gt;https://github.com/Orbis25/expo-notifications-netCore&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repositorio React-native-app =&amp;gt; &lt;a href="https://github.com/Orbis25/react-native-ui-apps/tree/master/expo-notifications"&gt;https://github.com/Orbis25/react-native-ui-apps/tree/master/expo-notifications&lt;/a&gt;&lt;/p&gt;

</description>
      <category>netcore</category>
      <category>reactnative</category>
      <category>expo</category>
      <category>exponotifications</category>
    </item>
    <item>
      <title>Organiza tu Startup class</title>
      <dc:creator>Orbis Alonzo Gutierrez</dc:creator>
      <pubDate>Fri, 04 Sep 2020 17:22:44 +0000</pubDate>
      <link>https://dev.to/orbis25/organiza-tu-startup-class-1fd5</link>
      <guid>https://dev.to/orbis25/organiza-tu-startup-class-1fd5</guid>
      <description>&lt;p&gt;Todo el tiempo necesitamos que nuestro codigo, además de que funcione sea entendible para los demas programadores.&lt;/p&gt;

&lt;p&gt;Algo muy común es ver nuestra &lt;strong&gt;startup class&lt;/strong&gt; o &lt;strong&gt;startup.cs&lt;/strong&gt; un poco revuelta y aveces tener muchos servicios registrados, implementaciones, db contexts, configuraciones no es muy conveniente tenerlo todo alli, suele ser mucho codigo poco separado, poco organizado y un programador que se dirija a revisar tu codigo, para posteriormente realizar algún cambio puede ser un poco tedioso.&lt;/p&gt;

&lt;h2&gt;
  
  
  Crea metodos de extension
&lt;/h2&gt;

&lt;p&gt;Si creas metodos de extension de tu clase startup puedes tener el codigo mas organizado y la persona que necesite ir a tu codigo solo tendrá que ir a dichas implementaciones, por ejemplo : &lt;/p&gt;

&lt;p&gt;Esta seria mi clase startup con metodos de extension donde solo los estoy llamando y no escribiendo toda la logica o configuración de esta en el &lt;strong&gt;ConfigureServices&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F38229144%2F92267626-44dd4880-eeb7-11ea-951d-3094e9235dce.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F38229144%2F92267626-44dd4880-eeb7-11ea-951d-3094e9235dce.png" alt="Screenshot_2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Crea una clase StartupExtension.cs
&lt;/h2&gt;

&lt;p&gt;En esta clase es preciso que sea &lt;strong&gt;static&lt;/strong&gt; para que pueda ser llamada en la clase &lt;strong&gt;startup&lt;/strong&gt;, con la siguiente estructura donde definas los metodos de extensión de la misma (Lamento los borrones 😁Cuestiones de seguridad). Ejemplo : &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F38229144%2F92268052-1318b180-eeb8-11ea-9327-c1868513eb24.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fuser-images.githubusercontent.com%2F38229144%2F92268052-1318b180-eeb8-11ea-9327-c1868513eb24.png" alt="Screenshot_3"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Manten la organización de tus implementaciones
&lt;/h2&gt;

&lt;p&gt;Recuerda que la programación es lineal, ten cuidado como organizes tus servicios o implementaciones dentro de metodo &lt;strong&gt;ConfigureServices&lt;/strong&gt; y tambien en el &lt;strong&gt;middleware&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sigue extendiendo 🐱‍💻
&lt;/h2&gt;

&lt;p&gt;Si tu &lt;strong&gt;middleware&lt;/strong&gt; necesita tener muchas implementaciones sigue extendiendo su funciones, por ejemplo cuando necesites hacer un log de los request que entren a tu api o proyecto web, lo correcto seria que llamaras esa implementación en tu &lt;strong&gt;middleware&lt;/strong&gt; porque allí es donde pasan todos los request de tu applicación, asi que para estos casos muy especificos cuando tengas mucha logica o mucha configuración extiendelo!&lt;/p&gt;

&lt;p&gt;Si te sirvio, no olvides dejar tu comentario y dar like a la publicación.&lt;/p&gt;

&lt;p&gt;Sigueme en GitHub =&amp;gt; &lt;a href="https://github.com/Orbis25" rel="noopener noreferrer"&gt;https://github.com/Orbis25&lt;/a&gt;&lt;/p&gt;

</description>
      <category>netcore</category>
      <category>net</category>
      <category>cleanarquitecture</category>
      <category>bestpractices</category>
    </item>
  </channel>
</rss>
