6

Sto lavorando alla mia prima app Android per utilizzare il servizio Google Cloud Messaging (GCM) per le notifiche push. Sono arrivato al punto in cui posso inviare correttamente un messaggio dalla mia applicazione server e registrare il contenuto del messaggio nell'evento onMessage all'interno della mia classe GCMIntentService sull'app client. Tuttavia non vedo alcuna indicazione visiva sul dispositivo che un messaggio è stato ricevuto. Mi aspettavo che il messaggio comparisse nell'elenco delle notifiche pull-down sul telefono, come fa su iPhone. Questo deve essere codificato manualmente? Esiste anche un metodo comune per visualizzare il messaggio indipendentemente da quale attività è attualmente attiva e se l'app è inattiva sullo sfondo? Qualsiasi aiuto apprezzato.Android - Le notifiche push GCM non vengono visualizzate nell'elenco delle notifiche

risposta

7

Questo codice genererà una notifica nella barra di sistema di Android nella parte superiore dello schermo. Questo codice creerà un nuovo intento che indirizzerà l'utente a una "Home.class" dopo aver fatto clic sulla notifica nella barra in alto. Se si desidera che esegua qualcosa di specifico in base all'attività corrente, è possibile inviare richieste di trasmissione da GCMIntentService alle altre attività.

Intent notificationIntent=new Intent(context, Home.class); 
generateNotification(context, message, notificationIntent); 

private static void generateNotification(Context context, String message, Intent notificationIntent) { 
    int icon = R.drawable.icon; 
    long when = System.currentTimeMillis(); 
    NotificationManager notificationManager = (NotificationManager) 
      context.getSystemService(Context.NOTIFICATION_SERVICE); 
    Notification notification = new Notification(icon, message, when); 
    String title = context.getString(R.string.app_name); 

    // set intent so it does not start a new activity 
    notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | 
      Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    PendingIntent intent =PendingIntent.getActivity(context, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT); 
    notification.setLatestEventInfo(context, title, message, intent); 
    notification.flags |= Notification.FLAG_AUTO_CANCEL; 
    notificationManager.notify(0, notification); 
} 

Si noti che questo esempio utilizza le risorse in R.drawable e R.String che devono essere presenti al lavoro, ma dovrebbe dare l'idea. Vedere questo per ulteriori informazioni sulle notifiche di stato http://developer.android.com/guide/topics/ui/notifiers/index.html e questo sui ricevitori di trasmissione. http://developer.android.com/reference/android/content/BroadcastReceiver.html

+0

E 'fantastico, molte grazie. –

+0

Ciao, ho usato questo plugin https://github.com/marknutter/GCM-Cordova e ho seguito tutte le istruzioni. tuttavia, posso ricevere messaggi solo all'interno dell'app, ma non riesco a far sì che l'app visualizzi le notifiche nell'area di notifica di androidi. si prega di avvisare. Io uso questo plugin perché uso phonegap @Zachary Moshansky –

+0

Mi dispiace ma non ho mai usato PhoneGap e non sono in grado di commentare su come far funzionare le notifiche con esso –

1

Se si utilizza GcmListenerService è possibile utilizzare questo codice, aggiungere alla vostra onMessageReceived il sendNotification()

@Override 
public void onMessageReceived(String from, Bundle data) { 
     String message = data.getString("message"); 
     sendNotification(message); 
} 

private void sendNotification(String message) { 
     Intent intent = new Intent(this, YOURCLASS.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
     PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 
     PendingIntent.FLAG_ONE_SHOT); 

     Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
       .setSmallIcon(R.drawable.ic_park_notification) 
       .setContentTitle("Ppillo Message") 
       .setContentText(message) 
       .setAutoCancel(true) 
       .setSound(defaultSoundUri) 
       .setContentIntent(pendingIntent); 

     NotificationManager notificationManager = 
       (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

     notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); 
    }