web-dev-qa-db-fra.com

Firebase Cloud Messaging (FCM) - Activité de lancement lorsque l'utilisateur clique sur la notification avec des extras

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 tout fonctionne bien, l'application ouvre l'activité souhaitée.

Maintenant, j'ai besoin que le serveur passe un paramètre supplémentaire, un id, à cette activité pour pouvoir présenter les détails souhaités associés à la notification. Comme une application de messagerie, lorsque nous cliquons sur la notification, les détails de cet e-mail spécifique sont ouverts.

Comment puis-je faire ceci?

13
m4n3k4s

Ok, j'ai trouvé la solution.

C'est le json que j'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 fichier 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 que l'utilisateur clique sur la notification, il ouvre mon ActivityXPTO. Pour récupérer l'id_offer, il me suffit de le 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...

37
m4n3k4s

Ajoutez des informations supplémentaires à l'intention que vous utilisez pour démarrer Activity, et dans activity dans la méthode onCreate, utilisez getIntent (). GetExtras () pour les utiliser. Par exemple:

Activité de départ:

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

En activité

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

    Bundle bundle = getIntent().getExtras();
    String value = bundle.getString("extraName");
    ....
}
0
Oleg Vladimirov