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?
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...
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");
....
}