Если я устанавливаю свое приложение и запускаю его один раз, а затем закрываю и отправляю уведомление, ничего не происходит. Если я затем открываю приложение, оно реагирует так, как будто ему было дано уведомление, но жалуется, что некоторые ожидаемые данные отсутствуют.
Затем, если я несколько раз открою приложение и отправлю какое-нибудь уведомление, в конце концов уведомления появятся на панели задач в виде квадрата, даже если приложение полностью закрыто.
Затем, в конце концов, квадрат превращается в значок Android.
Почему системе требуется время для прогрева, прежде чем она начнет работать правильно? Разве он не знает, какой значок показывать, если не получено уведомление во время работы приложения?
Вот так код ...
В OnCreate в MainActivity в конце есть вызов ...
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>
Пожарная служба ...
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)""
}
}