2017-05-21 11 views
0

Wenn ich eine Benachrichtigung nach API senden. Ich habe click_action und config im Manifest übergeben. Aber ich weiß nicht, wo ich das Clickereignis bekommen kann. Ich bin eine neuere Android-Entwicklung. Ich möchte den Klick-Callback erhalten, wenn ich auf die Benachrichtigung klicke. Was soll ich als nächstes tun? Ich suchte einige Antworten auf der Website, aber keine von ihnen erzählt einige Details. Hoffe, einige können mir helfen. DankbarkeitGCM Push-Benachrichtigung, Benachrichtigung klicken Ereignis

Antwort

1

Sie müssen in Ihrer AndroidManifest.xml einen Intent-Filter für die Aktivität hinzufügen, die beim Klicken auf die Benachrichtigung geöffnet werden soll.

Zum Beispiel:

<activity android:name=".SomeActivity"> 
     <intent-filter> 
      <action android:name="SOME_ACTION"/> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 

die Benachrichtigung klicken, wird diese Aktivität öffnen, wenn die Nachrichtennutzlast enthält (in der „Anmeldung“ Wörterbuch) folgendes:

"click_action":"SOME_ACTION" 

Wenn Sie möchten, einige laufen Logik, wenn die Benachrichtigung angeklickt wird, sollten Sie diese Logik in onCreate() Methode der Aktivität, die geöffnet werden.

+0

Vielen Dank für Ihre Antwort und tatsächlich habe ich getan, was Sie sagten, fügte einen Intent-Filter in meine manifest.xml und übergab click_action. Aber ich weiß nicht, welche Art von Code ich in meiner onCreate-Methode schreiben sollte. Ich kenne den Android-Code nicht, und ich wurde gebeten, diese Funktion zu beenden, also was ich tun sollte, ist, es zuerst zu beenden. Können Sie mir helfen, einen Beispielcode zur Verfügung zu stellen, wie ich ihn in meiner onCreate-Methode schreiben soll? Vielen Dank – wuzinong

+0

@wuzinong Das hängt davon ab, was Ihre App tun soll, wenn die Aktivität als Ergebnis des Klickens auf die Benachrichtigung geöffnet wird. Zum Beispiel könnte es einige benutzerdefinierte Daten lesen, die im "data" Dictionary der Nachricht übergeben wurden und etwas damit machen. – Eran

+0

Ja, ich lege meine Nachricht in Daten wie {data: {message: "a", title: "b"}, Benachrichtigung: {click_action: "SOME_ACTION"}} und rufe die API auf, um die Daten zu übergeben. Und auf Android-Seite, kann ich diese Daten bekommen, aber ich weiß nicht, wie man die Klick-Funktion in meinem Android-Code – wuzinong

0

Es gibt keine Callback per se für die Behandlung von Benachrichtigung klicken Ereignisse auf Android. Stattdessen wird ein PendingIntent beim Erstellen der Benachrichtigung verwendet.

Um das zu erreichen, was ich denke, Sie versuchen, zu erreichen, die verschiedenen Maßnahmen zu ergreifen, wie in den click_action Parametern im Info Körper vorgeschlagen, Sie können dies die FirebaseMessagingService im onMessageReceived Methode Ihrer Klasse müssen Griff erstreckt (gemäß der docs).

Sie können diesen Code-Block haben die Remote-Nachricht zu handhaben:

private void sendMessage(RemoteMessage remoteMessage) { 
    if (remoteMessage.getData() > 0) { 
     String action = remoteMessage.getData().get("click_action"); 

     // if you sent the notification with a "notification body", you can do this 
     String notificationBody = remoteMessage.getNotification().getBody(); 

     // create notification with the action and the notification body 
     createNotification(action, notificationBody); 
    } 
} 

private void createNotification(String action, String notificationBody){ 
    // create the intent and set the action 
    Intent intent = new Intent(getApplicationContext(), SomeActivity.class); 
    intent.setAction(action); 

    // create a pending intent 
    PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    // build the notification 
    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this) 
      .setSmallIcon(R.drawable.notification_icon) 
      .setContentTitle("My notification") 
      .setContentText(notificationBody) 
      .setContentIntent(pendingIntent); //set the content intent 

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

    // notificationId allows you to update the notification later on. 
    mNotificationManager.notify(notificationId, mBuilder.build()); 
} 

Sie können dann die spezifische Aktion innerhalb SomeActivity gehen abrufen, indem Sie den getIntent().getAction() verwenden und jeden Fall der Aktionen behandeln.

Zusammenfassend können Sie in Android keinen "Klick-Listener" für eine Benachrichtigung finden.

Sie können diese Links überprüfen: https://developer.android.com/guide/topics/ui/notifiers/notifications.html und https://firebase.google.com/docs/cloud-messaging/android/receive, um den Prozess weiter zu verstehen.

Prost.

+0

Ich verwendete micrisoft Azure Notification Hubs API, um die Nachricht Website senden: https: //docs.microsoft.com/en-us/azure/notification-hubs/notification-hub-android-push-notification-google-gcm-get- gestartet Und ich sehe, es gibt onReceive-Methode in NotificationsHandler, die bei Erhalt der Benachrichtigung aufgerufen wird. Ich frage mich, ob es funktioniert wie onNotificationClick, so kann ich mit der Benachrichtigung funktionieren click Funktion – wuzinong

+0

Und ich erweitert com.microsoft.windowsazure.notifications.NotificationsHandler diese Klasse, und ich kann sendMessage oder createNotification diese Funktionen in dieser Elternklasse nicht finden. auch für PendingIntent kann keine Referenz erhalten. Da wir den Microsoft Azure Notification Hub verwenden möchten, um alle Push-Benachrichtigungen der Plattform zu verwalten. Gibt es eine andere Methode, die ich verwenden kann? – wuzinong

Verwandte Themen