Получать push-уведомления Firebase - PullRequest
0 голосов
/ 20 ноября 2018

В моем приложении для Android мне нужно обрабатывать получение push-уведомлений Firebase, чтобы я мог управлять их идентификаторами (чтобы все уведомления отображались, а не заменяли друг друга) и чтобы я мог отображать значок приложения (устанавливая его с помощьюэлемент метаданных в манифесте Android не работает.)

Я создал службу обмена сообщениями для обработки входящих сообщений:

[Service (Name = "com.rpr.mobile.droid.LocalyticsFirebaseMessagingService")]
    [IntentFilter (new[] { "com.google.firebase.MESSAGING_EVENT" })]
    public class LocalyticsFirebaseMessagingService : FirebaseMessagingService {
        private static int notificationId = 0;

        public override void OnMessageReceived (RemoteMessage message) {
            if (!message.Data.ContainsKey ("ll")) {
                base.OnMessageReceived (message);
            } else {
                var body = message.GetNotification ().Body;
                if (!String.IsNullOrEmpty (body)) {
                    var mainIntent = new Intent (this, typeof (IntentActivity));
                    var deepLinkUrl = "";
                    if (message.Data.TryGetValue ("ll_deep_link_url", out deepLinkUrl))
                        mainIntent.SetData (Android.Net.Uri.Parse (deepLinkUrl));
                    var launchIntent = PendingIntent.GetActivity (this, 1, mainIntent, PendingIntentFlags.UpdateCurrent);

                    var builder = new NotificationCompat.Builder (this)
                        .SetSmallIcon (Resource.Drawable.logo_blue_small)
                        .SetContentTitle (GetString (Resource.String.application_name))
                        .SetContentText (body)
                        .SetStyle (new NotificationCompat.BigTextStyle ().BigText (body))
                        .SetContentIntent (launchIntent)
                        .SetDefaults (-1)
                        .SetAutoCancel (true);

                    var notificationManager = NotificationManagerCompat.From (this);
                    notificationManager.Notify (notificationId++, builder.Build ());
                }
            }
        }
    }

И я определил это в приложениираздел моего манифеста Android:

<service android:name="com.rpr.mobile.droid.LocalyticsFirebaseMessagingService">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
        </service>

Однако, когда я получаю push-уведомление, этот код никогда не вызывается, даже когда приложение находится на переднем плане.У меня был похожий код, который отлично работал для push-уведомлений GCM, но мне не повезло с Firebase.Чего мне не хватает?

1 Ответ

0 голосов
/ 20 ноября 2018

Вы должны добавить следующий код в файл манифеста Android в разделе приложения:

<receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" android:exported="false" />
    <receiver android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver" android:exported="true" android:permission="com.google.android.c2dm.permission.SEND">
        <intent-filter>
            <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
            <category android:name="${applicationId}" />
        </intent-filter>
    </receiver>

, и в вашем классе вы должны добавить вот так

[Service]
[IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })]
public class MessagingService : FirebaseMessagingService

, и этокод для получения токена

[Service]
[IntentFilter(new[] { "com.google.firebase.INSTANCE_ID_EVENT" })]
public class IDService : FirebaseInstanceIdService

также необходимо добавить файл google-services.json в свой проект с помощью действия сборки GoogleServicesJson

...