Android FCM 徽章在后台不工作

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

我想在后台更新徽章,我使用了通知样式,但没有用。我不想使用数据样式,因为只出现了一个通知。 请帮助我想检查后台推送和更新徽章

public void zzm(Intent intent) {

    Set<String> keys = intent.getExtras().keySet();
    for (String key : keys) {
        try {

            if (key.equals("badge")) {
                String cnt = intent.getExtras().get(key).toString();
                int badgeCount = Integer.valueOf(cnt);
                ShortcutBadger.applyCount(this, badgeCount);

            }
        } catch (Exception e) {
            Log.i("uniqbadge", "zzm Custom_FirebaseMessagingService" + e.getMessage());
        }
    }

    super.zzm(intent);
}

//这是接收到的代码

  public void onMessageReceived(RemoteMessage remoteMessage) {

        showNotification(remoteMessage.getData().get("title"), remoteMessage.getData().get("message"));

        set_alarm_badge();
        }

//我的通知设置

  private void showNotification(String title, String message) {
        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent,
                PendingIntent.FLAG_ONE_SHOT);

        Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
        NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle(title)
                .setContentText(message)
                .setAutoCancel(true)
                .setSound(defaultSoundUri)
                .setContentIntent(pendingIntent);

        NotificationManager notificationManager =
                (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        notificationManager.notify(0, notificationBuilder.build());

    }

//这是我的徽章更新

public void set_alarm_badge(){
    Context context=getApplicationContext();
    Intent launchIntent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName());
    Intent intent = new Intent("android.intent.action.BADGE_COUNT_UPDATE");


    MainActivity.badge_count++;
    intent.putExtra("badge_count", MainActivity.badge_count);
    intent.putExtra("badge_count_package_name",getApplicationContext().getPackageName());
    intent.putExtra("badge_count_class_name",MainActivity.class.getName());

        if(Build.VERSION.SDK_INT> Build.VERSION_CODES.GINGERBREAD_MR1) {
        intent.setFlags(0x00000020);
    }
    if (canResolveBroadcast(getApplicationContext(), intent)) {
        Log.d("TAG", "hi ");
        getApplicationContext().sendBroadcast(intent);

    }
}

最佳答案

@Override
public void handleIntent(Intent intent) {
    Bundle bundle = intent.getExtras();
    // get your badge key from bundle
    ShortcutBadger.applyCount(this, "Your Badge Count");
    sendNotification(intent);
}

只需在 FirebaseMessagingService 中覆盖此方法,即使应用程序处于前台、后台或被终止,它也能正常工作。无需额外服务或警报,这是来自 FCM 的方法。

关于Android FCM 徽章在后台不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45812200/

相关文章:

android - 在Android TimePickerDialog 的EditText 中获取时间显示

android - FragmentTabHost FragmentManager 无效

ios - 火力地堡存储 : child() doesn't work with iOS App

java - Firebase 实时数据库更新数据 - Android Java

android - 包含 path_provider 时出错

java - 在服务接收器中使用什么来实例化对象的正确上下文是什么?

push-notification - 如何从头开始创建推送通知服务器

android - 出现推送通知时调用 Asynctask

android - 有没有办法在不加载Android中所有节点数据的情况下获取节点的子节点数?

ios - Firebase 推送未在 iOS 应用中显示