2016-08-04 31 views
0

Ich habe Push-Benachrichtigungen mit Azure Notification Hub implementiert. Ich habe festgestellt, dass sie nur drei Überschreibung Methoden haben beim Ausfahren NotificationHandler:Wie man weiß, wenn der Druck geöffnet ist; Benachrichtigungs-Hub für Azure Push-Benachrichtigungen?

public void onReceive(Context context, Bundle bundle) 

public void onUnregistered(Context context, String gcmRegistrationId) 

public void onRegistered(Context context, String gcmRegistrationId) 

meisten Push-Benachrichtigungsdienste haben eine onPushOpen() oder onOpen() Callback-Methode, die aufgerufen wird, wenn ein Benutzer drückt auf die Push-Benachrichtigung sie empfangen. Woher weiß ich, wann jemand auf die erhaltene Push-Benachrichtigung geklickt hat? Ich experimentiere mit der Demo. Alles funktioniert abzüglich der Sorge, die ich gesagt habe.

-Link: https://github.com/Azure/azure-notificationhubs-samples/blob/master/Android/GetStartedFirebase/app/src/main/java/com/example/microsoft/getstartednh/MyHandler.java

public class MyHandler extends NotificationsHandler { 
    public static final int NOTIFICATION_ID = 1; 
    private NotificationManager mNotificationManager; 
    NotificationCompat.Builder builder; 
    Context ctx; 

    @Override 
    public void onReceive(Context context, Bundle bundle) { 
     ctx = context; 
     String nhMessage = bundle.getString("message"); 
     sendNotification(nhMessage); 
     if (MainActivity.isVisible) { 
      MainActivity.mainActivity.ToastNotify(nhMessage); 
     } 
    } 

    private void sendNotification(String msg) { 

     Intent intent = new Intent(ctx, MainActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

     mNotificationManager = (NotificationManager) 
       ctx.getSystemService(Context.NOTIFICATION_SERVICE); 

     PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0, 
       intent, PendingIntent.FLAG_ONE_SHOT); 

     Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     NotificationCompat.Builder mBuilder = 
       new NotificationCompat.Builder(ctx) 
         .setSmallIcon(R.mipmap.ic_launcher) 
         .setContentTitle("Notification Hub Demo") 
         .setStyle(new NotificationCompat.BigTextStyle() 
           .bigText(msg)) 
         .setSound(defaultSoundUri) 
         .setContentText(msg); 

     mBuilder.setContentIntent(contentIntent); 
     mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build()); 
    } 
} 

Antwort

0

Für jemand anderes versucht, dies herauszufinden, ist es eigentlich ganz einfach ist. In der Methode sendNotification() müssen Sie die Informationen, die Sie beim Öffnen der Push-Benachrichtigung verfolgen möchten, als Extras zu Ihrer Absicht hinzufügen. Beispielsweise.

private void sendNotification(String msg) { 

     Intent intent = new Intent(ctx, MainActivity.class); 
     intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 

     // seeking to do something specific when notification is opened if flag is set 
     intent.putExtra("onPushOpen", "performSomeAction"); 

     mNotificationManager = (NotificationManager) 
       ctx.getSystemService(Context.NOTIFICATION_SERVICE); 

     PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0, 
       intent, PendingIntent.FLAG_ONE_SHOT); 

     Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     NotificationCompat.Builder mBuilder = 
       new NotificationCompat.Builder(ctx) 
         .setSmallIcon(R.mipmap.ic_launcher) 
         .setContentTitle("Notification Hub Demo") 
         .setStyle(new NotificationCompat.BigTextStyle() 
           .bigText(msg)) 
         .setSound(defaultSoundUri) 
         .setContentText(msg); 

     mBuilder.setContentIntent(contentIntent); 
     mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build()); 
    } 

Jetzt haben Sie dies getan. Überprüfen Sie in onResume() nach dieser Information. Es ist leer (Null), wenn die Push-Benachrichtigung nicht aufgerufen wird. Andernfalls werden Ihre Informationen angezeigt.

Bundle b = getIntent().getExtras(); 
// now retrieve what you want from the bundle.