设置Firebase后,我收到使用Firebase控制台创建的通知,当我点击它时,我的应用程序会打开清单上声明的firstactivity
。
我想打开一个以detailactivity
为父级的特定firstactivity
。
我的清单:
...
<activity
android:parentActivityName=".views.main.MainActivity"
android:name=".views.detail.DetailActivity"
android:screenOrientation="portrait">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".views.main.MainActivity" />
</activity>
....
我的自定义FirebaseMessagingService:
Intent i = new Intent(this, DetailActivity.class);
Intent intent2 = new Intent(this, MainActivity.class);
i.putExtra(ProfileDescriptionActivity.USER_ID, 14);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(ProfileDescriptionActivity.class);
stackBuilder.addNextIntentWithParentStack(intent2);
stackBuilder.addNextIntent(i);
PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
.setAutoCancel(true)
.setDefaults(Notification.DEFAULT_SOUND)
.setContentTitle(title)
.setContentText(message)
.setSmallIcon(R.drawable.ic_notification)
.setContentIntent(pendingIntent);
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
manager.notify(0, builder.build());
如果我在应用程序关闭时收到通知,它会在通知栏中正确显示通知。但是当我点击打开时,firstactivity
。
当应用程序打开并收到通知时,进入通知中心会显示一个空白视图,正确打开我想要的活动。
有什么问题?感谢。
答案 0 :(得分:0)
要通过FCM自动打开应用程序,您需要使用data-message
,这样可以保证始终调用onMessageReceived()
方法。
例如,您的有效负载可能是:
{
"to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
"notification" : {
"body" : "great match!",
"title" : "Portugal vs. Denmark",
"icon" : "myicon"
},
"data" : {
"Nick" : "Mario",
"Room" : "PortugalVSDenmark"
}
}
为了测试发送此消息,您可以使用任何在线FCM测试人员,例如this。
答案 1 :(得分:0)
在FCM中,如果您的应用程序位于前台,则会在 FirebaseMessagingService 中调用 onMessageReceived ,如果应用程序在后台,则会在您声明的元数据中自动显示通知强> AndroidManifest 即可。
因此,在这种情况下,您必须处理 onMessageReceived 并生成通知。
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
// ...
}
如果要处理这两种情况,则意味着如果要处理这两种情况(前景中的背景),请不要在有效负载中发送通知对象。 例如
如果应用程序在后台,则不会调用 onMessageReceived ,如果应用程序在前台,则调用
。{
"to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
"notification" : {
"body" : "great match!",
"title" : "Portugal vs. Denmark",
"icon" : "myicon"
},
"data" : {
"Nick" : "Mario",
"Room" : "PortugalVSDenmark"
}
}
如果应用程序位于前景且后台,则将此更改为类似于以下有效内容,并且 onMessageReceived在两种情况下都会触发。 只发送数据有效负载而不是通知负载。 这不能通过FirebaseDashboard完成,这只能通过firebase api来发送消息。
{
"to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
"data" : {
"Nick" : "Mario",
"Room" : "PortugalVSDenmark"
}
}