我知道它对这个主题有很多疑问,但没有人在我的项目中工作,我也不知道为什么。
我使用Firebase,如果我的应用是开放的,或者在后台,他会收到消息,但是当我杀了我的应用时,看起来不会更多。
使用Android 8.0
我的代码: 的AndroidManifest.xml
<meta-data
android:name="com.google.firebase.messaging.default_notification_icon"
android:resource="@drawable/default_notification_icon" />
<meta-data
android:name="com.google.firebase.messaging.default_notification_color"
android:resource="@color/colorPrimary" />
<meta-data android:name="com.google.firebase.messaging.default_notification_channel_id"
android:value="@string/default_notification_channel_id" />
<service
android:name=".service.PineFirebaseMessagingService"
android:enabled="true"
android:exported="true"
android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
</intent-filter>
</service>
<service
android:name=".service.PineFirebaseInstanceIDService"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
FirebaseMessagingService.java
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
channelId = getString(R.string.default_notification_channel_id);
Log.i("Msg", "Message received [" + remoteMessage.getData() + "]");
Intent intent = new Intent(this, HomeActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, id, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new
NotificationCompat.Builder(this, channelId)
.setSmallIcon(R.drawable.default_notification_icon)
.setColor(ContextCompat.getColor(this, R.color.colorPrimary))
.setContentTitle(remoteMessage.getData().get("title"))
.setContentText(remoteMessage.getData().get("message"))
.setAutoCancel(true)
.setContentIntent(pendingIntent)
.setSound(defaultSoundUri);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel mChannel = new NotificationChannel(
channelId,
remoteMessage.getData().get("title"),
NotificationManager.IMPORTANCE_HIGH);
mChannel.setDescription(remoteMessage.getData().get("message"));
mChannel.enableLights(true);
mChannel.enableVibration(true);
mChannel.setLightColor(Color.BLUE);
notificationManager.createNotificationChannel(mChannel);
notificationManager.cancel(id);
}
notificationManager.notify(id, notificationBuilder.build());
}
FirebaseInstanceIdService.java
@Override
public void onTokenRefresh() {
super.onTokenRefresh();
String refreshedToken = FirebaseInstanceId.getInstance().getToken();
Log.d("Token", "Refreshed token: " + refreshedToken);
}
C#中的代码发送推送
async Task SendPushAndroidAsync(Device device, InArgumentRequest push, Notification notification)
{
var applicationID = configuration["Push:Google:ApplicationKey"];
var data1 = new
{
to = DeviceIdEnviroment(device.Token, true),
android = new {
priority = "normal"
},
data = new
{
notificationId = notification.Id,
title = notification.Title,
message = notification.Message,
type = notification.Type,
date = notification.DateCreated.ToString("dd/MM/yyyy HH:mm"),
android_channel_id = "channelidandroid"
}
};
try
{
var jsonBody = JsonConvert.SerializeObject(data1);
using (var httpRequest = new HttpRequestMessage(HttpMethod.Post, "https://fcm.googleapis.com/fcm/send"))
{
httpRequest.Headers.TryAddWithoutValidation("Authorization", "key=" + applicationID);
httpRequest.Content = new StringContent(jsonBody, Encoding.UTF8, "application/json");
using (var httpClient = new HttpClient())
{
var result = await httpClient.SendAsync(httpRequest);
if (result.IsSuccessStatusCode)
{
await UpdateStatusNotification(notification, true);
}
else
{
await UpdateStatusNotification(notification, false, result.ReasonPhrase);
}
}
}
}
catch (Exception ex)
{
string error = ex.InnerException.Message;
await UpdateStatusNotification(notification, false, error);
}
}
谢谢!
答案 0 :(得分:0)
你需要去设置&gt; <电池优化>并为您的应用禁用它。因为这会阻止您的应用程序运行后台服务
答案 1 :(得分:0)
android
内的 var data1 = new
{
to = DeviceIdEnviroment(device.Token, true),
priority = "high",
data = new
{
notificationId = notification.Id,
title = notification.Title,
message = notification.Message,
type = notification.Type,
date = notification.DateCreated.ToString("dd/MM/yyyy HH:mm"),
android_channel_id = "channelidandroid"
}
};
should not be nested消息,应该有价值&#34;高&#34;:
regex = r'^(?P<line_num>\d{6})(?P<line>.*#include\s+(\".*\\.*\"|<.*\\.*>).*$)'
由于设备处于打盹模式或应用程序处于应用待机模式,您可能无法收到消息。这是explained in the documentation。
在对您的邮件进行更改后,您可以致电RemoteMessage.getOriginalPriority()确认收到的邮件是高优先级。