使用开关启用和禁用推送通知

2024-04-20

我正在使用 firebase 推送通知(FCM)..并且我想使用切换按钮启用和禁用通知。

为此,我共享了启用和禁用通知的首选项,但似乎我的逻辑根本不起作用。

开关打开或关闭没有任何区别。我仍然收到通知。

我需要帮助谢谢。

活动: -

  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");

    }

}

偏好助手:--

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()
}

}

使用主题的方法(需要帮助):---------

     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()
        }

    })

这段代码的问题是它一开始不起作用(它在打开和关闭时都收到通知),在打开关闭(切换按钮)后它起作用(当打开收到通知而关闭不收到通知时)。


FirebaseMessagingService即使应用程序不在前台,也会在后台运行,因此您将无法使用以下命令获取首选项applicationContext。 您应该使用主题消息传递 -https://firebase.google.com/docs/cloud-messaging/android/topic-messaging https://firebase.google.com/docs/cloud-messaging/android/topic-messaging

在交换机的更改监听器中使用它:

要启用推送通知 -

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

禁用推送通知 -

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

这样,您将通知 Firebase 您不想收到有关特定主题的通知。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用开关启用和禁用推送通知 的相关文章

  • 居中复选框视图

    如果除了 或代替 复选框之外 您还对单选按钮感兴趣 请参阅this https stackoverflow com questions 16701806 centering views 2而是提问 尽管存在
  • Notification.Builder 中 setGroup() 的用途是什么?

    我对目标的理解有些困难setGroup http developer android com reference android app Notification Builder html setGroup java lang String
  • 如何限制firebase中的字符串长度

    我在 firebase 数据库中工作 我需要限制字符串字段的长度 我怎么做 到该字段的路径是 Col1 doc1 描述 也就是说 从集合 col1 开始 然后进入 doc1 然后对于 doc1 下的所有集合以及该集合下的所有文档 描述字段需
  • 通过我的应用程序以编程方式插入新联系人,而不使用 Intent

    我正在使用一个应用程序 与手机联系人进行交互 我想将新联系人添加到我的手机联系人列表中 我已经尝试过以下代码 但它不起作用 void addContact Context ctx PreviewContactModel model Arra
  • Android-全屏视频视图

    我正在尝试使此 VideoView 以全屏模式显示 public class ViewVideo extends Activity private String filename private static final int INSER
  • Android相当于javascript的setTimeout和clearTimeout?

    setTimeout 有一个答案https stackoverflow com a 18381353 433570 https stackoverflow com a 18381353 433570 它没有提供我们是否可以像在 JavaSc
  • Android 导航回到 Activity;不要重新加载父级

    我有一个场景 我单击 ListFragment 并启动一个新的 Activity 如下所示 public void onListItemClick ListView l View v int position long id super o
  • 错误 libGL.so:无法使用 Android 模拟器打开共享对象文件

    我试图在 Ubuntu 12 04 64 位 中运行 android 模拟器 但是 我收到以下错误 Starting emulator for AVD emulatr Failed to load libGL so error libGL
  • opencv人脸检测示例

    当我在设备上运行应用程序时 应用程序崩溃并显示以下按摩 java lang UnsatisfiedLinkError 无法加载 detector based tracker findLibrary 返回 null 我正在使用 OpenCV
  • Dialogflow Fulfillment Webhook 调用失败

    I am new to dialogflow fulfillment and I am trying to retrieve news from news API based on user questions I followed doc
  • Proguard - 找不到任何超级类

    我收到此错误 Unexpected error while performing partial evaluation Class org apache log4j chainsaw Main Method
  • 如何从webkit浏览器中检测Android版本和品牌?

    如何通过webkit浏览器检测Android版本和品牌 可靠吗 我相信你可以检查用户代理 但是 我认为它不安全 因为有很多方法可以用来欺骗用户代理 在谷歌上搜索这个问题给了我们很多答案 它甚至可以在默认浏览器上运行 您只需输入 about
  • 活动组代码示例

    有人可以给我一些使用活动组的示例代码吗 我的应用程序中有一些按钮 我想将活动应用于这些按钮 目前我正在使用 setVisibility 但我被告知活动组将是更好的选择 这是另一个ActivityGroup 示例项目 http richipa
  • 与 Dagger 一起使用时,Espresso 生成 FileNotFoundException

    我一直在研究旧版 Android 应用程序 尝试为其添加测试和适当的架构 该应用程序有一个主要LaunchActivity它在启动时运行一系列检查 最初 该活动使用 Dagger 来 注入依赖项 活动将使用它来运行检查 但效果相当糟糕 我转
  • InAppMessage 一旦显示就会自动消失

    您好 我最近将 InAppMessaging 添加到我的项目中 这似乎很容易集成 但对我来说并没有按预期工作 首先 我将其添加到 build gradle 中 implementation com google firebase fireb
  • 在 Android ADT Eclipse 插件中滚动布局编辑器

    有谁知道当布局编辑器的内容溢出一个 屏幕 时如何滚动这些内容 我说的是在设计时使用 ADT 布局编辑器 而不是在物理设备上运行时滚动 效果很好 关闭 Android 布局编辑器中的剪辑 切换剪辑 按钮位于 Android 布局编辑器的右上角
  • 如何在 Android 中保存 Edittext 中的文本而不丢失文本的粗体、斜体等功能

    我想做的就是从 Edittext 中获取文本 该文本具有粗体和斜体等功能 并将其保存在文本文件中 但是当我读回并显示它时 这些功能丢失了 它们不显示 如何通过将文本保存在文本文件或任何文件中来保持丰富的功能 您可以使用Html toHtml
  • 为什么 ExpandableListView 更改 ChildView 设置(Android)?

    我对使用 ExpandableListView 有疑问 就我而言 我有两个组视图和两个子视图 而子视图由一个带有多个按钮 文本视图等的相对布局组成 例如 当首先扩展第二组并对视图持有者进行一些更改并随后扩展第一组时 先前所做的更改也会自动应
  • Android:如何在布局中放置纯色矩形?

    我有一个可以很好地膨胀的relativelayout 我想在顶部添加一个跨越布局宽度的纯色矩形 我尝试将以下内容放入我的 xml 中
  • Android UnityPlayerActivity 操作栏

    我正在构建一个 Android 应用程序 其中包含 Unity 3d 交互体验 我已将 Unity 项目导入 Android Studio 但启动时该 Activity 是全屏的 并且不显示 Android 操作栏 我怎样才能做到这一点 整

随机推荐