在应用关闭时单击 Firebase 通知后打开特定的活动/片段
Posted
技术标签:
【中文标题】在应用关闭时单击 Firebase 通知后打开特定的活动/片段【英文标题】:Open particular activity/fragment after clicking on Firebase notification when app is closed 【发布时间】:2017-02-16 08:43:33 【问题描述】:我知道这个问题似乎是重复的,但是为了我的要求,我在网上搜索了很多帖子,但没有任何对我有用。
我的要求
我正在使用 Firebase 来获取推送通知。打开应用程序时意味着一切正常,但我的问题是,如果收到任何推送通知,应用程序处于后台/关闭意味着我想在单击该通知时打开特定的活动或片段,但它总是打开启动器/主要活动。
为此,我尝试了以下场景
场景 1
使用bundle
将通知数据从FirebaseMessagingService
传输到启动器/主活动,并根据我重定向到特定活动/片段的捆绑数据
场景 2
通过使用Sharedpreference
场景 3
通过使用intent.putExtra
按照上述情况,当应用打开时一切正常,但如果我的应用关闭意味着它总是重定向到主/启动器活动
我的代码
Intent intent = new Intent(this, MainActivity.class);
intent.putExtra("reqTo", messageBody);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(title)
.setContentText(messageBody)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, notificationBuilder.build());
那么,有没有人知道在应用关闭时单击 Firebase 推送通知时如何打开特定的活动/片段。
【问题讨论】:
请检查我的回答。如果你仍然有问题给我回复我会帮助你 【参考方案1】:public void showNotificationMessage(final String title, final String message, Intent intent)
// Check for empty push message
if (TextUtils.isEmpty(message))
return;
// notification icon
final int icon = R.drawable.logo;
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
final PendingIntent resultPendingIntent =
PendingIntent.getActivity(
mContext,
0,
intent,
PendingIntent.FLAG_CANCEL_CURRENT
);
final NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
mContext);
final Uri alarmSound = Uri.parse(ContentResolver.SCHEME_android_RESOURCE
+ "://" + mContext.getPackageName() + "/raw/notification");
showSmallNotification(mBuilder, icon, title, message, resultPendingIntent, alarmSound);
playNotificationSound();
private void showSmallNotification(NotificationCompat.Builder mBuilder, int icon, String title, String message, PendingIntent resultPendingIntent, Uri alarmSound)
NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
inboxStyle.addLine(message);
Notification notification;
notification = mBuilder.setSmallIcon(icon).setTicker(title).setWhen(0)
.setAutoCancel(true)
.setContentTitle(title)
.setContentIntent(resultPendingIntent)
.setSound(alarmSound)
.setStyle(inboxStyle)
.setSmallIcon(R.drawable.logo)
.setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(), icon))
.setContentText(message)
.build();
NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(Config.NOTIFICATION_ID, notification);
private void showBigNotification(Bitmap bitmap, NotificationCompat.Builder mBuilder, int icon, String title, String message, PendingIntent resultPendingIntent, Uri alarmSound)
NotificationCompat.BigPictureStyle bigPictureStyle = new NotificationCompat.BigPictureStyle();
bigPictureStyle.setBigContentTitle(title);
bigPictureStyle.setSummaryText(html.fromHtml(message).toString());
bigPictureStyle.bigPicture(bitmap);
Notification notification;
notification = mBuilder.setSmallIcon(icon).setTicker(title).setWhen(0)
.setAutoCancel(true)
.setContentTitle(title)
.setContentIntent(resultPendingIntent)
.setSound(alarmSound)
.setStyle(bigPictureStyle)
.setSmallIcon(R.drawable.logo)
.setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(), icon))
.setContentText(message)
.build();
NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(Config.NOTIFICATION_ID_BIG_IMAGE, notification);
您可以像这样检查应用是否关闭
if (!NotificationUtils.isAppIsInBackground(getApplicationContext()))
【讨论】:
希望对您有所帮助。你必须在这个函数中传递意图 兄弟我也面临同样的问题:-( 我想我们必须进去聊天 当应用程序在前台时一切正常,但当应用程序关闭或在后台时我无法打开特定的活动/片段。这是我正在使用的代码dropbox.com/s/6rphjkh6k6w27u8/FireBase.zip?dl=0。 让我们continue this discussion in chat。【参考方案2】:这与我在这里给出的答案非常相似:https://***.com/a/41441631/1291714
不过,总而言之,您需要使用 Firebase 云消息传递而不是 Firebase 通知,以便在后台接收消息并进行自定义处理。您需要向客户端发送“数据”消息,然后在您的服务中,您将始终收到回调,无论应用程序处于前台还是后台。
使用 Firebase 通知,您只会在应用处于前台时收到回调。当应用程序在后台时,系统会为用户处理和显示通知。您将无法自定义此通知以打开不同的意图。
在此处阅读更多信息:https://firebase.google.com/docs/notifications/android/console-audience
【讨论】:
以上是关于在应用关闭时单击 Firebase 通知后打开特定的活动/片段的主要内容,如果未能解决你的问题,请参考以下文章
Phonegap 推送插件。单击通知后打开特定的应用程序视图
单击firebase的通知时,在设备的浏览器中打开URL而不直接到App