Android

5 mai, 2025

Como fazer o link chamar seu aplicativo?

Publicidade

Olá pessoal, meu nome é Mauricio Junior e hoje eu vou falar de um problema que eu tive para fazer o meu aplicativo abrir um link do e-mail ou de um website. Sim, eu precisava abrir um link diretamente do meu website ou e-mail chamando o aplicativo instalado no device do cliente ou usuário.

Nesse exemplo passo a passo eu mostro, usando a tecnologia MAUI e linguagem C# da Microsoft.

Problema

  • Dificuldades de fazer um link chamar meu aplicativo;
  • Dificuldades de pegar os parâmetros passados pelo link

A maioria dos artigos, vídeos e fóruns na Internet só mostra como fazer usando deeplink que é uma técnica que envolve alterar o website da empresa, colocar um artigo no servidor e identificar que você é o dono do host do site. Isso tudo poderia demorar meses para terminar quando você trabalha para uma grande empresa. Essa solução não iria servir para mim de jeito nenhum. Fora que são muitos passos para fazer até que de certo.

Eu gostaria de uma coisa mais direta como o applink. Tem como fazer isso usando outra técnica sem muita complicação.

Solução

  • Faz o applink mas não tem pessoas mostrando isso na Internet, nem em fóruns, nem em artigos e nem em vídeos.

Eu vou mostrar aqui nesse artigo o passo a passo para fazer o seu aplicativo Android e iOS pegar ser chamado, pegar os dados e processar o que você queira. Esse artigo eu vou te mostrar como fazer para Android e iOS.

iOS

1 – Para iOS é necessário configurar o URL types, URL identifier e URL Schemes dentro do artigo info.plist. Veja na figura.

Imagem 1.1 – Criando as URLs necessárias para iOS

2 – Agora dentro da classe AppDelegate.cs eu preciso criar um método, ou melhor, sobre-escrever um método chamado OpenUrl para receber qualquer parâmetro enviado pelo link. Segue o método.

Código 1.2 – Método iOS

public override bool OpenUrl(UIApplication application, NSUrl url, NSDictionary options)
{
    if (url != null &&
        url.Query.ToLower().Contains("token="))
    {
        //check data
        var token = url.Query.Substring("token=".Length);
    }
    return true;
}

Note que o parâmetro url é um parâmetro do método e com ele vem o valor recebido. No exemplo eu crie um link com o nome do aplicativo e o parâmetro token.

<a href="webtracktogo://token=12345">webtracktogo://token=1234</a>

Esse link funciona via email ou webiste sem problema algum e assim ele chama o aplicativo identificado com o mesmo nome webtracktogo.

Agora vou falar como funciona no Android.

Android

1 – Para o Android é necessário primeiro colocar alguns parâmetros dentro do artigo AndroidManisfest.xml, veja o código.

Código 2.1 – AndroidManifest.xml

<application android:label="QAS StarTrack Go" android:icon="@mipmap/webtracktogoicon">
    <activity android:name="WebTrack" android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:scheme="webtracktogo"/>
        </intent-filter>
    </activity>
</application>

Dentro da tag <application> é necessário utilizar o <activity> e o android:name coloquei o nome do aplicativo, ou seja, o mesmo nome do projeto. Depois disso, utilizei a tag <intent-filter> com o <data android:scheme…> e é aqui que eu devo colocar o nome do link que vai ser chamado, nesse caso webtracktogo.

Nome tem que a action e a category que são necessárias para compilar o aplicativo.

Depois disso, é necessário acessar a classe MauiProgram.cs para ativar as activities importantes para o Android que é diferente do iOS dentro do MAUI.

Vou precisar configurar o LifecycleEvents e para isso vou colocar o código todo aqui.

Código 2.2 – if ANDROID

public static MauiApp CreateMauiApp()
{
    var builder = MauiApp.CreateBuilder();
    builder
        .UseMauiApp<App>()
        .UseMauiCameraView()    
        .UseMauiCommunityToolkit()
        .ConfigureEffects(effects =>
            {
                //effects.Add<DoneKeyboardButtonEffect, DoneKeyboardButtonPlatformEffect>();
                effects.Add<LoseFocusOnScrollEffect, LoseFocusOnScrollPlatformEffect>();
                effects.Add<AutofillPasswordEffect, AutofillPasswordPlatformEffect>();
            })
        .ConfigureFonts(fonts =>
        {
            fonts.AddFont("OpenSans-Regular.ttf", "OpenSansRegular");
            fonts.AddFont("OpenSans-Semibold.ttf", "OpenSansSemibold");
        })
        .ConfigureLifecycleEvents(lifecycle =>
        {
#if ANDROID
            lifecycle.AddAndroid(android =>
            {
                android.OnCreate((activity, bundle) =>
                {
                    var action = activity.Intent?.Action;
                    var data = activity.Intent?.Data?.ToString();

                    if (action == Android.Content.Intent.ActionView && data is not null)
                    {
                        Task.Run(() => HandleAppLink(data));
                    }
                });
            });
#endif
        });;

    #if IOS
        //register done button for iOS
        EntryHandlerKeyboard.AddDone();
    #endif

#if DEBUG || QAS
    builder.Logging.AddDebug();
#endif

    return builder.Build();
}

Tudo que eu preciso te passar está dentro do #if ANDROID que configura na criação do App uma task que pega os dados e chama o método HandleAppLink(data) passando os dados.

Código 2.3 – Método que pega os dados e valores

/// <summary>
/// Getting values from webtracktogo:// appLink
/// </summary>
/// <param name="url">webtracktogo://</param>
static void HandleAppLink(string url)
{
    if (Uri.TryCreate(url, UriKind.RelativeOrAbsolute, out var uri))
    {
        if (uri != null &&
            uri.Query.ToLower().Contains("token="))
        {
            //check data
            var token = uri.Query.Substring("token=".Length);
        }   
    }
    //App.Current?.SendOnAppLinkRequestReceived(uri);
}

Depois disso você pode fazer o que quiser e o aplicativo Android será chamado quando o link for clicado dentro do device do cliente ou usuário.

<a href="webtracktogo://token=12345">webtracktogo://token=1234</a>

Essa configuração é pequena perto do que tinha que fazer com o deeplink. Espero que tenha gostado e qualquer coisa pode entrar em contato comigo pelo site https://mauriciojunior.net