Ionic 应用程序处于最小化状态时接收推送通知时出错:以S+(版本31及更高版本)为目标需要FLAG_IMMUTABLE或FLAG_MUTABLE之一

1cosmwyk  于 2023-02-01  发布在  Ionic
关注(0)|答案(1)|浏览(135)

当我们在应用暂时处于后台时收到应用上的推送通知时,我们会收到此错误:以S+(版本31及更高版本)为目标需要FLAG_IMMUTABLE或FLAG_MUTABLE之一

我们已经看到,对于android sdk 31,可以使用并且兼容firebaseMessaging的最低版本是20.2.4。

dbf7pr2w

dbf7pr2w1#

我不确定你想做什么或者你使用的是什么插件。我不是android的Maven,但是我认为当你试图创建一个在通知到达时触发的intent时会发生这个错误。

1.如果使用电容器:

我建议您使用这个插件:push-notifications。您不会遇到任何问题。

2.如果您可以编辑通知安卓代码:

你应该有一个像PendingIntent.getActivity(...)这样的函数,在这个函数中,你必须添加PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE
结果示例:

PendingIntent.getActivity(context, PENDING_INTENT_REQUEST_CODE++, intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE)

这是我用来创建Intent的函数,以防它对某些人有用:

private static PendingIntent createIntent(Context context, Map<String, String> data) {
        Intent intent = context.getPackageManager()
                .getLaunchIntentForPackage(context.getPackageName())
                .setPackage(null)
                .setAction(context.getResources().getString(R.string.intent_filter_action_fullscreennotification_trigger))
                .setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);

        if(data != null) {
            for (var entry : data.entrySet()) {
                //System.out.println(entry.getKey() + "/" + entry.getValue());
                intent.putExtra(entry.getKey(), entry.getValue());
            }
        }
        return PendingIntent.getActivity(context, PENDING_INTENT_REQUEST_CODE++, intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
    }

相关问题