推送通知无法正常工作
Push Notification Not Works Properly
我在 Android 中创建了聊天应用程序。
因为我在推送通知时遇到问题。
问题是:
- 当用户A向用户X发送消息时,X得到推送。
- 之后用户 B 向用户 X 发送消息,因此 X 获得第二个推送。
然后用户X点击用户A聊天界面推送不打开,但是点击用户B聊天界面推送打开。
如何解决这个问题。
PendingIntent contentIntent;
UserSessionManager userSession = new UserSessionManager(context);
if (type.equals("2"))
{
if (userSession.getUserSession() != null = PendingIntent.getActivity(
context,
0,
new Intent(context, ChatActivity.class)
.putExtra("to_id", from_id)
.putExtra("username", username)
.putExtra("to_avt", to_avt)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP),
PendingIntent.FLAG_UPDATE_CURRENT);
}
else
{
contentIntent = PendingIntent.getActivity(context, 0, new Intent(context,
SplashActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK),
PendingIntent.FLAG_UPDATE_CURRENT);
}
}
mBuilder.setContentIntent(contentIntent);
mNotificationManager.notify(Integer.parseInt(from_id), mBuilder.build());
谢谢!!!
你的问题在这里:
contentIntent = PendingIntent.getActivity(
context,
0,
new Intent(context, ChatActivity.class)
.putExtra("to_id", from_id)
.putExtra("username", username)
.putExtra("to_avt", to_avt)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP),
PendingIntent.FLAG_UPDATE_CURRENT);
此代码每次都会覆盖 PendingIntent
。所以你将永远只有一个 PendingIntent
(包含最新的一组 "extras")。
您需要确保为每个不同的聊天会话生成不同的 PendingIntent
。要使 PendingIntent
唯一,您可以生成唯一的 "Intent action" 或使用唯一的 requestCode
参数。
如果我们假设 from_id
是每个会话的唯一整数,您可以将其用作 requestCode
,如下所示:
contentIntent = PendingIntent.getActivity(
context,
from_id, // unique requestCode
new Intent(context, ChatActivity.class)
.putExtra("to_id", from_id)
.putExtra("username", username)
.putExtra("to_avt", to_avt)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP),
PendingIntent.FLAG_UPDATE_CURRENT);
或者如果 username
是一个唯一的字符串,您可以像这样将其用作 "Intent action":
contentIntent = PendingIntent.getActivity(
context,
0,
new Intent(context, ChatActivity.class)
.setAction(username) // Unique ACTION
.putExtra("to_id", from_id)
.putExtra("username", username)
.putExtra("to_avt", to_avt)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP),
PendingIntent.FLAG_UPDATE_CURRENT);
这些解决方案中的任何一个都将确保您为每个会话生成一个单独的 PendingIntent
。
我在 Android 中创建了聊天应用程序。
因为我在推送通知时遇到问题。
问题是:
- 当用户A向用户X发送消息时,X得到推送。
- 之后用户 B 向用户 X 发送消息,因此 X 获得第二个推送。
然后用户X点击用户A聊天界面推送不打开,但是点击用户B聊天界面推送打开。
如何解决这个问题。
PendingIntent contentIntent;
UserSessionManager userSession = new UserSessionManager(context);
if (type.equals("2"))
{
if (userSession.getUserSession() != null = PendingIntent.getActivity(
context,
0,
new Intent(context, ChatActivity.class)
.putExtra("to_id", from_id)
.putExtra("username", username)
.putExtra("to_avt", to_avt)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP),
PendingIntent.FLAG_UPDATE_CURRENT);
}
else
{
contentIntent = PendingIntent.getActivity(context, 0, new Intent(context,
SplashActivity.class).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK),
PendingIntent.FLAG_UPDATE_CURRENT);
}
}
mBuilder.setContentIntent(contentIntent);
mNotificationManager.notify(Integer.parseInt(from_id), mBuilder.build());
谢谢!!!
你的问题在这里:
contentIntent = PendingIntent.getActivity(
context,
0,
new Intent(context, ChatActivity.class)
.putExtra("to_id", from_id)
.putExtra("username", username)
.putExtra("to_avt", to_avt)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP),
PendingIntent.FLAG_UPDATE_CURRENT);
此代码每次都会覆盖 PendingIntent
。所以你将永远只有一个 PendingIntent
(包含最新的一组 "extras")。
您需要确保为每个不同的聊天会话生成不同的 PendingIntent
。要使 PendingIntent
唯一,您可以生成唯一的 "Intent action" 或使用唯一的 requestCode
参数。
如果我们假设 from_id
是每个会话的唯一整数,您可以将其用作 requestCode
,如下所示:
contentIntent = PendingIntent.getActivity(
context,
from_id, // unique requestCode
new Intent(context, ChatActivity.class)
.putExtra("to_id", from_id)
.putExtra("username", username)
.putExtra("to_avt", to_avt)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP),
PendingIntent.FLAG_UPDATE_CURRENT);
或者如果 username
是一个唯一的字符串,您可以像这样将其用作 "Intent action":
contentIntent = PendingIntent.getActivity(
context,
0,
new Intent(context, ChatActivity.class)
.setAction(username) // Unique ACTION
.putExtra("to_id", from_id)
.putExtra("username", username)
.putExtra("to_avt", to_avt)
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
| Intent.FLAG_ACTIVITY_SINGLE_TOP),
PendingIntent.FLAG_UPDATE_CURRENT);
这些解决方案中的任何一个都将确保您为每个会话生成一个单独的 PendingIntent
。