如果我安装我的应用程序并启动它一次,然后关闭它并发送通知,则没有任何反应。如果我然后打开该应用程序,它会做出反应,就好像它收到了通知,但它抱怨缺少一些预期的数据。
然后,如果我打开应用程序并发送一些通知几次,即使应用程序完全关闭,最终通知也会以正方形的形式显示在系统托盘中。
最终,正方形变成了Android图标。
为什么系统需要一段时间才能"预热"才能正常工作?除非在应用程序运行时收到通知,否则它不知道要显示哪个图标吗?
这是如此代码...
在 OnCreate in 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)""
}
}
我认为从调试器启动会影响托盘中出现的通知。
如果我使用调试器安装,立即杀死应用程序,然后重新启动并立即杀死应用程序,通知显示正常。