使用切换按钮启用和禁用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);
}
}
Mainactiviy
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");
也许尝试取消订阅每个主题?
FirebaseMessaging.getInstance().unsubscribeFromTopic("YourTopic");
此外,还可以简化此代码:
switchBtn.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
prefEditor.putBoolean("checked", switchBtn.isChecked()).apply();
}
}