【问题标题】:Android FCM Notification Cannot Be Clicked Second Time无法第二次点击 Android FCM 通知
【发布时间】:2019-01-16 02:59:20
【问题描述】:

我的通知有问题。

第一种方式 - 我打开我的应用程序,然后我第一次从 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 不起作用以及如何解决该问题。 对不起我的英语和尊重。

【问题讨论】:

  • 尝试添加 PendingIntent.FLAG_ONE_SHOT|PendingIntent.FLAG_UPDATE_CURRENT。对于请求代码,我相信你应该这样做 (int) (System.currentTimeMillis() % Integer.MAX_VALUE) 而不是使用 System.currentTimeMillis().toInt()。 Int 的最小值为 -2,147,483,648,最大值为 2,147,483,647。
  • 我还是没有工作。

标签: android firebase kotlin firebase-cloud-messaging android-notifications


【解决方案1】:

您应该在创建通知时尝试 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); 

【讨论】:

  • 我想我已经将 setAutoCancel() 设置为 true
  • 如果你设置了setAutoCancel(true),那么在你点击它之后,通知就会从通知托盘中消失。如果它不起作用,请尝试 PendingIntent 属性的其他选项,如以下PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT)
猜你喜欢
  • 2017-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-03
  • 2016-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多