在我的应用程序中,我已经实现了推送通知功能。我为用户添加了一个按钮,这使他可以完全关闭通知。但是,当我挖掘出来时它不起作用。这是代码段:
来自MainActivity:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FirebaseMessaging.getInstance().subscribeToTopic("test_topic");
((SwitchCompat)findViewById(R.id.notification_switch)).setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked) {
Toast.makeText(MainActivity.this, "Switch activated ", Toast.LENGTH_LONG).show();
FirebaseMessaging.getInstance().subscribeToTopic("test_topic");
}else {
Toast.makeText(MainActivity.this, "Switch deactivated ", Toast.LENGTH_LONG).show();
FirebaseMessaging.getInstance().unsubscribeFromTopic("test_topic");
new Thread(new Runnable() {
@Override
public void run() {
try {
FirebaseInstanceId.getInstance().deleteInstanceId();
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
}
});
}
firebasemessagingservice类处理消息:
public class MyFirebaseMessagingService extends FirebaseMessagingService {
public static String TAG = MyFirebaseMessagingService.class.getName();
@Override
public void onMessageReceived(RemoteMessage remoteMessage){
super.onMessageReceived(remoteMessage);
Log.e(TAG, "onMessageReceived() --> " + remoteMessage.getNotification().getTitle());
}
// @Override
// public void onNewToken(String s) {
// super.onNewToken(s);
// Log.e(TAG, "onNewToken() --> " + s);
// }
}
当我尝试使用主题发送通知时,我不会收到任何通知。如果我通过应用程序将通知发送给所有设备,我仍然会收到通知。我如何完全防止我的应用获取通知?
取消注册和取消订阅
客户端应用程序可以用来停止从应用服务器接收消息和/或主题订阅的三种方法:
instanceID deleteToken((将受众设置为应用程序服务器的发件人ID,并将范围设置为GCM。这会从特定的应用程序服务器
停止消息(包括主题消息(instanceid deleteid((。这会停止所有以前的注册和所有应用服务器的主题订阅的消息
gcmpubsub unsubscribe((。这停止了从应用服务器的特定主题
的主题消息对于FCM,应该是FirebaseInstanceId。
尝试在FirebaseInstanceId.getInstance().deleteInstanceId()
之前设置setAutoInitEnabled(false)
。启用后,FCM如果没有有效的一个,并且删除新的令牌,则在应用程序启动上生成注册令牌。/strong>(。此设置在应用程序重新启动中持续存在,并覆盖清单中指定的设置。
默认情况下,FCM自动启动启用。
有关更多信息:firebasemessaging