11

J'essaie d'ouvrir une activité spécifique lorsque l'utilisateur clique sur la notification, lorsque l'application est en arrière-plan, avec quelques paramètres supplémentaires. J'utilise le click_action et ça marche bien, l'application ouvre l'activité souhaitée.Firebase Cloud Messaging (FCM) - Activité de lancement lorsque l'utilisateur clique sur la notification avec des extras

Maintenant, j'ai besoin du serveur pour passer un paramètre supplémentaire, un id, à cette activité afin que je puisse présenter les détails désirés associés à la notification. Comme une application e-mail, lorsque nous cliquons sur la notification, les détails de cet e-mail sont affichés.

Comment est-ce que je peux faire ceci?

+0

Pouvez-vous partager du code? J'ai une chose similaire dans mon application mais j'utilise GCM. Dans le service qui reçoit les notifications, j'ajoute simplement une chaîne supplémentaire à l'intention et je l'utilise pour voir quel fragment je devrais ouvrir. – Vucko

+0

Je n'ai pas besoin d'aide, mon application fonctionne :) bon pour vous que vous l'avez corrigé – Vucko

+0

L'avez-vous résolu? Je vais chercher le même problème. J'ai démarré targetActivity mais je n'ai pas obtenu d'extras d'intention. Avez-vous une solution? –

Répondre

32

Ok, je l'ai trouvé la solution.

C'est le JSON que je vous envoie du serveur à l'application

{ 
    "registration_ids": [ 
    "XXX", 
    ... 
    ], 
    "data": { 
    "id_offer": "41" 
    }, 
    "notification": { 
    "title": "This is the Title", 
    "text": "Hello I'm a notification", 
    "icon": "ic_push", 
    "click_action": "ACTIVITY_XPTO" 
    } 
} 

Au AndroidManifest.xml

<activity 
    android:name=".ActivityXPTO" 
    android:screenOrientation="sensor" 
    android:windowSoftInputMode="stateHidden"> 
    <intent-filter> 
     <action android:name="ACTIVITY_XPTO" />   
     <category android:name="android.intent.category.DEFAULT" /> 
    </intent-filter> 
</activity> 

Lorsque l'application est fermée ou en arrière-plan et l'utilisateur clique sur la notification ouvre mon ActivityXPTO, pour récupérer le id_offer je ne dois faire

public class ActivityXPTO extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     ... 

     String idOffer = ""; 

     Intent startingIntent = getIntent(); 
     if (startingIntent != null) { 
      idOffer = startingIntent.getStringExtra("id_offer"); // Retrieve the id 
     } 

     getOfferDetails(id_offer); 
    } 

    ... 
} 

C'est tout ...

+2

Voir aussi http://stackoverflow.com/questions/37554274/open-app-on-firebase-notification-received-fcm/37626817#37626817 –

+0

Merci pour votre belle réponse. En utilisant votre chemin, j'ai démarré targetActivity mais je n'ai pas obtenu d'extras de l'intention. Avez-vous une solution? –

+0

Salut @ Md.SajedulKarim, avez-vous un exemple du json que vous envoyez du serveur? Vous devez ajouter les extras à l'intérieur de l'objet "data" de votre json. – m4n3k4s

0

Ajoutez des informations d'ajout à Intent que vous utilisez pour démarrer Activity, et en activité dans la méthode onCreate utilisez getIntent(). GetExtras() pour les utiliser. Par exemple:

début de l'activité:

Intent intent = new Intent(context, TargetActivity.class); 
Bundle bundle = new Bundle(); 
bundle.putString("extraName", "extraValue"); 
intent.putExtras(bundle); 
startActivity(intent); 

Dans l'activité

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Bundle bundle = getIntent().getExtras(); 
    String value = bundle.getString("extraName"); 
    .... 
} 
+1

Ce n'est pas moi qui commence l'activité. Ceci est pris en charge par le système. L'application est en arrière-plan ou fermée. – m4n3k4s