处理多个推送通知点击Android

时间:2017-07-04 08:36:06

标签: android firebase push-notification notifications firebase-cloud-messaging

我在我的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();
        }

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

如果您的所有通知都具有相同的.close(),则会按Android分组,然后您只能获得最新通知。 我无法从您的代码中看到您的tag是否为唯一值(因此您可以在设备的通知栏中并排显示它们)。

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

  • 如果您的应用未运行或在后台运行,通知会显示在通知栏
  • 如果您的应用处于前台有效状态,则会显示无通知,而是直接在data中调用回调onMessageReceived回调(这是回调,即如果从FCM收到仅数据消息,也会调用此消息

另见FCM notification merge

希望这有帮助, 欢呼声