Ich verwende Firebase-Benachrichtigungen, um Benutzer über neue Daten zu informieren, die in der App gepostet wurden. Ich folge dem hier gegebenen Beispiel: https://github.com/firebase/quickstart-android/tree/master/messagingWie wird die Firebase-Benachrichtigung nur verschoben, wenn CheckBoxPreference aktiviert ist?
Obwohl ich auch den Benutzer bevorzugen. Sie sollten nur benachrichtigt werden, wenn sie sich dafür entschieden haben, benachrichtigt zu werden, indem sie das CheckBoxPreference
überprüfen.
Ich habe die CheckBoxPreference
und auch die onPreferenceChangeListener
erfolgreich eingestellt. Das Problem ist, dass der Benutzer die Benachrichtigung erhält, selbst wenn die CheckBox
deaktiviert ist.
Hier ist, was ich in SettingsActivity
getan haben:
public class SettingsActivity extends PreferenceActivity {
private AppCompatDelegate mDelegate;
Preference myPref;
boolean isChecked = true;
private static final String TAG = "SettingsActivity";
public static final String RECEIVE_NOTIFS = "receiveNotifications";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
getDelegate().installViewFactory();
getDelegate().onCreate(savedInstanceState);
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.preferences);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
myPref = (CheckBoxPreference) findPreference(RECEIVE_NOTIFS);
myPref.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object o) {
isChecked = Boolean.valueOf(o.toString());
if (isChecked) {
Toast.makeText(getBaseContext(), "Checked", Toast.LENGTH_SHORT).show();
if (getIntent().getExtras() != null) {
String remoteMessage = getIntent().getExtras().getString("remoteMessage");
sendNotification(remoteMessage);
} else {
Toast.makeText(getBaseContext(), "Error!", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(getBaseContext(), "Unchecked", Toast.LENGTH_SHORT).show();
}
return true;
}
});
}
public void sendNotification(String messageBody) {
Intent intent = new Intent(this, SettingsActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
PendingIntent.FLAG_ONE_SHOT);
Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle("FCM Message")
.setContentText(messageBody)
.setAutoCancel(true)
.setSound(defaultSoundUri)
.setContentIntent(pendingIntent);
NotificationManager notificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
}
ich in obigen Code eindeutig angegeben haben, dass Benachrichtigung sollte nur dann gesendet werden, wenn CheckBoxPreference
geprüft.
Hier MyFirebaseMessagingService.java
Code der Datei:
public class MyFirebaseMessagingService extends FirebaseMessagingService {
private static final String TAG = "MyFirebaseMsgService";
/**
* Called when message is received.
*
* @param remoteMessage Object representing the message received from Firebase Cloud Messaging.
*/
// [START receive_message]
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
// TODO(developer): Handle FCM messages here.
// If the application is in the foreground handle both data and notification messages here.
// Also if you intend on generating your own notifications as a result of a received FCM
// message, here is where that should be initiated. See sendNotification method below.
Log.d(TAG, "From: " + remoteMessage.getFrom());
Log.d(TAG, "Notification Message Body: " + remoteMessage.getNotification().getBody());
Intent intent = new Intent(this, SettingsActivity.class);
intent.putExtra("remoteMessage", remoteMessage.getNotification().getBody());
startActivity(intent);
}
// [END receive_message]
}
Was ich tue, ist hier ich remoteMessage
als Intent sende an die SettingsActivity
und es in sendNotification()
Verfahren dort verwendet wird.
Also, was ich will ist, dass ich möchte, dass der Benutzer nur benachrichtigt wird, wenn sie gewählt haben, indem Sie die CheckBoxPreference
überprüfen.
Bitte lassen Sie mich was mache ich hier falsch.
wo senden Sie eine Benachrichtigung aus? die Konsole? – Shubhank
@Subhank Ich habe dich nicht bekommen. Es tut uns leid. Bitte sag das noch deutlicher. –
"Ich verwende Benachrichtigungen, um Benutzer zu benachrichtigen", wie werden Sie die Benutzer benachrichtigen? Ich denke, mit benutzerdefinierten Server oder Firebase-Konsole – Shubhank