安装后,通知不会在系统托盘中出现

时间:2018-05-02 17:53:22

标签: android firebase firebase-cloud-messaging

如果我安装我的应用程序并将其启动一次,然后将其关闭并发送通知,则不会发生任何事情。如果我然后打开应用程序,它会做出反应,好像已经收到通知但它抱怨某些预期数据丢失。

然后,如果我打开应用程序并多次发送一些通知,最终通知会在系统托盘中显示为方形,即使应用程序完全关闭。

然后最终,广场变成了Android图标。

为什么系统在正常工作之前“预热”需要时间?除非在应用程序运行时收到通知,否则它不知道要显示哪个图标?

这是代码......

在MainActivity的OnCreate中,最后有一个电话......

void HandleNotification()
{
    var intentBundler = Intent.Extras;

    if (intentBundler != null)
    {
        var jobId = intentBundler.GetString("id");

        DroidNotificationStrategy.ReceivedNotification(this, Convert.ToInt32(jobId));
    }
}

在清单......

<application android:label="Connection Crew">
    <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>
</application>

Firebase服务......

namespace FCMClient
{
    [Service]
    [IntentFilter(new[] { "com.google.firebase.INSTANCE_ID_EVENT" })]
    public class FirebaseIIDService : FirebaseInstanceIdService
    {
        const string TAG = "MyFirebaseIIDService";

        public static string GetToken() => FirebaseInstanceId.Instance.Token;

        public override void OnTokenRefresh()
        {
            var refreshedToken = FirebaseInstanceId.Instance.Token;

            Log.Debug(TAG, "Refreshed token: " + refreshedToken);

            MessagingCenter.Send<object, (EnumDeviceType, string)>(
                this, "RegisterDevice", (EnumDeviceType.Droid, refreshedToken));
        }

    }

    [Service]
    [IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })]
    public class CCFirebaseMessagingService : FirebaseMessagingService
    {
        public override void OnMessageReceived(RemoteMessage message)
        {
            var appointmentId = Convert.ToInt32(message.Data["id"]);

            DroidNotificationStrategy.ReceivedNotification(this, appointmentId);
        }
    }
}

消息。 (“xxBODYxx”已被替换。)

@"{
      ""notification"" : {
         ""body"" : ""xxBODYxx"", 
         ""title"" : ""Job"",
         ""icon"": ""ic_notification""
      }, 
       ""data"": {
         ""id"": ""#(JobId)""
      }
}

1 个答案:

答案 0 :(得分:0)

我认为从调试器启动会影响托盘中显示的通知。

如果我使用调试器安装,立即终止应用程序,然后重新启动并立即终止应用程序,通知显示正常。