2

Android App에 여러 명의 사용자가 있으며 다른 시간대에 여러 사용자가 로그인했을 수 있습니다.의도 된 사용자에게만 알림 표시

나는 특정 장치에 의미 특정 tokens에 알림을 보낼 Cloud Functions을 사용하고 있습니다,하지만 난 notification 만이 전송 된 사용자에게 표시됩니다 있는지 확인 할 수있는 방법을 찾을 수 없습니다.

AB 사용자가 동일한 기기의 내 앱에 로그인했다고 가정 해 보겠습니다. 받은 알림은 User A을 의미하지만 현재 로그인 한 사용자는 User B이며 User BUser A's 알림을 표시하지 않습니다.

String receiverEmail= remoteMessage.getData().get("sendTo"); 
String loggedEmail=firebaseUser.getEmail(); 
if (loggedEmail!=null){ 
    if (receiverEmail.equals(loggedEmail)){ 
    sendNotification(
     context.getString(R.string.your_friend_request_was_accepted), 
      context.getString(R.string.by)+" "+senderName); 
    } 
} 

을하고 앱이 실행되는 경우에만 작동합니다

FirebaseMessagingService에서이 방법을 확인하기 위해 노력했다. 그것은 닫힐 때 작동하지 않습니다.

또한 Shared Preferences에서 로그인 한 사용자를 확인하고 확인했지만 그 다음에 loggedEmailnull이고 전혀 작동하지 않았습니다.

답변

0

두 사용자가 동일한 앱 설치를 사용하고 있으므로 동일한 FCM 토큰으로 식별됩니다. 즉, 서버에서 분리 할 수있는 방법이 없으므로 메시지를 클라이언트의 올바른 사용자에게 전달해야합니다.

하지만 사용자가 현재 앱을 적극적으로 사용하지 않는 경우 알림 메시지가 시스템에서 처리됩니다. 이것은 현재 활성 사용자의 개념이 없다는 것을 의미하며, 시스템은 일반적인 알림을 표시합니다 (일반적으로 클릭하면 앱이 활성화 됨).

FCM이 실제로 이러한 알림을 타겟팅하는 데 가장 적합한 도구인지 고려해 보겠습니다. FCM은 FCM 토큰을 통해 가장 세부적인 레벨을 목표로하지만 UID (또는 이메일 주소)를 기준으로 타겟팅 할 가능성이 더 큽니다. Firebase Realtime Database를 사용하여 UID (또는 전자 메일 주소)로 메시지를 저장 한 다음 FCM을 사용하여 장치에 알림을 보내려합니다. 사용자가 알림 메시지를 클릭하면 앱이 시작되고 로그인 한 사용자의 데이터베이스에서 메시지를 검색 할 수 있습니다.

0

FCM 메시지의 json에 notification 노드가 있으면 시스템에서 자동으로 알림을 보냅니다. 앱이 백그라운드에 있으며 앱이 포 그라운드에있는 경우에만 FirebaseMessagingService으로 제공됩니다.

푸시 메시지에 이미 data 노드 (전송 대상 사용자를 식별하는 데 사용함)가 있으므로 notification 노드가 필요하지 않습니다. 푸시 메시지 json에서 알림 노드를 제거하면 흐름은 항상 FirebaseMessagingService으로 전달됩니다.