如何在不单击的情况下将通知标题或主体保存在背景中



我正在使用一个应用程序,其中我必须使用Firebase保存来自服务器的所有通知。我可以保存哪些通知即将出现在前景中,如果通知在后台出现,但如果我单击通知,我可以保存,我可以保存它。但是我主要关心的是,用户是否刷新通知或清除通知,这意味着用户不会单击通知,那么我该如何保存。有什么方法吗?请帮助我找到解决方案。

您可能有一个延伸FirebaseMessagingService的类,因此您可以在onMessageReceived函数上进行操作。您可以使用semotemessage函数getData()请参阅ge消息有效载荷的文档。您可以从那里访问标题和其他信息。当然,您需要了解收到的通知的结构。因此,要回答您的问题,您可以通过简单地将其保存在FirebaseMessagingServiceonMessageReceived方法中,可以保存通知信息。

FCM停止接收通知,当该应用被杀死时,请参见。因此,您最好的方法是按照建议的 @D10进行操作,并在云功能中实现保存和发送。这是如何发送通知的示例。您需要使您的应用程序将通知令牌保存到实时数据库中,以便云功能可以读取并将通知发送给正确的用户。

要将令牌保存到实时数据库中,您需要在FirebaseInstanceIdService中添加一些代码,特别是在onTokenRefresh方法中。您可以在数据库中具有称为令牌的位置,并且可以使用用户ID创建对象。因此,您可以将令牌添加到服务器中:

DatabaseReference ref = database.getReference("tokens");
Map<String, String> users = new HashMap<>();
users.put(userUID, token);
ref.setValueAsync(users);

将在onMessageReceived(RemoteMessage remoteMessage)remoteMessage对象中收到来自服务器的通知,您将获得titlebody,您可以将其存储在SQLITE或共享Preference中。 例如: -

  class FBMessagingService extends FirebaseMessagingService {
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        Log.i("PVL", "MESSAGE RECEIVED!!");
        if (remoteMessage.getNotification().getBody() != null) {
            Log.i("PVL", "RECEIVED MESSAGE: " + remoteMessage.getNotification().getBody());
        } else {
            Log.i("PVL", "RECEIVED MESSAGE: " + remoteMessage.getData().get("message"));
        }
    }
} 

onMessageReceived将在每个状态下获得事件:-kill,背景,前景。

如果用户未在应用中打开通知,则无法保存通知,因此,如果他刷了通知,则无法将其保存在应用程序中。

一个选项是将云功能用于firebase:https://firebase.google.com/docs/functions/

因此,您可以创建一个向用户发送通知的函数,然后添加代码以添加您要寻找的行为:发送通知时,保存它。

@suppress('debecation&quot;(类myfirebasemessagingservice:firebasemessagingservice(({

val TAG = "FirebaseMessagingService"
@SuppressLint("LongLogTag")
override fun onMessageReceived(remoteMessage: RemoteMessage) {
    Log.d(TAG, "sent phone: ${remoteMessage.from}")
    if (remoteMessage.notification != null) {
        showNotification(remoteMessage.notification?.title, remoteMessage.notification?.body)
    }
}
private fun showNotification(title: String?, body: String?) {
    val databaseHelper = DatabaseHelper(this)
    // sharedPreferences=this.getSharedPreferences("SHARED_PREF" , Context.MODE_PRIVATE)
    val intent = Intent(this, MenuscreenActivity::class.java)
    databaseHelper.insertData(title, body, databaseHelper.FIRST_TABLE_NAME)
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
    val pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT)
    startActivity(intent)
    val soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
    val notificationBuilder = NotificationCompat.Builder(this)
        .setSmallIcon(R.mipmap.ic_launcher)
        .setContentTitle(title)
        .setContentText(body)
        .setAutoCancel(true)
        .setSound(soundUri)
        .setContentIntent(pendingIntent)
    val notificationManager =
        getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
    notificationManager.notify(0, notificationBuilder.build())
}

}

@suppress('dobecation&quot;(类myfirebasemessagingservice:firebasemessagingservice(({

val TAG = "FirebaseMessagingService"
@SuppressLint("LongLogTag")
override fun onMessageReceived(remoteMessage: RemoteMessage) {
    Log.d(TAG, "sent phone: ${remoteMessage.from}")
    if (remoteMessage.notification != null) {
        showNotification(remoteMessage.notification?.title, remoteMessage.notification?.body)
    }
}
private fun showNotification(title: String?, body: String?) {
    val databaseHelper = DatabaseHelper(this)
    // sharedPreferences=this.getSharedPreferences("SHARED_PREF" , Context.MODE_PRIVATE)
    val intent = Intent(this, MenuscreenActivity::class.java)
    databaseHelper.insertData(title, body, databaseHelper.FIRST_TABLE_NAME)
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
    val pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT)
    startActivity(intent)
    val soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
    val notificationBuilder = NotificationCompat.Builder(this)
        .setSmallIcon(R.mipmap.ic_launcher)
        .setContentTitle(title)
        .setContentText(body)
        .setAutoCancel(true)
        .setSound(soundUri)
        .setContentIntent(pendingIntent)
    val notificationManager =
        getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
    notificationManager.notify(0, notificationBuilder.build())
}

}

相关内容

  • 没有找到相关文章

最新更新