在Android中处理多个推送通知点击

Posted

技术标签:

【中文标题】在Android中处理多个推送通知点击【英文标题】:Handle muliple push notifications click in Android 【发布时间】:2017-12-07 15:10:11 【问题描述】:

我在我的 android 应用程序中使用 FCM 通知。当应用程序处于后台时,通知单击导航到 MainActivity。只有当只有一个通知时才会发生这种情况,当有多个通知时,只有最后一个通知才能启动应用程序。 一旦应用程序进入前台,通知点击就不会发生。如果我关闭应用程序并单击通知栏中的下一个通知,则应用程序会再次打开。

我认为通知负载中的通知操作存在问题。

   <application
    android:name=".MyApplication"
    android:allowBackup="false"
    android:icon="@mipmap/ic_launcher"
    android:launchMode="singleTop"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    tools:replace="android:allowBackup">

    <!-- tools:replace="android:theme" -->
    <!-- Launch Flow -->
    <activity
        android:name=".ui.activity.MainActivity"
        android:screenOrientation="portrait"
        android:theme="@style/SplashTheme">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

        <intent-filter>
            <action android:name="myAction" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
    </activity>


    <!-- [START firebase_service] -->
    <service android:name=".service.MyFirebaseMessagingService">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
    <!-- [END firebase_service] -->


    <!-- [START firebase_iid_service] -->
    <service android:name=".service.MyFirebaseInstanceIDService">
        <intent-filter>
            <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
        </intent-filter>
    </service>
    <!-- [END firebase_iid_service] -->


</application>

这是我的通知 json。



"notification":
    "title":"Jogn Doe",
    "body":"Jogn commented on your post",
    "sound":"mySound",
    "tag":"88211407420864",
    "click_action":"myAction"
,
"data":
    "notificationCount":2,
    "creatorName":"John Doe",
    "creatorImage":"https://image.com/sample.png",
    "notificationId":"88335540289536",
    "universityId":"8821098664448"
,
    "to":"fYu_ybp3Wu8:APA91bHxOact-9gcqf7rAqNSPSkvU7N5h4t4m0XgCAHBdu"

我在 onCreate 方法中执行此操作..

Intent intent = new Intent(LauncherActivity.this, PostFeedActivity.class);
    if (getIntent().getAction().equalsIgnoreCase("myAction")) 
        Bundle extras = getIntent().getExtras();
        String universityId = extras.getString(getString(R.string.notification_university));

        String notificationId = extras.getString(getString(R.string.notification_id));
        String notificationCreatorName = extras.getString(getString(R.string.notification_creator_name));
        String notificationCreatorImage = extras.getString(getString(R.string.notification_creator_image));
        int notificationCount = extras.getInt(getString(R.string.notification_count), 0);
        if (!TextUtils.isEmpty(notificationId)) 
            intent.setAction(getString(R.string.action_notification_from_push));

            intent.putExtra(getString(R.string.notification_count),
                    notificationCount);
            intent.putExtra(getString(R.string.notification_id),
                    notificationId);
            intent.putExtra(getString(R.string.notification_creator_name),
                    notificationCreatorName);
            intent.putExtra(getString(R.string.notification_creator_image),
                    notificationCreatorImage);

            //fetch notification data by calling API and start activity
            requestNotification(notificationId, intent);
            //

         else 
            startActivity(intent);
            finish();
        

【问题讨论】:

【参考方案1】:

我知道这有点晚了,但对于仍然遇到同样问题的人来说。 你看到待处理的 Intent 有一些 FLAGS 可以帮助你处理通过通知的意图。而您只有一个响应通知的原因是他们正在调用相同的意图,在这种情况下,结果取决于您的待处理结果 FLAG,PendingIntent 请参阅此以获取更多信息。 因此,如果您收到具有相同操作或意图的通知,建议您将待处理的 Intent FLAG 设置为“FLAG_UPDATE_CURRENT”,这样即使在后台/前台已经存在具有相同操作的意图,它也会打开它并使用您的新数据更新它额外通知,希望对您有所帮助。

【讨论】:

【参考方案2】:

如果您的所有通知都具有相同的tag,它们将按 android 分组,那么您只有最新的通知可用。 我无法从您的代码中看到您的 tag 是否是唯一值(因此您在设备的通知栏中并排显示它们)。

只要你有一个notification 对象而不仅仅是data,android 就会部分控制通知,这意味着:

如果您的应用没有运行或在后台,通知会显示在通知栏上 如果您的应用处于前台活动状态,则不显示通知,而是直接在您的FirebaseMessagingService 中调用回调onMessageReceived 回调(如果您在接收来自 FCM 的纯数据消息)

参见此处FCM notification merge

希望这会有所帮助, 干杯

【讨论】:

当应用在前台时,通知工作正常。但是当应用程序在后台运行时会出现我的问题。而且标签是独一无二的。 你能在myAction中显示代码吗?您如何处理点击? 我在我的问题中添加了这个:)

以上是关于在Android中处理多个推送通知点击的主要内容,如果未能解决你的问题,请参考以下文章

如何在Android中堆叠推送通知?

在 Android 中处理解析推送通知

iOS 关于信鸽推送点击推送通知的处理

Android 通知 - 为多个用户推送通知

在 Android 中点击 One Signal 推送通知时如何导航到特定页面?

如何在 Android 中禁用多个推送通知图标,我正在使用 Parse.com