Questo è un duplicato di questa domanda: Firebase FCM notifications click_action payload
Ma la risposta che è stata accettata dall'autore di questa domanda solo afferma che non è possibile con Firebase Console, ma è - con una soluzione facile. This answer by diidu alla stessa domanda spiega la soluzione che vorrei utilizzare.
UPDATE:
Per approfondire la sua risposta:
Aggiungere una classe di supporto (o implementare startActivity()
metodo in qualche modo):
public class ClickActionHelper {
public static void startActivity(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.startActivity(i);
}
}
Nel lanciatore-attività della vostra app, chiamare un Mehtod per verificare eventuali nuovi intenti in onCreate()
e onNewIntent()
(onNewIntent()
viene chiamato al posto di onCreate()
se Activity viene avviato con flag single-top):
@Override
protected void onCreate(Bundle bundle) {
[...]
checkIntent(getIntent());
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
[...]
checkIntent(intent);
}
public void checkIntent(Intent intent) {
if (intent.hasExtra("click_action")) {
ClickActionHelper.startActivity(intent.getStringExtra("click_action"), intent.getExtras(), this);
}
}
E in onMessageReceived()
:
public void onMessageReceived(RemoteMessage remoteMessage) {
Map<String, String> data = remoteMessage.getData();
if (data.containsKey("click_action")) {
ClickActionHelper.startActivity(data.get("click_action"), null, this);
}
}
per inviare una notifica con la console Firebase, mettere un valore di coppia di chiavi come dati personalizzati in questo modo:
Key: click_action
Value: <fully qualified classname of your activity>
Ora, quando una notifica viene ricevuto e cliccato, aprirà la tua attività. Se la tua app è in primo piano, cambierà immediatamente anche l'attività: sarebbe probabilmente utile chiedere all'utente se desidera andare a questa attività o meno (mostrando una finestra di dialogo in onMessageReceived()
).
Il comportamento che descrivi è dispari. Secondo la documentazione (https://firebase.google.com/docs/notifications/android/console-device#receive_and_handle_messages) onMessageReceived dovrebbe * solo * essere chiamato se l'app è in * foreground * (come si dispone di notifica e carico utile dei dati). Quello che descrivi è che è il contrario. È corretto? –
Mi dispiace, mi sono scambiato in primo piano e sfondo. Ho modificato la domanda. – Alex
Possibile duplicato di [notifiche FCM Firebase fare clic su \ _action payload] (http://stackoverflow.com/questions/37407366/firebase-fcm-notifications-click-action-payload) –