无法在 Ioinic Angular 应用程序中清除 Android 上的 FCM 通知徽章计数

问题描述 投票:0回答:1

我正在开发一个 Ionic Angular 应用程序,使用 Firebase FCM 发送推送通知,并在用户进入/离开应用程序后使用 电容徽章 清除计数。 AndroidNotification 接口(位于 AndroidConfig 接口内部)内部是 notificationCount 属性,用于设置应用程序的徽章计数。当我在电容器徽章插件上使用清除方法时,它不会清除通过 FCM AndroidNotification 接口发送的推送通知计数。但是,如果我通过电容器徽章插件设置计数并清除,那么就可以了。具体来说,这里有一些有助于澄清的步骤 -

  1. 发送两条推送通知,应用徽章计数增加到 2
  2. 打开App并触发Badge.clear,但徽章数量2保持不变
  3. 再次打开应用程序并触发 Badge.set 命令到数字 20
  4. 离开应用程序,应用程序徽章计数显示 20
  5. 现在打开App并触发通过Badge.clear清除徽章计数并离开App
  6. 应用程序徽章计数返回到 2,即原始推送通知计数,同时清除通过 Badge.set 设置的 20

我正在尝试了解并清除 Android 设备上通过 notificationCount 设置的徽章计数。相应的设置和清除行为在 iOS 设备上运行良好,可清除推送通知计数设置 FCM。

我不确定,但我怀疑 Android 问题可能与 Android 中的频道有关。 AndroidNotification 接口的文档包含通道 id

/**
 * The Android notification channel ID (new in Android O). The app must create
 * a channel with this channel ID before any notification with this channel ID
 * can be received. If you don't send this channel ID in the request, or if the
 * channel ID provided has not yet been created by the app, FCM uses the channel
 * ID specified in the app manifest.
 */
channelId?: string;

没有创建或设置通道,因此默认行为似乎是“FCM 使用应用程序清单中指定的通道 ID”。我不确定这指的是哪个频道 ID,因为我的 AndroidManifest.xml 文件中没有设置任何内容。

我的环境的离子信息输出包含在下面。

Ionic:

   Ionic CLI                     : 7.1.1 (/Users/<username>/.nvm/versions/node/v20.2.0/lib/node_modules/@ionic/cli)
   Ionic Framework               : @ionic/angular 6.7.5
   @angular-devkit/build-angular : 16.2.12
   @angular-devkit/schematics    : 16.2.12
   @angular/cli                  : 16.2.12
   @ionic/angular-toolkit        : 6.1.0

Capacitor:

   Capacitor CLI      : 5.7.0
   @capacitor/android : 5.7.0
   @capacitor/core    : 5.7.0
   @capacitor/ios     : 5.7.0

Cordova:

   Cordova CLI       : 12.0.0 ([email protected])
   Cordova Platforms : android 9.1.0, browser 6.0.0, ios 6.2.0
   Cordova Plugins   : cordova-plugin-ionic-webview 4.2.1, (and 3 other plugins)

Utility:

   cordova-res : 0.15.4
   native-run  : 2.0.1

System:

   ios-sim : 8.0.2
   NodeJS  : v20.2.0 (/Users/<username>/.nvm/versions/node/v20.2.0/bin/node)
   npm     : 9.6.6
   OS      : macOS Unknown
   Xcode   : Xcode 15.4 Build version 15F31d

寻求如何调试问题的帮助。我怀疑推送通知使用不同的通道来设置徽章计数,而电容器徽章使用其他通道来设置和清除 Android 的徽章计数,但我不确定它到底是如何工作的。

我已在电容器插件项目和相应的shortCutBadger项目发布了此问题,但尚未收到任何意见。希望在这里得到一些指示/帮助,特别是关于 Android 中通道的可能含义。

谢谢, 桑杰。

firebase ionic-framework firebase-cloud-messaging ionic6 capacitor-plugin
1个回答
0
投票

要解决在 Ionic Angular 应用程序中清除 Android 上的 FCM 通知徽章计数的问题,您可以尝试以下步骤:

1.验证通道 ID

确保 FCM 通知和徽章插件使用相同的通知通道 ID。如果使用特定渠道设置通知计数,您需要清除同一渠道的徽章计数。

2.检查通知权限

确保您的应用程序具有修改通知徽章所需的权限。在您的

AndroidManifest.xml
中包含以下权限:

<uses-permission android:name="com.google.android.gms.permission.ACTIVITY_RECOGNITION" />
<uses-permission android:name="com.sec.android.provider.badge.permission.READ" />
<uses-permission android:name="com.sec.android.provider.badge.permission.WRITE" />

3.在 FCM 服务中实现徽章清除逻辑

扩展 FirebaseMessagingService 并重写

onMessageReceived
方法,以在用户与通知交互时清除徽章计数。将其添加到您的
MainActivity.java
或创建新服务:

import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
import me.leolin.shortcutbadger.ShortcutBadger;

public class MyFirebaseMessagingService extends FirebaseMessagingService {

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);
        
        // Handle FCM messages here.
        // Check if the message contains a data payload.
        if (remoteMessage.getData().size() > 0) {
            // Process the data payload here
        }
        
        // Check if the message contains a notification payload.
        if (remoteMessage.getNotification() != null) {
            // Process the notification payload here
        }

        // Clear badge count
        ShortcutBadger.removeCount(getApplicationContext());
    }
}

4.确保徽章插件正确集成

确保您已正确集成徽章插件以设置和清除徽章计数。查看Capacitor Badger插件文档中的安装和使用说明:

import { Badge } from '@capacitor/badge';

async function clearBadgeCount() {
    await Badge.clear();
}

// Call this function when the app is opened or the notification is read
clearBadgeCount();

5.调试和测试

  • 通过手动设置和清除徽章计数来测试徽章清除功能,以确定问题是否出在 FCM 或徽章插件上。
  • 检查日志中是否有任何可能表明出现问题的错误或警告。
  • 如果可能,请在不同的 Android 设备上进行测试,因为制造商之间的徽章实现可能有所不同。

6.更新依赖项

确保所有依赖项都是最新的,包括 Ionic、Capacitor 和相关插件:

npm install @capacitor/android@latest
npm install @capacitor/core@latest
npm install @ionic/angular@latest

7.检查已知问题

查看 GitHub 上的Capacitor Badge 插件问题,了解任何类似的报告问题和可能的解决方案。

通过执行以下步骤,您应该能够通过清除 Android 上的 FCM 通知徽章计数来识别并解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.