push notification enable and disable by using switch

穿精又带淫゛_ 提交于 2021-01-09 12:46:56

问题


im using firebase push notification(FCM)..and i want to enable and disable notifications by switch button

for that i have shared preferences to enable and disable notifications but it seems my logic is not at all working

if turn on and off switch still it is receiving notifications

need help thanks

activity:--

  val sharedPreferences = getSharedPreferences("myname", MODE_PRIVATE)

    simpleSwitch.setChecked(sharedPreferences.getBoolean("SWITCH_PARTIDOS_STATE", false))

    simpleSwitch.setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener { buttonView, isChecked ->
        sharedPreferences.edit().putBoolean("SWITCH_PARTIDOS_STATE", isChecked).commit()
        if (isChecked) {
           // FirebaseMessaging.getInstance().subscribeToTopic("Partidos")

            Toast.makeText(applicationContext, "Activado Correctamente",
                Toast.LENGTH_LONG).show()
        } else {
          //  FirebaseMessaging.getInstance().unsubscribeFromTopic("Partidos")
            Toast.makeText(applicationContext, "Desactivado Correctamente",
                Toast.LENGTH_LONG).show()
        }
        PreferenceHelper.prefernceHelperInstace.setBoolean(applicationContext, Constants.MessageNotificationKeys.ENABLE_NOTIFICATION, true);

    })

firebasemessagingservice:---

  override fun onMessageReceived(remoteMessage: RemoteMessage) {
    super.onMessageReceived(remoteMessage)
    if (PreferenceHelper.prefernceHelperInstace.getBoolean(getApplicationContext(),
            Constants.MessageNotificationKeys.ENABLE_NOTIFICATION, true)
    ) {
        Log.d("msg", "onMessageReceived: " + remoteMessage.notification?.body)
        val intent = Intent(this, HomeActivity::class.java)
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
        val pendingIntent =
            PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT)
        val channelId = "Default"
        val builder: NotificationCompat.Builder = NotificationCompat.Builder(this, channelId)
            .setSmallIcon(R.mipmap.ic_launcher)
            .setContentTitle(remoteMessage.getNotification()?.getTitle())
            .setContentText(remoteMessage.getNotification()?.getBody()).setAutoCancel(true)
            .setContentIntent(pendingIntent)
            .setStyle(NotificationCompat.BigTextStyle()
                .bigText(remoteMessage.getNotification()?.getBody()))

        val manager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager?
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            val channel = NotificationChannel(
                channelId,
                "Default channel",
                NotificationManager.IMPORTANCE_DEFAULT
            )
            manager!!.createNotificationChannel(channel)
        }
        manager!!.notify(0, builder.build())
    }
    else {
        Log.e("TAG", "ReactFireBaseMessagingService: Notifications Are Disabled by User");

    }

}

preferencehelper:--

class PreferenceHelper private constructor() {
fun setBoolean(appContext: Context?, key: String?, value: Boolean?) {
    PreferenceManager.getDefaultSharedPreferences(appContext).edit()
        .putBoolean(key, value!!).apply()
}

fun getBoolean(
    appContext: Context?, key: String?,
    defaultValue: Boolean?
): Boolean {
    return PreferenceManager.getDefaultSharedPreferences(appContext)
        .getBoolean(key, defaultValue!!)
}

fun getInteger(appContext: Context?, key: String?, defaultValue: Int): Int {
    return PreferenceManager.getDefaultSharedPreferences(appContext)
        .getInt(key, defaultValue)
}


companion object {
    val prefernceHelperInstace = PreferenceHelper()
}

}

using the method of topic(need help ):---------

     val sharedPreferences = getSharedPreferences("myname", MODE_PRIVATE)

    simpleSwitch.setChecked(sharedPreferences.getBoolean("SWITCH_STATE", false))

    simpleSwitch.setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener { buttonView, isChecked ->
        sharedPreferences.edit().putBoolean("SWITCH_STATE", isChecked).commit()
        if (isChecked) {
            // FirebaseMessaging.getInstance().subscribeToTopic("Partidos")
  FirebaseMessaging.getInstance().subscribeToTopic("main_notification");
         

            Toast.makeText(applicationContext, "enabled notification",
                Toast.LENGTH_LONG).show()
        }
        else {
            FirebaseMessaging.getInstance().unsubscribeFromTopic("main_notification");
            Toast.makeText(applicationContext, "disabled notification",
                Toast.LENGTH_LONG).show()
        }

    })

the problem of this code is it doesnt worked at first(it recieves notification at on off both) after switching on off (switching buttons) it works(when on recives notification and off doesnt recive)

need help


回答1:


FirebaseMessagingService runs in the background even when the app's not in the foreground so you won't be able to get the preferences using applicationContext. You should use Topic messaging - https://firebase.google.com/docs/cloud-messaging/android/topic-messaging

Use this in your switch's change listener:

To enable push notifications -

FirebaseMessaging.getInstance().subscribeToTopic("your_topic");

To disable push notifications -

FirebaseMessaging.getInstance().unsubscribeFromTopic("your_topic");

This way you will notify Firebase that you don't want to get notifications about a particular topic.



来源:https://stackoverflow.com/questions/65424508/push-notification-enable-and-disable-by-using-switch

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!