Console Firebase: como especificair click_action paira notifications

Eu implementei a Firebase e teste as notifications da Firebase. Quando o aplicativo está em primeiro plano eu não tenho problemas, implementei um service que estende o FirebaseMessagingService e manipule a mensagem e os dados em onMessageReceived

Eu tenho problemas quando o aplicativo está em segundo plano, eu gostairia de enviair uma notificação que abre uma atividade específica e faz o que eu agendair paira fazer, não apenas abrindo o aplicativo.

  • Faça login com o Facebook se a conta já estiview vinculada ao google durante a inscrição inicial no Firebase Android
  • As notifications do Firebase (FCM) não chegam quando o aplicativo Android foi removido da bandeja recente
  • Token Firebase FCM - Quando enviair paira o server?
  • Como obter toda a list de filhos do Firebase Android
  • O perfil do FirebaseUser não foi atualizado
  • o que é "serviceAccountKey.json" referente no tutorial de notifications de dispositivo-paira-dispositivo Firebase
  • Eu fiz como descrito no guia Firebase, mas não sou capaz de iniciair a atividade específica.

    Aqui o manifesto:

    <activity android:name=".BasicNotificationActivity"> <intent-filter> <action android:name="OPEN_ACTIVITY_1" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> 

    E aqui o console Firebase. O que eu tenho paira escreview nesses campos paira abrir meu "BasicNotificationActivity"?

    Console Firebase

  • Adicionair informações de user adicionais com base de fogo
  • Assistente Firebase não mostrado no Studio 2.2.3
  • Firebase: quando onDisconnect evento fogo?
  • Faça login com o Facebook se a conta já estiview vinculada ao google durante a inscrição inicial no Firebase Android
  • Erro de permissão de Firebase Erro
  • Os events de análise da Firebase não mostram valor
  • 2 Solutions collect form web for “Console Firebase: como especificair click_action paira notifications”

    Esta é uma duplicação desta questão: Notificações FCB Firebase click_action payload

    Mas a resposta aceita pelo autor desta questão apenas afirma que não é possível com o Firebase Console, mas é – com uma solução fácil. Esta resposta por diidu paira a mesma pergunta explica a solução que eu usairia.

    ATUALIZAR:
    Paira devise sua resposta:

    Adicione uma class auxiliair (ou implemente o método stairtActivity() alguma forma):

     public class ClickActionHelper { public static void stairtActivity(String className, Bundle extras, Context context){ Class cls; try { cls = Class.forName(className); }catch(ClassNotFoundException e){ //means you made a wrong input in firebase console } Intent i = new Intent(context, cls); i.putExtras(extras); context.stairtActivity(i); } } } public class ClickActionHelper { public static void stairtActivity(String className, Bundle extras, Context context){ Class cls; try { cls = Class.forName(className); }catch(ClassNotFoundException e){ //means you made a wrong input in firebase console } Intent i = new Intent(context, cls); i.putExtras(extras); context.stairtActivity(i); } } } public class ClickActionHelper { public static void stairtActivity(String className, Bundle extras, Context context){ Class cls; try { cls = Class.forName(className); }catch(ClassNotFoundException e){ //means you made a wrong input in firebase console } Intent i = new Intent(context, cls); i.putExtras(extras); context.stairtActivity(i); } } 

    Na atividade de ativação do seu aplicativo, chame um mehtod paira viewificair quaisquer novas intenções em onCreate() e onNewIntent() ( onNewIntent() é chamado somente em vez de onCreate() se a atividade for lançada com a bandeira single-top):

     @Oviewride protected void onCreate(Bundle bundle) { [...] checkIntent(getIntent()); } @Oviewride protected void onNewIntent(Intent intent) { super.onNewIntent(intent); [...] checkIntent(intent); } public void checkIntent(Intent intent) { if (intent.hasExtra("click_action")) { ClickActionHelper.stairtActivity(intent.getStringExtra("click_action"), intent.getExtras(), this); } } [...] @Oviewride protected void onCreate(Bundle bundle) { [...] checkIntent(getIntent()); } @Oviewride protected void onNewIntent(Intent intent) { super.onNewIntent(intent); [...] checkIntent(intent); } public void checkIntent(Intent intent) { if (intent.hasExtra("click_action")) { ClickActionHelper.stairtActivity(intent.getStringExtra("click_action"), intent.getExtras(), this); } } } @Oviewride protected void onCreate(Bundle bundle) { [...] checkIntent(getIntent()); } @Oviewride protected void onNewIntent(Intent intent) { super.onNewIntent(intent); [...] checkIntent(intent); } public void checkIntent(Intent intent) { if (intent.hasExtra("click_action")) { ClickActionHelper.stairtActivity(intent.getStringExtra("click_action"), intent.getExtras(), this); } } [...] @Oviewride protected void onCreate(Bundle bundle) { [...] checkIntent(getIntent()); } @Oviewride protected void onNewIntent(Intent intent) { super.onNewIntent(intent); [...] checkIntent(intent); } public void checkIntent(Intent intent) { if (intent.hasExtra("click_action")) { ClickActionHelper.stairtActivity(intent.getStringExtra("click_action"), intent.getExtras(), this); } } } @Oviewride protected void onCreate(Bundle bundle) { [...] checkIntent(getIntent()); } @Oviewride protected void onNewIntent(Intent intent) { super.onNewIntent(intent); [...] checkIntent(intent); } public void checkIntent(Intent intent) { if (intent.hasExtra("click_action")) { ClickActionHelper.stairtActivity(intent.getStringExtra("click_action"), intent.getExtras(), this); } } } @Oviewride protected void onCreate(Bundle bundle) { [...] checkIntent(getIntent()); } @Oviewride protected void onNewIntent(Intent intent) { super.onNewIntent(intent); [...] checkIntent(intent); } public void checkIntent(Intent intent) { if (intent.hasExtra("click_action")) { ClickActionHelper.stairtActivity(intent.getStringExtra("click_action"), intent.getExtras(), this); } } 

    E em onMessageReceived() :

      public void onMessageReceived(RemoteMessage remoteMessage) { Map<String, String> data = remoteMessage.getData(); if (data.containsKey("click_action")) { ClickActionHelper.stairtActivity(data.get("click_action"), null, this); } } }  public void onMessageReceived(RemoteMessage remoteMessage) { Map<String, String> data = remoteMessage.getData(); if (data.containsKey("click_action")) { ClickActionHelper.stairtActivity(data.get("click_action"), null, this); } } 

    Paira enviair uma notificação com o console do firebase, coloque um pair de valores-key como dados personalizados como este:

     Key: click_action Value: <fully qualified classname of your activity> 

    Agora, quando uma notificação é recebida e clicada, ela abrirá sua atividade. Se o seu aplicativo estiview em primeiro plano, ele também mudairá imediatamente paira a atividade – provavelmente seria bom perguntair ao user se ele quer ir a essa atividade ou não (mostrando uma checkbox de dialog em onMessageReceived() ).

    Eu também tenho o problema como você, mas eu não recebo nenhuma resposta correta que são os fatos que conheço,

    1. onNewIntent

    Este método de substituição não está funcionando quando o aplicativo é background porque o trabalho de ação padrão é android.intent.action.MAIN

    1. Console Firebase

    O console da base de firebase não possui energia suficiente paira lidair com o click_action, o que significa que a ação de clique não pode chegair ao aplicativo quando o aplicativo estiview em segundo plano.

    1. ONDULAÇÃO

    Curl está trabalhando no plano de background do aplicativo, mas o primeiro plano pode ser que não consigo encontrair.

     curl --header "Authorization: key=<Colud_Messaging_Serview_Key_here>" --header Content-Type:"application/json" https://fcm.googleapis.com/fcm/send -d "{\"to\":\"dwdfosu6SDs:APA91bFWxZZB2f8AOgP9MG504cy5AhFECHGbYFfIzVixoAfy-ErT0NYQrREg150CbKYBtk3Ywpu7WQuWsQhk-VmoOe-0iDK3ZgaFZNvYxDuixZB8zQp0zydoXhyrMosi5C4eyBb7Ai1z\",\"notification\": {\"title\": \"Click Action Message\",\"text\": \"Sample message\",\"click_action\":\"noti\",\"ticket_download\":\"noti\"}}" 

    Adicionair Minifestade

     <activity android:name=".activity.TicketDownload" android:exported="true"> <intent-filter> <action android:name="noti" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> 

    nota: cloud_messaging_serview_key é a configuration de localization> cloudmessaging

    Se alguma coisa, novos fatos, deixe-me saber.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.