仅在用户启用时发送通知
Sending notifications only when user enables it
我的应用程序中有一个 ToggleButton,用户可以在其中打开或关闭通知。我设法创建了一个 class,其中保存了按钮的状态,因此即使在关闭应用程序后,最后选择的状态也会显示:
public class SetFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_set, container, false);
ToggleButton toggle = view.findViewById(R.id.simpleSwitch);
toggle.setChecked(readState());
toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
Log.e("aaaaa","checked");
// The toggle is enabled
} else {
Log.e("aaaaa","not checked");
// The toggle is disabled
}
saveState(isChecked);
}
});
return view;
}
private void saveState(boolean isFavourite) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());
sharedPreferences.edit().putBoolean("State", isFavourite).apply();
}
private boolean readState() {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());
return sharedPreferences.getBoolean("State", true);
}
}
现在的问题是,如何只向那些在应用程序中启用了此选项的用户发送通知?现在我可以向所有用户发送通知了。
我想如果检查我的 MyFirebaseMessagingServiceclass
中的 readState
,如果它是真的那么做 sendNotification
否则什么都不做。
我的想法是否正确?
如果您使用自己的服务器进行推送通知。
向启用用户发送推送通知的最佳方式是调用 API 以在服务器端维护标志。从服务器,您可以仅向那些启用了从设备推送的用户发送推送通知。所以你不需要在Android设备端处理任何事情。
如果您使用 Firebase Dashboard 进行推送通知。
无论是否显示推送,您都必须在本地维护推送。
但最好的建议是从服务器端维护它。
好的,现在我可以确认这是最简单的解决方案。打开按钮时,我使用 FirebaseMessaging.getInstance().subscribeToTopic("NEWS");关闭时,我使用取消订阅。然后通过 Postman 我向主题发送通知和数据(所以我不需要等到主题出现在 Firebase 控制台中)。我测试了它,工作正常。当我打开时 - 通知来了,关闭了,不来了。感谢大家对我的帮助。
我的应用程序中有一个 ToggleButton,用户可以在其中打开或关闭通知。我设法创建了一个 class,其中保存了按钮的状态,因此即使在关闭应用程序后,最后选择的状态也会显示:
public class SetFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_set, container, false);
ToggleButton toggle = view.findViewById(R.id.simpleSwitch);
toggle.setChecked(readState());
toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if (isChecked) {
Log.e("aaaaa","checked");
// The toggle is enabled
} else {
Log.e("aaaaa","not checked");
// The toggle is disabled
}
saveState(isChecked);
}
});
return view;
}
private void saveState(boolean isFavourite) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());
sharedPreferences.edit().putBoolean("State", isFavourite).apply();
}
private boolean readState() {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());
return sharedPreferences.getBoolean("State", true);
}
}
现在的问题是,如何只向那些在应用程序中启用了此选项的用户发送通知?现在我可以向所有用户发送通知了。
我想如果检查我的 MyFirebaseMessagingServiceclass
中的 readState
,如果它是真的那么做 sendNotification
否则什么都不做。
我的想法是否正确?
如果您使用自己的服务器进行推送通知。
向启用用户发送推送通知的最佳方式是调用 API 以在服务器端维护标志。从服务器,您可以仅向那些启用了从设备推送的用户发送推送通知。所以你不需要在Android设备端处理任何事情。
如果您使用 Firebase Dashboard 进行推送通知。
无论是否显示推送,您都必须在本地维护推送。 但最好的建议是从服务器端维护它。
好的,现在我可以确认这是最简单的解决方案。打开按钮时,我使用 FirebaseMessaging.getInstance().subscribeToTopic("NEWS");关闭时,我使用取消订阅。然后通过 Postman 我向主题发送通知和数据(所以我不需要等到主题出现在 Firebase 控制台中)。我测试了它,工作正常。当我打开时 - 通知来了,关闭了,不来了。感谢大家对我的帮助。