In Vorheriger Artikel habe ich bestätigt, dass Push-Benachrichtigungen vom Server an Android gesendet werden können, und schließlich bestätigt, wie der Prozess auf der Android-Seite ausgeführt wird, wobei dies als Auslöser verwendet wird. Machen.
Wie in hier zusammengefasst, wenn sich die App im Vordergrund und im Hintergrund befindet Und die Behandlung ändert sich leicht. Jedes ist unten gezeigt.
Wenn sich Ihre App im Vordergrund befindet, können Sie Nachrichten empfangen, indem Sie die Klasse "FirebaseMessagingService" des Pakets "com.google.firebase.messaging.FirebaseMessagingService" erweitern. Zwei vorherige Artikel entspricht "MyFirebaseMessagingService.kt". Im Folgenden wird dies Iji genannt.
Die Spezifikationen der Klasse "FirebaseMessagingService" sind in [hier] zusammengefasst (https://firebase.google.com/docs/reference/android/com/google/firebase/messaging/FirebaseMessagingService?hl=ja). Es stehen mehrere Rückrufmethoden zur Verfügung, die von der Erweiterungsklasse überschrieben werden.
--onDeletedMessages ()
: Wenn eine Nachricht gelöscht wird, weil die Nachricht aus irgendeinem Grund unbeaufsichtigt bleibt, z. B. wenn das Terminal längere Zeit nicht auf den Server zugreift.
--onDestroy ()
: Unbekannt, weil nichts geschrieben ist. Läuft wahrscheinlich beim Beenden der App.
--onMessageReceived (RemoteMessage-Nachricht)
: Wenn eine Nachricht empfangen wird.
--onMessageSent (String msgId)
: Wenn eine Nachricht erfolgreich an den GCM-Verbindungsserver gesendet wurde.
--onNewToken (String token)
: Wenn ein neues Token generiert wird.
--onSendError (String msgId, Ausnahme Ausnahme)
: Wenn das Senden einer Nachricht an den GCM-Verbindungsserver fehlschlägt.
Wenn sich die App im Hintergrund befindet, wird die Benachrichtigung an die Taskleiste des Geräts gesendet, und die Datennutzlast wird an den zusätzlichen Teil der Absicht der Startaktivität gesendet. Es ist geschrieben als . Nach dem Überprüfen verschiedener Dinge scheint es, dass es aus
intent.getExtras ()` entfernt werden sollte.
Die vom Server gesendete Nachricht entspricht fast der von Vorheriger Artikel. Es wird jedoch nur der Datenteil wie folgt geändert.
data={
'date': '20200628',
'message': 'Dies ist eine Testnachricht'
}
Auf der Clientseite sieht "MyFirebaseMessagingService.kt" so aus.
class MyFirebaseMessagingService: FirebaseMessagingService() {
override fun onNewToken(token: String) {
Log.d(TAG, "Refreshed token: $token")
}
override fun onMessageReceived(p0: RemoteMessage) {
super.onMessageReceived(p0)
val date = p0.data["date"]!!.toInt()
val message = p0.data["message"]!!
val dao = NotificationsDAO(this)
dao.createNotification(MyNotification(-1, date, message)) //Daten werden in MySQL gespeichert (Erklärung weggelassen)
}
}
Und MainActivity.kt
ist wie folgt.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
override fun onStart() {
super.onStart()
val dao = NotificationsDAO(this)
if (intent.getExtras() != null) {
val date = intent.getExtras().getString("date").toInt()
val message = intent.getExtras().getString("message")
dao.createNotification(MyNotification(-1, date, message)) //Daten werden in SQLite gespeichert (Erklärung weggelassen)
}
val messageList = dao.getAll() //Alle Daten wurden von SQLite erfasst (Erklärung weggelassen)
val listView: ListView = findViewById(R.id.listView)
listView.adapter = MessageListAdapter(this, android.R.layout.simple_list_item_1, messageList.take(10))
}
}
Als in diesem Zustand eine Anforderung vom Server ausgegeben wurde, wurde bestätigt, dass die Benachrichtigung wie erwartet geflogen ist und dass die Daten in SQLite auf der Android-Seite gespeichert wurden, wie in Abb. 1 dargestellt. (Die Anzeige von "ListView" wird von der Klasse "MessageListAdapter" formatiert. Die Erklärung wird diesmal weggelassen.)
Abbildung 1 Anzeige der App nach Datenempfang.
Ich konnte bestätigen, was ich tun wollte, daher ist diese Umfrage beendet.