FCM推送通知取决于应用程序状态

时间:2020-02-19 11:35:44

标签: android firebase push-notification firebase-cloud-messaging

我正在两个不同的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.启动并处于前台

0 个答案:

没有答案