none
Xamarin Abrir um vídeo no youtube RRS feed

  • Discussão Geral

  • Oi amigos, gostaria de construir um app bem simples, na verdade uma funcionalidade dele. 

    Estou usando o VS 2019, Xamarin forms

    Quero que quando um usuário clicar no botão "ver vídeo"  o navegador, ou app do youtube abra e comece a rodar o vídeo. Como seria o código para esse botão? 

    é isso, obrigado amigos :)


    domingo, 22 de agosto de 2021 16:06

Todas as Respostas

  • Sebastião Junio,

        É um pouco complicado, mas funciona. Vou tentar explicar com riqueza de detalhes.

        * 1º) É preciso criar um arquivo dentro do projeto principal que irá enviar a herança de interface para cada Sistema Operacional (isso é preciso pelo motivo de cada sistema operacional tem uma forma de abrir a página [veja o RETURN de cada interface S.O.]):
      Crie também uma pasta chamada "Navegador" (ou o nome que você quiser) dentro do projeto "Seu App" (o nome do seu projeto) para separar o código.

    ------------------------------
    Dentro do Main Project - IBaseUrl.cs
    ------------------------------

    namespace SeuApp.Navegador
    {
        public interface IBaseUrl
        {
            string Get();
        }
    }



    ------------------------------

        * 2º) Agora temos que criar três classes que herdarão a interface "IBaseUrl" dentro da raiz de cada S.O. (UWP, Android e iOS):

    ------------------------------
    UWP - BaseUrl.cs
    ------------------------------

    using SeuApp.Navegador;
    
    [assembly: Xamarin.Forms.Dependency(typeof(AppGallery.UWP.BaseUrl))]
    namespace SeuApp.UWP
    {
        public class BaseUrl : IBaseUrl
        {
            public string Get()
            {
                return "ms-appx-web:///Site/";
            }
        }
    }



    ------------------------------
    Android - BaseUrl_Android.cs
    ------------------------------

    using SeuApp.Navegador;
    
    [assembly: Xamarin.Forms.Dependency(typeof(AppGallery.Droid.BaseUrl_Android))]
    namespace SeuApp.Droid
    {
        public class BaseUrl_Android : IBaseUrl
        {
            public string Get()
            {
                return "file:///android_asset/";
            }
        }
    }



    ------------------------------
    iOS - BaseUrl_iOS.cs
    ------------------------------

    using SeuApp.Navegador;
    using Foundation;
    
    [assembly: Xamarin.Forms.Dependency(typeof(AppGallery.iOS.BaseUrl_iOS))]
    namespace SeuApp.iOS
    {
        public class BaseUrl_iOS : IBaseUrl
        {
            public string Get()
            {
                return NSBundle.MainBundle.BundlePath;
            }
        }
    }

    ------------------------------

    * 3º) Aqui temos um exemplo no projeto principal mostrando como usar dentro de um <StackLayout> no arquivo ".xaml" e seu respectivo code behind ".xaml.cs" a chamada para a página (na internet ou na intranet):
          Tem alguns comentários dentro do código.
          É chamada a página do Bing (no .xaml) e também um código HTML inserido dentro do code behind (no .xaml.cs).
          Observações: É preciso habilitar a internet (pedir acesso) no:

          - UWP - (Manifest / ABA Recursos - Colocar check para "Habilitar Internet");
          - Android - (Propridades / Manifesto do Android) e Adicionar o Android Manifest dentro do Aplication Android:usesCleartextTraffic='true';
          - iOS - Desabilitar o ATS (App Transport Security) no arquivo "info.plisr";


    * PARA O UWP (Universal Windows Platform):



    * DENTRO DA PASTA PROPERTIES DO ANDROID:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.SEUNOME.XamarinFormsGallery" android:installLocation="preferExternal">
    	<uses-sdk android:minSdkVersion="24" android:targetSdkVersion="30" />
    	<application android:usesCleartextTraffic="true" android:label="Xamarin Forms Gallery" android:theme="@style/MainTheme" android:icon="@mipmap/ic_launcher"></application>
    	<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    </manifest>




    * PARA O iOS:

    ---------------------------------------------------------

    iOS - POR FAVOR, LEIA ESTE DOCUMENTO:

    Segurança de transporte de aplicativo no Xamarin.iOS
    13/06/2017
    9 minutos para o fim da leitura
    O ATS (App Transport Security) impõe conexões seguras entre recursos da Internet (como o servidor de back-end do aplicativo) e seu aplicativo.

    https://docs.microsoft.com/pt-br/xamarin/ios/app-fundamentals/ats
    ---------------------------------------------------------

    * ATENÇÃO: Abra o arquivo "info.plist" com um o "ABRIR COM" editor de texto XML ou use o "Generic Plist Editor" (interface gráfica).

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    	<key>UIDeviceFamily</key>
    	<array>
    		<integer>1</integer>
    		<integer>2</integer>
    	</array>
    	<key>UISupportedInterfaceOrientations</key>
    	<array>
    		<string>UIInterfaceOrientationPortrait</string>
    		<string>UIInterfaceOrientationLandscapeLeft</string>
    		<string>UIInterfaceOrientationLandscapeRight</string>
    	</array>
    	<key>UISupportedInterfaceOrientations~ipad</key>
    	<array>
    		<string>UIInterfaceOrientationPortrait</string>
    		<string>UIInterfaceOrientationPortraitUpsideDown</string>
    		<string>UIInterfaceOrientationLandscapeLeft</string>
    		<string>UIInterfaceOrientationLandscapeRight</string>
    	</array>
    	<key>MinimumOSVersion</key>
    	<string>8.0</string>
    	<key>CFBundleDisplayName</key>
    	<string>Xamarin Forms Gallery</string>
    	<key>CFBundleIdentifier</key>
    	<string>com.fabioingenito.XamarinFormsGallery</string>
    	<key>CFBundleVersion</key>
    	<string>1.0</string>
    	<key>UILaunchStoryboardName</key>
    	<string>LaunchScreen</string>
    	<key>CFBundleName</key>
    	<string>AppGallery</string>
    	<key>XSAppIconAssets</key>
    	<string>Assets.xcassets/Icone.appiconset</string>
    	<key>NSAppTransportSecurity</key>
    	<dict>
    		<key>NSAllowsArbitraryLoads</key>
    		<true/>
    	</dict>
    </dict>
    </plist>

    ------------------------------
    * 3.1) - Navegador.xaml
    ------------------------------

    <?xml version="1.0" encoding="utf-8" ?>
    <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
                 xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
                 Padding="10"
                 x:Class="SeuApp.Navegador">
        <ContentPage.Content>
            <ScrollView>
                <StackLayout>
                    <Label Text="WebView" />
                    <Label Text="Propriedades: Source(URL, HTML, HTML de um arquivo), CanGoBack, CanGoForward " />
                    <Label Text="Métodos: GoBack, GoForaward, Reload" />
                    <Label Text="Eventos: Navigated, Navigating" />
                    <Label Text="Observações: Habilitar internet no Android e UWP, desabilitar o ATS no info.plisr, Adicionar o Android Manifest dentro do Aplication Android:usesCleartextTraffic='true'" />
    
                    <Frame BorderColor="gray" Padding="1" IsVisible="true">
                        <WebView x:Name="WebView1" Source="https://www.bing.com/" HorizontalOptions="FillAndExpand" HeightRequest="300" />
                    </Frame>
    
                    <Frame Margin="0, 20, 0, 0" BorderColor="gray" Padding="1" IsVisible="true">
                        <WebView x:Name="WebView2" HorizontalOptions="FillAndExpand" HeightRequest="300" />
                    </Frame>
    
                    <Frame Margin="0, 20, 0, 0"  BorderColor="Gray" Padding="5">
                        <StackLayout>
                            <Label x:Name="LblUrl" Text="URL" HorizontalTextAlignment="Center" FontSize="18" />
                            <StackLayout Orientation="Horizontal">
                                <Button Text="Voltar" Clicked="BotaoVoltar" BackgroundColor="#F2F2F2" HorizontalOptions="FillAndExpand" />
                                <Button Text="Atualizar" Clicked="BotaoAtualizar" BackgroundColor="#F2F2F2" HorizontalOptions="FillAndExpand" />
                                <Button Text="Próximo" Clicked="BotaoProximo" BackgroundColor="#F2F2F2" HorizontalOptions="FillAndExpand" />
                            </StackLayout>
                        </StackLayout>
                    </Frame>
                    
                    <Frame Margin="0, 20, 0, 0"  BorderColor="gray" Padding="1" IsVisible="true">
                        <WebView Navigated="Carregado" Navigating="Carregando" x:Name="WebView3" HorizontalOptions="FillAndExpand" HeightRequest="300" />
                    </Frame>
    
                    <Frame Margin="0, 20, 0, 0"  BorderColor="Gray" Padding="5">
                        <Label x:Name="LblStatus" />
                    </Frame>
                </StackLayout>
            </ScrollView>
        </ContentPage.Content>
    </ContentPage>


    ------------------------------
    * 3.2) - Navegador.xaml.cs
    ------------------------------

    using System;
    using System.IO;
    using Xamarin.Forms;
    using Xamarin.Forms.Xaml;
    
    namespace AppGallery.XamarinForms.Controles.NavegadorControle
    {
        [XamlCompilation(XamlCompilationOptions.Compile)]
        public partial class Navegador : ContentPage
        {
            public Navegador()
            {
                InitializeComponent();
    
                HtmlWebViewSource webViewHtmlSource = new HtmlWebViewSource
                {
                    Html =
                    @"<html>
                        <body>
                        <h1>Eu uma página</h1>
                        <h2>Dentro do WebView</h2>
                        <p>
                            Este é um teste do nosso WebView renderizando HTML e <span style='color: red; text-decoration: underline; font-weight: bold'>CSS</span>.
                        </p>
                        </body>
                    </html>"
                };
    
                WebView2.Source = webViewHtmlSource;
    
                // É possível carregar aquivos...
    
                UrlWebViewSource endereco = new UrlWebViewSource();
                string BaseURL = DependencyService.Get<IBaseUrl>().Get();
    
                endereco.Url = Path.Combine(BaseURL, "index.html");
    
                //DependencyService - Xamarin.Forms - Caminho onde se encontra Arquivos do Site.
                WebView3.Source = endereco;
            }
    
            private void BotaoVoltar(object sender, EventArgs e)
            {
                if (WebView3.CanGoBack)
                {
                    WebView3.GoBack();
                }
            }
    
            private void BotaoAtualizar(object sender, EventArgs e)
            {
                WebView3.Reload();
            }
    
            private void BotaoProximo(object sender, EventArgs e)
            {
                if (WebView3.CanGoForward)
                {
                    WebView3.GoForward();
                }
            }
    
            private void Carregando(object sender, WebNavigatingEventArgs e)
            {
                LblStatus.Text = "Carregando...";
            }
    
            private void Carregado(object sender, WebNavigatedEventArgs e)
            {
                LblStatus.Text = "Carregado!";
                LblUrl.Text = e.Url;
            }
        }
    }


    ------------------------------


       Tomara que eu tenha entendido sua pergunta e seja exatamente isso que você deseja.
       Por favor, se gostou não esqueça de me pontuar... isso é muito importante para mim.

    []'s,
    Fabio I.

    • Editado Fabio I domingo, 22 de agosto de 2021 22:39
    domingo, 22 de agosto de 2021 21:28
  • @Fabio 

    Muito obrigado meu amigo, vou testar aqui valeu :) 

    domingo, 22 de agosto de 2021 22:07
  • Sebastião,

         Basicamente é a mesma coisa para o YT, basta colocar o caminho completo do Link.
         Depois escreva aqui se funcionou e coloque a minha resposta como a correta.

         Outra coisa... para apontar corretamente os créditos... este exemplo acima eu fiz neste curso:

    --------------------------------------------------------------------

    Xamarin Forms 2020 - Apps para Android, iOS e UWP
    Neste curso ensino a construir aplicativos moveis nativos com a tecnologia Xamarin. Vamos aprender a teoria e a pratica.
    Criado por: Elias Ribeiro Da Silva Costa
    Última atualização em 8/2021
    Português

    https://www.udemy.com/course/xamarin-forms-2020-apps-para-android-ios-e-uwp/

    --------------------------------------------------------------------

        Caso queira fazer eu recomendo, mas ANTES espere uma promoção bacana (descontão da Udemy) e também espere uma atualização, pois o Xamarin 5.0 (mais recente) teve MUITAS mudanças deixando muito código antigo completamente obsoleto.

    Valew!
    []'s,
    Fabio I.

    • Editado Fabio I domingo, 22 de agosto de 2021 23:16
    domingo, 22 de agosto de 2021 23:02
  • Sebastião,

         Basicamente é a mesma coisa para o YT, basta colocar o caminho completo do Link.
         Depois escreva aqui se funcionou e coloque a minha resposta como a correta.

         Outra coisa... para apontar corretamente os créditos... este exemplo acima eu fiz neste curso:

    --------------------------------------------------------------------

    Xamarin Forms 2020 - Apps para Android, iOS e UWP
    Neste curso ensino a construir aplicativos moveis nativos com a tecnologia Xamarin. Vamos aprender a teoria e a pratica.
    Criado por: Elias Ribeiro Da Silva Costa
    Última atualização em 8/2021
    Português

    https://www.udemy.com/course/xamarin-forms-2020-apps-para-android-ios-e-uwp/

    --------------------------------------------------------------------

        Caso queira fazer eu recomendo, mas ANTES espere uma promoção bacana (descontão da Udemy) e também espere uma atualização, pois o Xamarin 5.0 (mais recente) teve MUITAS mudanças deixando muito código antigo completamente obsoleto.

    Valew!
    []'s,
    Fabio I.

    Opa mais uma vez muito obrigado amigo, sim esse curso é muito bom, eu to fazendo o de 2021, um amigo meu pagou pelo curso e baixou ele e me deu, mas eu ainda quero fazê-lo para ter o certificado :) 

    Vlw mesmo, forte abraço

    segunda-feira, 23 de agosto de 2021 12:08
  • Sebastião,

        Uma pergunta!
        Eu estou com uma dificuldade para subir meu software na loja Android.
        Por acaso você manja disto? Eu postei esta pergunta aqui:

    -----------------------------------------------------
    Xamarin atualizar aplicativo na loja Android RRS feed

    https://social.msdn.microsoft.com/Forums/pt-BR/d0190573-8f6f-4909-ba50-d1a8e1a3b07e/xamarin-atualizar-aplicativo-na-loja-android?forum=vscsharppt
    -----------------------------------------------------

        Obrigado por me pontuar.

    []'s,
    Fabio I.

    segunda-feira, 23 de agosto de 2021 16:02
  • oi Fábio, ol eu to bemmmm no comecinho também, nunca publiquei nada 

    porém esse vídeo aqui explica

    https://www.youtube.com/watch?v=fkBRXzotbzw 

    esse outro ensina como gerar o apk

    https://www.youtube.com/watch?v=bDq7ULngyMc

    e para completar pode ser interessante este

    https://www.youtube.com/watch?v=mYh_I7xwb9A

     porém que nem te falei, nunca publiquei, mas vou acompanhar seu post, pode ser uma dúvida minha no futuro

    quarta-feira, 25 de agosto de 2021 10:53
  • Sebastião,

        Obrigado pela informação. Se você colocar no post que eu criei posso te pontuar.

    []'s,
    Fabio I.

    quarta-feira, 25 de agosto de 2021 21:11