Para escrever seu aplicativo cliente Firebase Cloud Messaging multiplataforma com o Unity, use a API Firebase Cloud Messaging . O Unity SDK funciona para Android e Apple, com algumas configurações adicionais necessárias para cada plataforma.
Antes de você começar
Pré-requisitos
Instale o Unity 2019.1 ou posterior. Versões anteriores também podem ser compatíveis, mas não terão suporte ativo. O suporte para Unity 2019.1 é considerado obsoleto e não terá mais suporte ativo após a próxima versão principal.
(Apenas plataformas Apple) Instale o seguinte:
- Xcode 13.3.1 ou superior
- CocoaPods 1.10.0 ou superior
Certifique-se de que seu projeto Unity atenda a estes requisitos:
- Para iOS — destina-se ao iOS 11 ou superior
- Para tvOS - visa o tvOS 12 ou superior
- Para Android — segmenta API de nível 19 (KitKat) ou superior
Configure um dispositivo ou use um emulador para executar seu projeto Unity.
Para iOS ou tvOS — Configure um dispositivo físico para executar seu aplicativo e conclua estas tarefas:
- Obtenha uma chave de autenticação de notificação por push da Apple para sua conta de desenvolvedor da Apple .
- Ative as notificações por push no XCode em App > Capabilities .
Para Android — os emuladores devem usar uma imagem de emulador com o Google Play.
- Faça login no Firebase usando sua conta do Google.
Se você ainda não tem um projeto Unity e quer apenas experimentar um produto Firebase, pode baixar um de nossos exemplos de início rápido .
Etapa 1: criar um projeto do Firebase
Antes de adicionar o Firebase ao seu projeto Unity, você precisa criar um projeto Firebase para se conectar ao seu projeto Unity. Acesse Entenda os projetos do Firebase para saber mais sobre os projetos do Firebase.
Etapa 2: registrar seu aplicativo no Firebase
Você pode registrar um ou mais aplicativos ou jogos para se conectar ao seu projeto Firebase.
Acesse o console do Firebase .
No centro da página de visão geral do projeto, clique no ícone do Unity (
) para iniciar o fluxo de trabalho de configuração.Se você já adicionou um aplicativo ao seu projeto Firebase, clique em Adicionar aplicativo para exibir as opções da plataforma.
Selecione qual destino de construção do seu projeto Unity você gostaria de registrar, ou você pode até mesmo selecionar para registrar ambos os destinos agora ao mesmo tempo.
Insira o(s) ID(s) específico(s) da plataforma do seu projeto Unity.
Para iOS — insira o ID do iOS do seu projeto Unity no campo ID do pacote do iOS .
Para Android — Insira a ID do Android do seu projeto Unity no campo Android package name .
Os termos nome do pacote e ID do aplicativo geralmente são usados de forma intercambiável.
Abra seu projeto Unity em seu Unity IDE e navegue até a seção de configurações de cada plataforma:
Para iOS — Navegue até Build Settings > iOS .
Para Android — Navegue até Android > Configurações do player > Outras configurações .
O ID do seu projeto Unity é o valor do identificador de pacote (ID de exemplo:
com.yourcompany.yourproject
).(Opcional) Insira o(s) apelido(s) específico(s) da plataforma do seu projeto Unity.
Esses apelidos são identificadores internos de conveniência e só são visíveis para você no console do Firebase.Clique em Registrar aplicativo .
Etapa 3: adicionar arquivos de configuração do Firebase
Obtenha o(s) arquivo(s) de configuração do Firebase específico(s) da plataforma no fluxo de trabalho de configuração do Firebase console.
Para iOS — Clique em Baixar GoogleService-Info.plist .
Para Android — Clique em Baixar google-services.json .
O arquivo de configuração do Firebase contém identificadores exclusivos, mas não secretos, para seu projeto. Para saber mais sobre esse arquivo de configuração, visite Entenda os projetos do Firebase .
Você pode baixar o arquivo de configuração do Firebase novamente a qualquer momento.
Certifique-se de que o nome do arquivo de configuração não contenha caracteres adicionais, como
(2)
.
Abra a janela Project do seu projeto Unity e mova seu(s) arquivo(s) de configuração para a pasta
Assets
.De volta ao Firebase console, no fluxo de trabalho de configuração, clique em Next .
Etapa 4: adicionar SDKs do Firebase Unity
No console do Firebase, clique em Download Firebase Unity SDK e descompacte o SDK em algum lugar conveniente.
Você pode baixar o Firebase Unity SDK novamente a qualquer momento.
O Firebase Unity SDK não é específico da plataforma.
Em seu projeto Unity aberto, navegue até Assets > Import Package > Custom Package .
No SDK descompactado, selecione os produtos compatíveis do Firebase que você deseja usar em seu aplicativo.
Para uma experiência ideal com o Firebase Cloud Messaging, recomendamos habilitar o Google Analytics em seu projeto. Além disso, como parte da configuração do Analytics, você precisa adicionar o pacote Firebase para Analytics ao seu aplicativo.
Análise habilitada
- Adicione o pacote Firebase para Google Analytics:
FirebaseAnalytics.unitypackage
- Adicione o pacote para Firebase Cloud Messaging:
FirebaseMessaging.unitypackage
Análise não habilitada
Adicione o pacote para Firebase Cloud Messaging:
FirebaseMessaging.unitypackage
- Adicione o pacote Firebase para Google Analytics:
Na janela Importar pacote do Unity , clique em Importar .
De volta ao Firebase console, no fluxo de trabalho de configuração, clique em Next .
Etapa 5: confirmar os requisitos de versão do Google Play Services
O Firebase Unity SDK para Android requer serviços do Google Play , que devem estar atualizados antes que o SDK possa ser usado.
Adicione o código a seguir no início do seu aplicativo. Você pode verificar e, opcionalmente, atualizar os serviços do Google Play para a versão exigida pelo Firebase Unity SDK antes de chamar qualquer outro método no SDK.
Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => { var dependencyStatus = task.Result; if (dependencyStatus == Firebase.DependencyStatus.Available) { // Create and hold a reference to your FirebaseApp, // where app is a Firebase.FirebaseApp property of your application class. app = Firebase.FirebaseApp.DefaultInstance; // Set a flag here to indicate whether Firebase is ready to use by your app. } else { UnityEngine.Debug.LogError(System.String.Format( "Could not resolve all Firebase dependencies: {0}", dependencyStatus)); // Firebase Unity SDK is not safe to use here. } });
Seu projeto Unity está registrado e configurado para usar o Firebase.
Etapa 7: adicionar estrutura de notificações do usuário
Clique no projeto no Xcode e selecione a guia Geral na área do Editor .
Role para baixo até Estruturas e bibliotecas vinculadas e clique no botão + para adicionar uma estrutura.
Na janela exibida, role até UserNotifications.framework , clique nessa entrada e clique em Adicionar .
Passo 8: Habilitar notificações push
Clique no projeto no Xcode e selecione a guia Capabilities na área Editor .
Alterne as notificações por push para ativado .
Role para baixo até Modos de segundo plano e, em seguida, mude para Ativado .
Marque a caixa de seleção Notificações remotas em Modos de segundo plano .
Inicializar Firebase Cloud Messaging
A biblioteca Firebase Cloud Message será inicializada ao adicionar manipuladores para os eventos TokenReceived
ou MessageReceived
.
Na inicialização, um token de registro é solicitado para a instância do aplicativo cliente. O aplicativo receberá o token com o evento OnTokenReceived
, que deve ser armazenado em cache para uso posterior. Você precisará deste token se quiser direcionar este dispositivo específico para mensagens.
Além disso, você precisará se registrar para o evento OnMessageReceived
se quiser receber mensagens de entrada.
Toda a configuração se parece com isso:
public void Start() { Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived; Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived; } public void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs token) { UnityEngine.Debug.Log("Received Registration Token: " + token.Token); } public void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e) { UnityEngine.Debug.Log("Received a new message from: " + e.Message.From); }
Configurando uma atividade de ponto de entrada do Android
No Android, o Firebase Cloud Messaging vem com uma atividade de ponto de entrada personalizada que substitui o UnityPlayerActivity
padrão. Se você não estiver usando um ponto de entrada personalizado, essa substituição ocorrerá automaticamente e você não precisará executar nenhuma ação adicional. Aplicativos que não usam o ponto de entrada padrão Atividade ou que fornecem seus próprios Assets/Plugins/AndroidManifest.xml
precisarão de configuração extra.
O plug-in Firebase Cloud Messaging Unity no Android vem com dois arquivos adicionais:
-
Assets/Plugins/Android/libmessaging_unity_player_activity.jar
contém uma atividade chamadaMessagingUnityPlayerActivity
que substitui o padrãoUnityPlayerActivity
. -
Assets/Plugins/Android/AndroidManifest.xml
instrui o aplicativo a usarMessagingUnityPlayerActivity
como ponto de entrada para o aplicativo.
Esses arquivos são fornecidos porque o UnityPlayerActivity
padrão não lida com transições de ciclo de vida de atividade onStop
, onRestart
ou implementa o onNewIntent
que é necessário para o Firebase Cloud Messaging lidar corretamente com as mensagens recebidas.
Configurando uma atividade de ponto de entrada personalizada
Se seu aplicativo não usar o UnityPlayerActivity
padrão, você precisará remover o AndroidManifest.xml
fornecido e garantir que sua atividade personalizada lide adequadamente com todas as transições do ciclo de vida da atividade do Android (um exemplo de como fazer isso é mostrado abaixo). Se sua atividade personalizada estender UnityPlayerActivity
, você poderá estender com.google.firebase.MessagingUnityPlayerActivity
, que implementa todos os métodos necessários.
Se você estiver usando uma atividade personalizada e não estendendo com.google.firebase.MessagingUnityPlayerActivity
, inclua os seguintes snippets em sua atividade.
/** * Workaround for when a message is sent containing both a Data and Notification payload. * * When the app is in the background, if a message with both a data and notification payload is * received the data payload is stored on the Intent passed to onNewIntent. By default, that * intent does not get set as the Intent that started the app, so when the app comes back online * it doesn't see a new FCM message to respond to. As a workaround, we override onNewIntent so * that it sends the intent to the MessageForwardingService which forwards the message to the * FirebaseMessagingService which in turn sends the message to the application. */ @Override protected void onNewIntent(Intent intent) { Intent message = new Intent(this, MessageForwardingService.class); message.setAction(MessageForwardingService.ACTION_REMOTE_INTENT); message.putExtras(intent); message.setData(intent.getData()); // For older versions of Firebase C++ SDK (< 7.1.0), use `startService`. // startService(message); MessageForwardingService.enqueueWork(this, message); } /** * Dispose of the mUnityPlayer when restarting the app. * * This ensures that when the app starts up again it does not start with stale data. */ @Override protected void onCreate(Bundle savedInstanceState) { if (mUnityPlayer != null) { mUnityPlayer.quit(); mUnityPlayer = null; } super.onCreate(savedInstanceState); }
Novas versões do Firebase C++ SDK (7.1.0 em diante) usam JobIntentService
, que requer modificações adicionais no arquivo AndroidManifest.xml
.
<service android:name="com.google.firebase.messaging.MessageForwardingService" android:permission="android.permission.BIND_JOB_SERVICE" android:exported="false" > </service>
Nota sobre a entrega de mensagens no Android
Quando o aplicativo não está em execução e um usuário toca em uma notificação, a mensagem não é, por padrão, roteada por meio de retornos de chamada integrados do FCM. Nesse caso, os payloads das mensagens são recebidos por meio de um Intent
usado para iniciar o aplicativo.
As mensagens recebidas enquanto o aplicativo está em segundo plano têm o conteúdo de seu campo de notificação usado para preencher a notificação da bandeja do sistema, mas esse conteúdo de notificação não será comunicado ao FCM. Ou seja, FirebaseMessage.Notification
será nulo.
Resumindo:
estado do aplicativo | Notificação | Dados | Ambos |
---|---|---|---|
Primeiro plano | Firebase.Messaging.FirebaseMessaging.MessageReceived | Firebase.Messaging.FirebaseMessaging.MessageReceived | Firebase.Messaging.FirebaseMessaging.MessageReceived |
Fundo | Bandeja do sistema | Firebase.Messaging.FirebaseMessaging.MessageReceived | Notificação: bandeja do sistema Dados: nos extras da intenção. |
Impedir a inicialização automática
O FCM gera um token de registro para segmentação por dispositivo. Quando um token é gerado, a biblioteca carrega o identificador e os dados de configuração para o Firebase. Se você deseja obter um opt-in explícito antes de usar o token, pode impedir a geração no momento da configuração desativando o FCM (e no Android, Analytics). Para fazer isso, adicione um valor de metadados ao seu Info.plist
(não ao GoogleService-Info.plist
) na Apple ou ao AndroidManifest.xml
no Android:
Android
<?xml version="1.0" encoding="utf-8"?> <application> <meta-data android:name="firebase_messaging_auto_init_enabled" android:value="false" /> <meta-data android:name="firebase_analytics_collection_enabled" android:value="false" /> </application>
Rápido
FirebaseMessagingAutoInitEnabled = NO
Para reativar o FCM, você pode fazer uma chamada de tempo de execução:
Firebase.Messaging.FirebaseMessaging.TokenRegistrationOnInitEnabled = true;
Esse valor persiste nas reinicializações do aplicativo depois de definido.
Manipulando mensagens com links diretos no Android
O FCM permite que mensagens sejam enviadas contendo um link direto para seu aplicativo. Para receber mensagens que contenham um link direto, você deve adicionar um novo filtro de intenção à atividade que lida com links diretos para seu aplicativo. O filtro de intenção deve capturar links diretos do seu domínio. Se suas mensagens não contiverem um link direto, essa configuração não é necessária. Em AndroidManifest.xml:
<intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:host="CHANGE_THIS_DOMAIN.example.com" android:scheme="http"/> <data android:host="CHANGE_THIS_DOMAIN.example.com" android:scheme="https"/> </intent-filter>
Também é possível especificar um curinga para tornar o filtro de intenção mais flexível. Por exemplo:
<intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> <data android:host="*.example.com" android:scheme="http"/> <data android:host="*.example.com" android:scheme="https"/> </intent-filter>
Quando os usuários tocam em uma notificação contendo um link para o esquema e o host que você especificar, seu aplicativo iniciará a atividade com esse filtro de intenção para lidar com o link.
Próximos passos
Depois de configurar o aplicativo cliente, você está pronto para enviar mensagens downstream e de tópico com o Firebase. Para saber mais, consulte o exemplo de início rápido que demonstra essa funcionalidade.
Para adicionar outro comportamento mais avançado ao seu aplicativo, consulte os guias para envio de mensagens de um servidor de aplicativos:
Lembre-se de que você precisará de uma implementação de servidor para usar esses recursos.