Wie funktionieren Pushnachrichten?

C

CoderboyPB

Neues Mitglied
1
Mir ist das Programmieren mit Notification Channels, Notification Manager, etc und z.B. Firebase bekannt.

Aber was ist die Verbindung zu nicht gestarteten Apps?
Wenn ich in einer App einen Notification Channel programmiere, erzeuge ich die dann im OS, so dass diese dann bei Bedarf die App 'weckt', welche dann eine Notification schickt?

Oder kurz: Ist der Notification Channel der Kommunikationsweg zur nicht aktivierten App?
 
Zuletzt bearbeitet:
@CoderboyPB

Zugegebener maßen verwirrt mich deine Frage ein wenig , denn ich kann nicht genau daraus erkennen , ob du von Notification oder Push sprichst. (Zwei paar Schuhe) - Siehe deinen Titel : Wie funktionieren Pushnachrichten ?

Ich nehme nun einmal an: Push - > die kommt von FCM/HMS , da du Firebase erwähnst.

Dann folgende Antwort :
Oder kurz: Ist der Notification Channel der Kommunikationsweg zur nicht aktivierten App?
Nein: Der Channel einer Notification gibt lediglich die interne UI Gruppierung vor.

Die Subscription deiner Push wird mit dem Topic auf dem Servern von FCM vorgenommen, nicht im Device
FCM , resp. HMS schickt dem Device dann im Message Header das entsprechende Content-JSON.


Code:
   @Override
    public void onMessageReceived(RemoteMessage remoteMessage)
    {
        super.onMessageReceived(remoteMessage);
        final Context mCtx = this;
        if (remoteMessage.getData() != null)
        {
                try
                {
                    String inStr = remoteMessage.getData().toString();
                    JSONObject inObj = new JSONObject(inStr);

Danach kannst du deine Notification erstellen .
Ab A13 dann mit einem runtime requesteten POST_NOTIFICATION

so dass diese dann bei Bedarf die App 'weckt',
Das klappt ab A11 nur mit einer HighPriority Push und dann auch nur für einige Sekunden.
Danach geht das System wieder in den DOZE.
High Priority Pushs sind ab einem bestimmten Volumen kostenpflichtig.

Vielleicht solltest du deinen Ablauf detaillierter darstellen.
 
Zuletzt bearbeitet:
Noch mal anders:
Hier 'lauscht' der FirebaseService auf einen einkommenden Push. Soweit so klar.
Aber was ist, wenn die App, dessen Teil der FireBaseService ist, nicht gestartet ist, wer lauscht dann nach Pushes?

C#:
public class FirebaseService : FirebaseMessagingService
    {
        public FirebaseService()
        {

        }

        public override void OnMessageReceived(RemoteMessage message)
        {
            base.OnMessageReceived(message);

            var notification = message.GetNotification();

            SendNotification(notification.Body, notification.Title, message.Data);
        }

        private void SendNotification(string messageBody, string title, IDictionary<string, string> data)
        {

            var intent = new Intent(this, typeof(MainActivity));
            intent.AddFlags(ActivityFlags.ClearTop);

            foreach (var key in data.Keys)
            {
                string value = data[key];
                intent.PutExtra(key, value);
            }

            var pendingIntent = PendingIntent.GetActivity(this,
                MainActivity.NotificationID, intent, PendingIntentFlags.OneShot);

            var notificationBuilder = new NotificationCompat.Builder(this, MainActivity.Channel_ID)
                .SetContentTitle(title)
                .SetSmallIcon(Resource.Mipmap.appicon)
                .SetContentText(messageBody)
                .SetChannelId(MainActivity.Channel_ID)
                .SetContentIntent(pendingIntent)
                .SetAutoCancel(true)
                .SetPriority((int)NotificationPriority.Max);

            var notificationManager = NotificationManagerCompat.From(this);
            notificationManager.Notify(MainActivity.NotificationID, notificationBuilder.Build());
        }
    }
 
Aber was ist, wenn die App, dessen Teil der FireBaseService ist, nicht gestartet ist, wer lauscht dann nach Pushes?
Der systeminterne Daemon - Der triggert deinen registierten Service.

Und die Angabe in der Manifest setzt diesen Service im System valid (mit der Installation des Pakets)
Bsp:
Code:
 <!-- /////// PUSH GOOGLE //////// -->
        <service
            android:name=".SYSTEM.WEATHERUPDATER.SystemFCMReceiver"
            android:exported="false">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: CoderboyPB

Ähnliche Themen

M
Antworten
3
Aufrufe
166
moin
M
OnkelLon
Antworten
13
Aufrufe
1.983
OnkelLon
OnkelLon
SaniMatthias
Antworten
19
Aufrufe
959
swa00
swa00
Zurück
Oben Unten