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


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:
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:
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:
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.
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
Subscribe to my newsletter
Read articles from Ian Oliveira directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Ian Oliveira
Ian Oliveira
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í.