我正在两个不同的ANDROID设备上测试同一应用。
其中一个版本为8.1.0(Moto G5s),另一个版本为7.0(Galaxy A5)。
我正在使用Firebase CloudMessaging。
场景1:从Firebase控制台发送的推送,应用已关闭,两台设备均收到通知并在状态栏上显示通知
场景2:从Firebase控制台发送的推送,应用已启动,但在后台,两台设备都会收到通知并在状态栏上显示通知
方案3:从Firebase控制台发送的推送,应用已启动,并且在前台,两个设备都收到通知,但只有7.1设备在状态栏上显示通知。
这是AndroidManifest中的代码:
<service
android:name=".activity.MyFirebaseService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
这是MyFirebaseService文件:
public class MyFirebaseService extends FirebaseMessagingService {
@Override
public void onNewToken(String s) {
FirebaseInstanceId.getInstance().getInstanceId()
.addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
@Override
public void onComplete(@NonNull Task<InstanceIdResult> task) {
if (!task.isSuccessful()) {
Log.w( "getInstanceId failed", task.getException());
return;
}
// Get new Instance ID token
String token = task.getResult().getToken();
Log.e("My Token",token);
}
});
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
Log.d("push recibida","push reecibida "+remoteMessage);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, "channel_id")
.setContentTitle(remoteMessage.getNotification().getTitle())
.setContentText(remoteMessage.getNotification().getBody())
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setStyle(new NotificationCompat.BigTextStyle())
.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
.setSmallIcon(R.mipmap.ic_launcher)
.setAutoCancel(true);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, notificationBuilder.build());
}
}
我想了解这3种情况的说明,然后希望您可以根据应用程序的状态决定是否显示通知图标: 1.未启动 2.已启动但在后台 3.启动并处于前台