2017-01-24 1 views
1

J'utilise le dernier plugin GCM Push Notification avec Cordova. Les notifications fonctionnent très bien, mais je veux que l'application arrive au premier plan lorsque l'utilisateur reçoit une notification push.Apporte l'application au premier plan lors de la réception d'une notification GCM Push (Cordova)

J'ai essayé plusieurs solutions à partir de nombreux endroits, mais je ne peux toujours pas faire en sorte que l'application arrive au premier plan lorsqu'une notification est reçue.

Il semble que quelqu'un a réussi à faire quelque chose de similaire, mais peu importe ce que je ne je ne peux pas reproduire les succès:

Bring cordova application to foreground when push arrives

Les codes pour la GCMIntentService.java dans sa question sont différentes de ce qui est disponible à présent.

Comment puis-je faire fonctionner cela?

+0

Toujours en utilisant 'GCM'? 'GCM' est obsolète. Utiliser 'FCM' – Piyush

+0

Si j'utilise FCM, cette fonctionnalité est-elle possible? –

Répondre

0

Intégrez les lignes suivantes dans la méthode onMessageReceived dans le fichier GCMIntentservice.java.

@Override 
    public void onMessageReceived(String from, Bundle extras) { 
     Log.d(LOG_TAG, "onMessage - from: " + from); 

     if (extras != null) { 
      Context applicationContext = getApplicationContext(); 

      SharedPreferences prefs = applicationContext.getSharedPreferences(PushPlugin.COM_ADOBE_PHONEGAP_PUSH, Context.MODE_PRIVATE); 
      boolean forceShow = prefs.getBoolean(FORCE_SHOW, false); 
      boolean clearBadge = prefs.getBoolean(CLEAR_BADGE, false); 

      extras = normalizeExtras(applicationContext, extras); 

      if (clearBadge) { 
       PushPlugin.setApplicationIconBadgeNumber(getApplicationContext(), 0); 
      } 

      // if we are in the foreground and forceShow is `false` only send data 
      if (!forceShow && PushPlugin.isInForeground()) { 
       Log.d(LOG_TAG, "foreground"); 
       extras.putBoolean(FOREGROUND, true); 
       extras.putBoolean(COLDSTART, false); 
       PushPlugin.sendExtras(extras); 
      } 
      // if we are in the foreground and forceShow is `true`, force show the notification if the data has at least a message or title 
      else if (forceShow && PushPlugin.isInForeground()) { 
       Log.d(LOG_TAG, "foreground force"); 
       extras.putBoolean(FOREGROUND, true); 
       extras.putBoolean(COLDSTART, false); 

       showNotificationIfPossible(applicationContext, extras); 
      } 
      // if we are not in the foreground always send notification if the data has at least a message or title 
      else { 
       Log.d(LOG_TAG, "background"); 
       extras.putBoolean(FOREGROUND, false); 

       Intent wintent = new Intent(context, MainActivity.class); 
      wintent.addFlags(Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED | Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(wintent); 

       extras.putBoolean(COLDSTART, PushPlugin.isActive()); 

       showNotificationIfPossible(applicationContext, extras); 
      } 
     } 
    } 

Et assurez-vous d'importer le MainActivity.java

+0

Merci pour la réponse. Je l'ai fait tout à l'heure et j'ai importé MainActivity en entrant le code "import MainActivity;". Bien qu'il n'apporte toujours pas l'application à l'avant ... notifiant seulement la poussée dans un message de poussée standard. D'autres pensées? –