Skip to main content

Command Palette

Search for a command to run...

Usando a Siri para executar atalhos no seu aplicativo Flutter através do Apple shortcuts

Hey siri, faça algo no meu aplicativo 🎙️

Updated
5 min read
Usando a Siri para executar atalhos no seu aplicativo Flutter através do Apple shortcuts
I

Apaixonado pela criação de aplicativos móveis, trabalhando ativamente com o Flutter desde de 2018. Bacharel em Ciência da Computação pela UESPI (Parnaíba). Trabalha como Desenvolvedor Flutter Especialista na Appmax. Atua como organizador do GDG Parnaíba e Flutter Piauí.

Fala galera, tudo blz? Hoje vamos aprender como integrar o seu app Flutter ao assistente do iOS a Siri. Recentemente precisei desenvolver um novo recurso em um aplicativo que estou trabalhando e a funcionalidade era exatamente pedir pra siri através de voz que ativasse algo no meu aplicativo.

Essa comunicação é algo bem legal e venho aqui ensinar tudo isso pra vocês.

Ao integrar os Atalhos da Siri, seu aplicativo pode destacar suas principais funcionalidades, oferecendo aos usuários maneiras novas e interativas de interagir com ele — uma estratégia simples, porém eficaz, para se manter à frente da concorrência.

O que são Apple Shortcuts ou Atalhos

Segundo o site da apple: Um atalho é uma maneira rápida de realizar uma ou mais tarefas com seus aplicativos economizando tempo em ações repetitivas, como definir alarmes ou lembretes. O aplicativo Atalhos permite que você crie seus próprios atalhos com várias etapas. Por exemplo, crie um atalho para "Tempo de Surfe" que exibe o relatório de surfe, informa o horário previsto para a praia e inicia sua playlist de músicas de surfe.

Os Shortcuts ficam disponíveis assim que o aplicativo é instalado no iOS e podem ser executados no Spotlight, na tela Inicial, no aplicativo Atalhos ou até mesmo usando a voz com a Siri que é o que vamos fazer hoje.

E para fazermos o nosso aplicativo Flutter comunicar com os Atalhos do iOS vamos usar algo chamado App Intents que oferece funcionalidades para integrar profundamente as ações e o conteúdo do seu aplicativo com as experiências do sistema em todas as plataformas, incluindo Siri, Spotlight, widgets, controles e muito mais.

Utilizando as Intents no Flutter com o package Intelligence

1 — Adicionando a dependência em seu projeto

Vamos começar adicionando a dependência ao nosso arquivo pubspec.yaml.

Instale o pacote a partir da linha de comando com o Flutter

$ flutter pub add intelligence

Ou adicione intelligence diretamente em seu pubspec.yaml e execute flutter pub get no momento da criação desse artigo ele está na versão 0.2.0.

dependencies:
  intelligence: ^0.2.0

Agora, no seu código Dart, você pode importar o package:

import 'package:intelligence/intelligence.dart';

2 - Vamos criar um novo aplicativo Flutter para o nosso exemplo de hoje.

flutter create flutter_siri_example

Após o nosso projeto criado vamos fazer a configuração na parte nativa do iOS, então abra a pasta ios no Xcode clicando com o botão direito no vsCode.

Agora você precisa definir a versão mínima do iOS para 16.0 no Xcode para o projeto, veja a imagem abaixo:

Após feito isso vamos integrar os comandos que queremos que a siri interprete em nosso aplicativo.

Abra o Xcode e crie uma novo arquivo Swift. Vamos usar o exemplo padrão do Flutter de app contador e adicionar dois comandos, um para incrementar e outro para resetar o valor.

Crie o arquivo IncrementeIntent.Swift no Xcode, veja o exemplo abaixo e código que você precisa escrever.

import AppIntents
import intelligence

struct IncrementIntent: AppIntent {
  static var title: LocalizedStringResource = "Aumentar contador"
  static var openAppWhenRun: Bool = true

  @MainActor
  func perform() async throws -> some IntentResult {
    IntelligencePlugin.notifier.push("increment")
    return .result()
  }
}

Vamos criar nossa segunda Intent onde vai interpretar o comando de reset do valores do contador.

Crie um arquivo chamado RefreshIntent.Swfit conforme a imagem abaixo:

Xcode

import AppIntents
import intelligence

struct RefreshIntent: AppIntent {
  static var title: LocalizedStringResource = "Atualizar contador"
  static var openAppWhenRun: Bool = true

  @MainActor
  func perform() async throws -> some IntentResult {
    IntelligencePlugin.notifier.push("refresh")
    return .result()
  }
}

Em seguida vamos criar último arquivo para interpretar as strings dos comandos e acionar a Intent correta declarado acima apenas falando uma frase específica para a Siri.

Veja o exemplo abaixo:

Xcode

import AppIntents

struct AllAppShortcuts: AppShortcutsProvider {
    static var appShortcuts: [AppShortcut] {
       return [
            AppShortcut(
                intent: IncrementIntent(),
                phrases: [
                    "Incrementar número no \(.applicationName)",
                    "Adicionar número no \(.applicationName)",
                    "Aumentar número no \(.applicationName)",

                ]
            ),
            AppShortcut(
                intent: RefreshIntent(),
                phrases: [
                    "Resetar contador no \(.applicationName)"
                ]
            ),
        ]
    }
}

Agora o lado do Flutter 💙

No lado do Flutter na nossa página principal vamos chamar o método para escutar se o aplicativo foi aberto pela a Siri e interpretando os comandos.

 void _incrementCounter() {
    setState(() {
      _counter++;
    });
  }

  void _refreshCounter() {
    setState(() {
      _counter = 0;
    });
  }

  @override
  void initState() {
    super.initState();
    _initSiri();
  }

  void _initSiri() {
    if (Platform.isIOS) {
      Intelligence().selectionsStream().listen(_trackSiri);
    }
  }

  void _trackSiri(String selection) {
    log('Siri Command triggered: $selection');
    switch (selection) {
      case 'increment':
        _incrementCounter();
        break;
      case 'refresh':
        _refreshCounter();
        break;

      default:
        break;
    }
  }

O código acima é responsável por ouvir os comandos passados para a Siri e acionar os métodos corretos que no nosso caso são dois em nosso app.

_incrementCounter e _refreshCounter o resto do código você pode consultar no link do repositório aqui.

Rodando e testando o aplicativo

Execute o aplicativo no simulador do iOS e ative a Siri com a opção mostrada abaixo:

Vs Code

Quando a Siri detectar pela primeira vez o comando de voz, pode ser que o iOS peça para adicionar o comando no app Atalhos do iOS mas nos meus testes teve vez que foi automático mas se aparecer apenas clique em Ativar.

Apple Shortcuts no iOS

Veja o link do video do aplicativo de demonstração em funcionamento abaixo: 👇🏻

https://drive.google.com/file/d/1CddUVKZt8iCdSNgNx7Z_oLPSNrGQOk5C/view?usp=sharing

Conclusão ✅

Bom foi isso, os atalhos da Siri podem automatizar diversas tarefas, como iniciar aplicativos, enviar mensagens, definir lembretes e deixar nossos apps muito mais inteligentes e legais. O céu é o limite ✨

Você pode consultar o código de exemplo no github.

Obrigado por ler até aqui. 😁

Espero que você tenha gostado! Compartilhe-o com seus amigos e colegas!

Juntos, vamos construir apps incríveis que transformam o mundo!

Se tiver alguma dúvida ou contribuição me manda uma DM ou deixe nos comentários!

Me siga para estar sempre por dentro dos próximos artigos sobre desenvolvimento móvel 📲 🚀

🌐 Minhas redes sociais 🌐

Github | LinkedIn | Instagram | X (Twitter) | Medium