android - 使用开关按钮启用和禁用 Firebase 通知
问题描述
使用开关按钮启用和禁用 Firebase 通知。?我使用后端的 php 代码获取 fcm 令牌并将其放入数据库(phpmyadmin)中。然后我向应用程序生成推送通知。通知正确发出,但我无法阻止它。我想使用开关按钮启用和禁用通知。
public class FcmMsgService extends FirebaseMessagingService {
private static final String NOTIFICATION_CHANNEL_ID1 = "channel_id" ;
@Override
public void onMessageReceived(RemoteMessage remoteMessage)
{
String title = remoteMessage.getNotification().getTitle();
String message = remoteMessage.getNotification().getBody();
String click_action = remoteMessage.getNotification().getClickAction();
Intent intent = new Intent(click_action);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
NotificationCompat.Builder builder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID1);
builder.setContentTitle(title);
builder.setContentText(message);
builder.setSmallIcon(R.drawable.ic_notifications);
builder.setAutoCancel(true);
builder.setContentIntent(pendingIntent);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0, builder.build());
// super.onMessageReceived(remoteMessage);
}
}
主要活动
public class MainActivity extends AppCompatActivity {
Switch switchBtn;
SharedPreferences.Editor prefEditor;
SharedPreferences prefs;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sendBtn= findViewById(R.id.send_token);
prefEditor= PreferenceManager.getDefaultSharedPreferences(getBaseContext()).edit();
prefs=PreferenceManager.getDefaultSharedPreferences(getBaseContext());
switchBtn= findViewById(R.id.switch2);
switchBtn.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
if (switchBtn.isChecked())
{
// when i user enable button the notification can allowed to come
prefEditor.putString("checked","yes");
prefEditor.apply();
}
else
{
// when i user disable button the notification cannot allowed to come
//how to Stop the firebase notification?????
prefEditor.putString("checked","no");
prefEditor.apply();
}}
```[enter image description here][1]
[1]: https://i.stack.imgur.com/RY5yp.png
解决方案
通过主题启用通知:
FirebaseMessaging.getInstance()
.subscribeToTopic(yourTopic);
然后禁用:
FirebaseMessaging.getInstance().unsubscribeFromTopic(yourTopic);
在您的代码中:
if (switchBtn.isChecked()) {
// Subscribe here
FirebaseMessaging.getInstance().subscribeToTopic(yourTopic);
prefEditor.putString("checked","yes");
prefEditor.apply();
}
else {
// Subscribe here
FirebaseMessaging.getInstance().unsubscribeFromTopic(yourTopic);
prefEditor.putString("checked","no");
prefEditor.apply();
}
此外,由于此函数返回一个任务,您可以执行以下操作:
TopicManagementResponse response = FirebaseMessaging.getInstance().unsubscribeFromTopic(
registrationTokens, topic);
// See the TopicManagementResponse reference documentation
// for the contents of response.
System.out.println(response.getSuccessCount() + " tokens were unsubscribed successfully");
推荐阅读
- java - 使用 jgoodies-looks WindowsLookAndFeel 时 JMenu 看起来很奇怪
- java - HttpUrlConnection 忽略输入的值
- javascript - 在 window.onload 之外定义时,Javascript“clearInterval”方法无法停止计时器
- javascript - 致命错误:接近堆限制的无效标记压缩分配失败 - 使用 fs 处理大文件时 JavaScript 堆内存不足
- r - 强制对 R 包进行串行编译
- node.js - 超级账本结构调用注册端点失败并出现错误
- c# - Admob 插页式 Unity 3D 问题
- javascript - 为什么我必须使用 window.onload 将图像绘制到画布上
- sql - 根据存储过程参数更改 SQL Server 查询
- vb.net - 在 MS Access 数据库中选择最大值