实际上,我正在尝试通过点击activity
将意图传递给push-notification
,当应用程序出现在foreground
时,它正常工作。但是当应用程序处于后台时虽然我收到push-notification
但没有任何问题,但是通过点击该通知我没有意图activity
。我尝试在SO
中引用一些问题并尝试添加PendingIntent.FLAG_UPDATE_CURRENT
之类的标记,
PendingIntent.FLAG_ONE_SHOT
,然后是意图(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_SINGLE_TOP )
,但没有一个是有用的。请帮助我解决这个问题,这是过去两天的痛苦。
的Manifest.xml:
<activity android:name=".activities.ProfileHolder"
android:windowSoftInputMode="adjustPan"
android:screenOrientation="portrait"
android:exported="true"
android:launchMode="singleTop"
>
<intent-filter>
<action android:name="profile" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
Node.js中的通知代码:
var message = {
to: u.fcm_token,
collapse_key: 'white', //anything can be given
data: {
type:"likes",
post_owner_username:data.like_post_owner_username,
owner_post_time:data.like_post_owner_time
},
priority: 'high',
notification: {
title: 'Infinity',
body:notif_data,
sound: "default",
click_action: "profile",
tag:"Hey Bro" //if specified then current msg would be replaced by new msg
}
};
fcm.send(message, function(err, response){
if (err) {
console.log(err);
} else {
console.log("Successfully sent with response: ", response);
}
});
FirebaseMessagingService类:
/Varibales for notifications
String title, body, post_owner_username, post_owner_time, notif_commenter_username, notif_comment_time, follower_username,messager_username,type,action;
@Override
public void onMessageReceived(final RemoteMessage remoteMessage) {
title=remoteMessage.getNotification().getTitle();
body=remoteMessage.getNotification().getBody();
type=remoteMessage.getData().get("type");
action=remoteMessage.getNotification().getClickAction();
Log.d("type",type);
Log.d("type-2",title);
if(type.equals("likes")){
post_owner_username=remoteMessage.getData().get("post_owner_username");
post_owner_time=remoteMessage.getData().get("owner_post_time");
}
else if(type.equals("comments")||type.equals("comment_likes")){
post_owner_username=remoteMessage.getData().get("post_owner_username");
post_owner_time=remoteMessage.getData().get("owner_post_time");
notif_commenter_username=remoteMessage.getData().get("commenter_username");
notif_comment_time=remoteMessage.getData().get("comment_time");
}
else if(type.equals("follow")){
follower_username=remoteMessage.getData().get("follower_username");
}
else if(type.equals("messaging")){
messager_username=remoteMessage.getData().get("sender_username");
}
//Showing Notification
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(getApplicationContext(), Constants.CHANNEL_ID)
.setSmallIcon(R.drawable.new_icon)
.setContentTitle(title)
.setContentText(body);
Intent i = new Intent(action);
Bundle b = new Bundle();
if (type.equals("likes")) {
b.putString("post_owner_username", post_owner_username);
b.putString("post_owner_time", post_owner_time);
b.putString("what", "show_notification_post");
b.putString("Open","starred");
// i.putExtra("Open", "starred");
}
else if (type.equals("comments")) {
b.putString("post_owner_username",post_owner_username);
b.putString("post_owner_time", post_owner_time);
b.putString("notif_commenter_username", notif_commenter_username);
b.putString("notif_comment_time",notif_comment_time);
b.putString("what", "show_notification_post");
b.putString("Open","starred");
//i.putExtra("Open", "starred");
}
else if (type.equals("comment_likes")) {
b.putString("post_owner_username", post_owner_username);
b.putString("post_owner_time", post_owner_time);
b.putString("notif_commenter_username", notif_commenter_username);
b.putString("notif_comment_time", notif_comment_time);
b.putString("what", "show_notification_post");
b.putString("Open","starred");
// i.putExtra("Open", "starred");
}
else if (type.equals("follow")||type.equals("follow_request")) {
b.putString("searchUsername", follower_username);
b.putString("Open","search_profile");
//i.putExtra("Open", "search_profile");
}
else if(type.equals("messaging")){
b.putString("Open","messaging");
b.putString("msg_username",messager_username);
}
i.putExtras(b);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_SINGLE_TOP );
//ctx.startActivity(i);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 1, i, PendingIntent.FLAG_UPDATE_CURRENT);
/*
* Setting the pending intent to notification builder
* */
mBuilder.setContentIntent(pendingIntent);
NotificationManager mNotifyMgr =
(NotificationManager) getSystemService(NOTIFICATION_SERVICE);
if (mNotifyMgr != null) {
mBuilder.setAutoCancel(true);
mNotifyMgr.notify(1, mBuilder.build());
}
}
答案 0 :(得分:2)
我认为问题是因为您正在从fcm控制台发送通知!
来自文档
“当您的应用在用户设备的后台时,通知 被送到系统托盘。当用户点击时 通知,应用启动器会打开您的应用。如果你愿意,你可以 还添加客户端消息处理以在您的应用程序中接收通知 当它已经在用户设备的前台时。“
您应该尝试使用Fcm apis发送通知
<强>假设强> 我认为你使用api时不应该发送通知参数只发送数据参数并解析onMessageReceived中的数据如果你发送通知它会传递到系统托盘
How to handle notification when app in background in Firebase