Activité ouverte sur firebase notification reçue en premier plan
Quand mon application est ouverte et je reçois une notification je veux être en mesure d'ouvrir l'activité associée immédiatement sans avoir besoin de l'utilisateur de taper sur la notification.
Cette question est très similaire: Ouvrez l'app sur firebase notification reçue (FCM)
Mais il ouvre l'application quand elle est en arrière plan, j'ai besoin de le faire lorsque mon application est au premier plan.
De la firebase documentation:
Les Notifications envoyées lorsque votre application est en arrière-plan. Dans ce
cas, l'avis est transmis à l'appareil de la barre d'état système. Un
utilisateur d'appuyer sur une notification s'ouvre l'app launcher par défaut. Messages
avec de notification et de données de charge utile, à la fois de fond et de
le premier plan. Dans ce cas, la notification est livré à l'
dispositif de la barre d'état système, et les données de charge utile est livré dans les extras
de l'intention de votre lanceur d'Activité.
C'est mon implmentation de onMessageReceived
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
//Check if message contains a data payload.
if (remoteMessage.getData().size() > 0) {
Log.d(TAG, "Message data payload: " + remoteMessage.getData());
}
//Check if message contains a notification payload.
if (remoteMessage.getNotification() != null) {
Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
sendNotification( remoteMessage);
}
}
/**
* Create and show a simple notification containing the received FCM message.
*
* @param remoteMessage FCM message message received.
*/
private void sendNotification(RemoteMessage remoteMessage) {
Intent intent = new Intent(this, MyActivity.class);
Map<String, String> hmap ;
hmap = remoteMessage.getData();
hmap.get("data_info");
intent.putExtra("data_info", hmap.get("data_info"));
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
PendingIntent.FLAG_ONE_SHOT);
}
Je suis en mesure d'obtenir la notification correctement, mais l'activité ne commence qu'une fois que j'appuyez sur la notification sur la barre d'état système.
Est-il un moyen de démarrer l'activité sans toucher la notification de tout premier plan?
La méthode onMessageReceived()
de la classe MyFirebaseMessagingService
que extends FirebaseMessagingService
est appelé correctement alors que dans le premier plan, mais l'activité n'est pas mise en route. J'ai aussi essayé avec le drapeau FLAG_ACTIVITY_NEW_TASK
aussi avec pas de chance. Merci à l'avance.
OriginalL'auteur bankode | 2016-09-06
Vous devez vous connecter pour publier un commentaire.
Vous pouvez obtenir que l'inscription d'un récepteur de radiodiffusion à vous de premier plan de l'activité et de l'envoi d'une diffusion à partir de votre onReceiveMessage() la méthode.
ForegroundActivity
FirebaseNotificationReceiver
Vous pouvez ajouter une case à savoir si le application est au premier plan ou de ne pas choisir entre l'envoi d'une notification ou envoyer une diffusion.
Dans une activité différente. L'un est censé être utilisé par l'utilisateur au moment de la notification de l'arrivée. j'.e: l'utilisateur est avec l'app ouverture et vérification du contenu, vous pouvez avoir une classe MainActivity et de déclarer les observateurs de là, que l'esprit, si l'utilisateur laisse que l'activité de l'émission de la notification ne sera pas capturé.
fait ce code fonctionne même lorsque l'application est tué ????
OriginalL'auteur cdiazmo
(kotlin)
utilisez ce code à l'intérieur de onMessageReceived si vous voulez vérifier est l'application de premier plan ou d'arrière-plan
puis utilisez le "premier plan", variable pour faire l'action que vous avez besoin
espère que son aidant..
et vous pouvez voir mon FCMService code
OriginalL'auteur firecatmusic
J'ai été en mesure de réaliser cela en appelant send() sur le pendingIntent:
OriginalL'auteur bankode
OriginalL'auteur Devraj Jha
La création de BroadcastReceiver est la meilleure façon de gérer de votre scénario. Mais vous devez savoir de l'activité qui est utilisé par l'utilisateur.
La création de BroadcastReceiver dans chaque activité donne regard bizarre. Donc Créer un
BaseActivity
qui s'étend de l'Activité.BaseActivity
aura laBroadcastReceiver
code, et Tous les autres activité s'étend cetteBaseActivity
.J'ai ajouté mon kotlin code. J'espère que vous pouvez comprendre 🙂
Enfin, vous pouvez appeler cette
BroadcastReceiver
deonMessageReceived()
dansFirebaseMessagingService
.OriginalL'auteur dpvmani
Selon la La page de Google sur les Émissions:
Donc, préfèrent utiliser LocalBroadcastManager au lieu de BroadcastReceiver.
Dans le FirebaseMessagingService classe, vous recevez la notification de la FCM (Firebase Messagerie en Nuage) et les utiliser:
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
pour envoyer un message à l'MainActivity:
Et dans MainActivity vous créez le BroadcastReceiver à recevoir le message:
Ci-dessous les classes référencées dans le code:
Que c'est!
OriginalL'auteur educoutinho
Vous avez besoin pour obtenir des infos sur le premier plan en cours d'application dans votre appareil. Basé sur que vous pouvez décider si le début de l'activité ou de l'envoi d'une notification.
Pour ce faire, je vous suggère quelque chose comme ceci:
Vous devez définir la notification de l'id, le titre et le submessage qui sera indiqué dans la notification.
Vous aurez également besoin d'
<uses-permission android:name="android.permission.GET_TASKS" />
la permission d'être ajouté dans le manifeste de l'application.OriginalL'auteur IronJohn
Si vous souhaitez définir uniquement de votre notification, Vous pouvez modifier ce(Clinet exemple),
Et serveur envoyer un message comme ceci(exemple), seules les données( pas de notification)
Ref)
Les deux types de messages de la FCM
Ce n'est pas pertinent de répondre à la question ci-dessus. Veuillez vous assurer que la question est de savoir, après que vous avez à répondre,Assurez-vous de wil.
OriginalL'auteur amuyu