0
Firebase経由で通知を受け取ることができるAndroidアプリがあります。これらの通知は、Webサイト上のユーザーアクションによってトリガーされます。その後、APIはFirebaseに通知要求を送信します。Androidアプリは通知を受け取り続ける
最近、私のアプリはノンストップの通知を受け続けるという問題にぶつかってきました。これは直接通知とトピックメッセージの両方で起こっているようです。 最初はAPIが何らかのループで停止していると思っていましたが、Firebaseコンソールから直接送信する通知でこのようなことは起こりません。私自身の理論では、Firebaseは通知が宛先のデバイスに到着しなかったと考えて、それを再送信しています。
私のアプリのiOS版にはこの問題はないようです。
マイonMessageReceived()
:
@Override
public void onMessageReceived(RemoteMessage message) {
Log.d(getClass().getName(), "Received notification");
Map data = message.getData();
try {
String scope = (String) data.get("scope");
if(scope == null){
Log.w(getClass().getName(), "Received notification with no scope");
return;
}
String senderName = (String) data.get("senderName");
String notificationMessage = (String) data.get("message");
SharedPreferences notificationPreferences = getSharedPreferences(Constants.PREF_NOTIFICATION_SETTINGS, 0);
switch(scope){
case Constants.NOTIFICATION_SCOPE_PROTOCOL:
handleProtocolUpdateMessage(data);
return; // PROTOCOL notifications are not stored in DB
case Constants.NOTIFICATION_SCOPE_USERSETTINGS:
handleUserSettingsUpdateMessage(data);
return; // USERSETTINGS notifications are not stored in DB
case Constants.NOTIFICATION_SCOPE_DEVICE:
if(notificationPreferences.getBoolean(Constants.PREF_DEVICE_NOTIFICATION_FILTER, true)){
updateUnreadNotificationCounter();
createNotification(scope, senderName, notificationMessage);
}
break;
case Constants.NOTIFICATION_SCOPE_INVENTORY:
if(notificationPreferences.getBoolean(Constants.PREF_INVENTORY_NOTIFICATION_FILTER, true)){
updateUnreadNotificationCounter();
createNotification(scope, senderName, notificationMessage);
}
break;
case Constants.NOTIFICATION_SCOPE_JOURNAL:
if(Application.test(this)){
return;
}else{
if(notificationPreferences.getBoolean(Constants.PREF_JOURNAL_NOTIFICATION_FILTER, true)){
updateUnreadNotificationCounter();
createNotification(scope, senderName, notificationMessage);
}
}
break;
case Constants.NOTIFICATION_SCOPE_SUPPLY:
if(notificationPreferences.getBoolean(Constants.PREF_SUPPLIES_NOTIFICATION_FILTER, true)){
updateUnreadNotificationCounter();
createNotification(scope, senderName, notificationMessage);
}
break;
case Constants.NOTIFICATION_SCOPE_SYSTEM:
if(notificationPreferences.getBoolean(Constants.PREF_SYSTEM_NOTIFICATION_FILTER, true)){
updateUnreadNotificationCounter();
if (Application.test(this)) {
createNotification(scope, "A", notificationMessage);
} else {
createNotification(scope, "B", notificationMessage);
}
break;
}
break;
default:
//If scope doesn't match any known scopes then return
return;
}
saveNotification(data);
}catch(ClassCastException e){
Log.e(getClass().getName(), "Error while parsing notification contents", e);
}
}
理解を深めるためにコードを投稿してください。 – Raj
@Raj関連するコードを追加しました。 – Anubis
ok createNotificationメソッドのコードも投稿してください。一意の通知IDがnotifyメソッドを渡したことを確認してください – Raj