在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中处理多个推送通知点击的主要内容,如果未能解决你的问题,请参考以下文章