На уведомление Android FCM нельзя щелкнуть второй раз - PullRequest
0 голосов
/ 16 января 2019

У меня проблема с уведомлением.

Первый способ - я открываю свое приложение, затем я в первый раз отправляю уведомление из FCM, нажимаю на уведомление, мой код выполнен, я нажимаю снова во второй раз, нажимаю свое уведомление, мой код все еще выполняется, я пытаюсь больше время работает хорошо.

Второй способ - мое приложение все еще закрывается, я нажимаю уведомление из FCM в первый раз, затем нажимаю на уведомление, чтобы открыть мое приложение и выполнялся мой код, затем я нажимаю уведомление снова во второй раз, мой код НЕ выполняется, я попробуйте больше больше времени все еще не работает.

до тех пор, пока я не проведу свое приложение и не попытаюсь снова, проблема все еще возникает.

это мой код

class MyFirebaseMessagingService : FirebaseMessagingService() {
    var userInformation = AccountTableDao()
    val sp: SharedPreferences by lazy { SharedPreference.instance }
    val gad: GetAccountData by lazy { AccountDatabase.instance }

    override fun onNewToken(token: String) {
        super.onNewToken(token)
        Log.d("firebase", "INSTANCE ID ===> $token")
    }

    override fun onMessageReceived(remoteMessage: RemoteMessage?) {
        remoteMessage?.let {
            sendNotification(it.data)
        }
    }

    private fun sendNotification(messageData: Map<String, String>) {

        var status = messageData.get("status")
        val uuid = messageData.get("uuid")
        val restaurantId = messageData.get("restaurantId")

        val notificationManager: NotificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
        val titleText = messageData.get("title").toString()
        val contentText = messageData.get("body").toString()

        val intent = Intent(applicationContext, RestaurantMenuActivity::class.java)
        intent.putExtra(Argument.NOTIF_UUID, uuid)
        intent.putExtra(Argument.NOTIF_RESTAURANT_ID, restaurantId)
        intent.putExtra(Argument.NOTIF_STATUS, status)
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
        val pendingIntent = PendingIntent.getActivity(applicationContext,System.currentTimeMillis().toInt(), intent, PendingIntent.FLAG_UPDATE_CURRENT)

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
            val notificationChannel = NotificationChannel("appety", "appety_notification", NotificationManager.IMPORTANCE_HIGH)

            notificationManager .createNotificationChannel(notificationChannel)
            notificationManager.notify(System.currentTimeMillis().toInt(), NotificationCompat.Builder(this, "1")
            .setChannelId(System.currentTimeMillis().toString())
            .setContentTitle(titleText)
            .setStyle(NotificationCompat.BigTextStyle().bigText(contentText))
            .setContentText(contentText)
            .setSmallIcon(R.drawable.ic_check_black_24dp)
            .setLargeIcon( BitmapFactory.decodeResource(applicationContext.resources, R.drawable.logo_appety))
            .setContentIntent(pendingIntent)
            .setOngoing(false)
            .setAutoCancel(true)
            .setPriority(NotificationCompat.PRIORITY_HIGH)
            .setDefaults(NotificationCompat.DEFAULT_ALL)
            .setColor(ContextCompat.getColor(applicationContext, R.color.colorBonAppety))
            .build())
        }
        else{
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                notificationManager .notify(System.currentTimeMillis().toInt(), NotificationCompat.Builder(this, System.currentTimeMillis().toString())
                .setContentTitle(titleText)
                .setStyle (NotificationCompat.BigTextStyle().bigText(contentText))
                .setContentText(contentText)
                .setSmallIcon(R.drawable.ic_check_black_24dp)
                .setLargeIcon( BitmapFactory.decodeResource(applicationContext.resources, R.drawable.logo_appety))
                .setContentIntent(pendingIntent)
                .setOngoing(false)
                .setAutoCancel(true)
                .setPriority(NotificationCompat.PRIORITY_HIGH)
                .setDefaults(NotificationCompat.DEFAULT_ALL)
                .setColor(ContextCompat.getColor(applicationContext, R.color.colorBonAppety))
                .build())
            } else {
                notificationManager .notify(System.currentTimeMillis().toInt(), NotificationCompat.Builder(this, "1")
                .setContentTitle(titleText)
                .setStyle (NotificationCompat.BigTextStyle().bigText(contentText))
                .setContentText(contentText)
                .setContentIntent(pendingIntent)
                .setOngoing(false)
                .setAutoCancel(true)
                .setPriority(NotificationCompat.PRIORITY_HIGH)
                .setDefaults(NotificationCompat.DEFAULT_ALL)
                .build())
            }
        }
    }

    companion object {
        private val TAG = "token"
    }
}

и манифест

<service
        android:name=".service.MyFirebaseMessagingService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>

Почему Pending Intent не работает и как это исправить. Извините за мой английский и уважение.

1 Ответ

0 голосов
/ 23 января 2019

Вам следует попробовать метод setAutoCancel () при создании уведомления.

NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
NotificationCompat.Builder summary = new NotificationCompat.Builder(this);
summary.setAutoCancel(true);

А если вы передаете намерение в уведомлении, то используйте это

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent resultIntent = PendingIntent.getActivity(this, 0, intent,
                        PendingIntent.FLAG_ONE_SHOT); 
...