我正在开发一个 Ionic Angular 应用程序,使用 Firebase FCM 发送推送通知,并在用户进入/离开应用程序后使用 电容徽章 清除计数。 AndroidNotification 接口(位于 AndroidConfig 接口内部)内部是 notificationCount 属性,用于设置应用程序的徽章计数。当我在电容器徽章插件上使用清除方法时,它不会清除通过 FCM AndroidNotification 接口发送的推送通知计数。但是,如果我通过电容器徽章插件设置计数并清除,那么就可以了。具体来说,这里有一些有助于澄清的步骤 -
我正在尝试了解并清除 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 中通道的可能含义。
谢谢, 桑杰。
要解决在 Ionic Angular 应用程序中清除 Android 上的 FCM 通知徽章计数的问题,您可以尝试以下步骤:
确保 FCM 通知和徽章插件使用相同的通知通道 ID。如果使用特定渠道设置通知计数,您需要清除同一渠道的徽章计数。
确保您的应用程序具有修改通知徽章所需的权限。在您的
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" />
扩展 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());
}
}
确保您已正确集成徽章插件以设置和清除徽章计数。查看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();
确保所有依赖项都是最新的,包括 Ionic、Capacitor 和相关插件:
npm install @capacitor/android@latest
npm install @capacitor/core@latest
npm install @ionic/angular@latest
查看 GitHub 上的Capacitor Badge 插件问题,了解任何类似的报告问题和可能的解决方案。
通过执行以下步骤,您应该能够通过清除 Android 上的 FCM 通知徽章计数来识别并解决问题。