2016-06-28 5 views
5

디바이스 그룹 기능을 사용하는 어플리케이션을 개발하겠습니다. 내가 이해할 수 있듯이 나는 먼저 서버에 메소드 onTokenRefresh의 안드로이드 클라이언트에 도착한 현재 등록 토큰을 보내야하고 HTTP 요청을 통해이 등록 토큰을 적절한 장치 그룹에 추가합니다 (존재하지 않으면 생성). 그러나 Android 앱 사용자는 앱의 데이터를 여러 번 지울 수 있으므로 등록 토큰 누출 가능성이 있음을 알았습니다. 그것을 막는 방법? 20 명 한도를 초과하면 어떻게됩니까? 그리고 어떤 그룹이 이미 존재하는지 여부를 확인할 수 있습니까?Firebase 클라우드 메시징 디바이스 그룹 누출

+1

크로스 게시물 : https://groups.google.com/d/msg/firebase-talk/B8wG6CMC8lA/X6KvwaydAwAJ –

+0

개월 4 후에는 진전이 있습니까? 장치 그룹에서 만료 된 토큰을 어떻게 처리해야하는지 알고 싶습니다. 당신은 어떻게 든 디바이스를 유일하게 식별해야합니다 ... – Galya

+1

@Galya 디바이스 그룹을 사용하지 않기로 결정 했으므로, 간단히 디바이스 ID를 가진 주제를 사용합니다. – Matis

답변

3

내가 볼, 그러나, 응용 프로그램의 데이터 여러 번 닦아 예를 들어 안드로이드 응용 프로그램 사용자 수 있으므로, 등록 토큰을 누출의 가능성. 그것을 막는 방법?을 방지 하여이 앱 관리자에서 앱 데이터 지우기를 사용하지 의미하는 경우

,이 post를 참조해야합니다. accepted answer에는 불가능하다고 나와 있습니다.

그러나 Jakar's answer 대신 데이터 지우기의, 대신 표시됩니다 스페이스 관리 해결 방법을 제공합니다. 아직 시도하지 않았으므로 확신 할 수 없습니다. upvotes 자체에 대한 이야기지만.

그러나 지금까지 응용 프로그램의 데이터는 사용자가 삭제/닦아 경우, 당신은 FirebaseInstanceId 문서에 언급 된 내용으로 참조해야합니다 : 제외

인스턴스 ID가 안정적 일 때 :

  • 앱 인스턴스 ID를 삭제

  • 앱 새로운 장치에 복원
  • 사용자 /가

  • 사용자가 응용 프로그램 데이터

    새로운 Instance ID가 생성되는 위의 경우

를 지우고 응용 프로그램을 다시 설치 제거 응용 프로그램은 이전에 onTokenRefresh()를 구현 생성 된 토큰 인증을 다시해야합니다.


20 명의 제한을 초과하면 어떻게됩니까 ? ... 당신은 최대보다 더 많은 장치 그룹에 장치를 추가 관련된 경우 문제는 여기에있다 .. 그러나

확실하지

은 분명히에 명시된 찾을 수 없습니다 당신이 그룹에 추가에게 섹션을 참조하는 경우 FCM: Device Group Messaging 문서는하지만, 그것은 상태 :

성공적인 작업이 notification_key 반환합니다.만약 당신이 이미 이 끝나가는 장치 그룹에 다른 장치를 추가하려고하면

그래서 그에서, 내가 생각하는 작업이 을 실패합니다.

20 세 이상이라고 생각하면 Topics을 사용하는 것이 좋습니다.하지만 사용 사례가 무엇인지는 알 수 없으므로 전화를드립니다.


그리고 그것은 어떤 그룹이 이미 존재 여부를 확인하는 것이 가능하다? 이를 위해

, 당신은 notification_keynotification_key_name의 사용을해야합니다. docs 당 같이

notification_key_name 주어진 그룹에 고유 한 이름 또는 식별자 (예를 들어, 그것은 사용자 이름 일 수있다)이다. notification_key_namenotification_key은 등록 토큰 그룹에 고유합니다. 동일한 발신자 ID에 대해 여러 개의 클라이언트 앱이있는 경우 notification_key_name은 고유 한입니다. 이렇게하면 메시지는 의도 한 대상 응용 프로그램에만 전달됩니다.

그리고 문에 강조 : 장치 그룹의

기본 관리 - 그룹 생성 및 삭제, 추가하거나 제거 장치 - 일반적으로 응용 프로그램 서버를 통해 수행됩니다.

키와 이름은 서버에 있어야하며 이미 존재하는지 확인할 수 있습니다.

+2

"방지"란 등록 ID 누출을 막는 것을 의미합니다. 앱 데이터 삭제는 신속하게 누설하는 방법의 한 예일뿐입니다. 새 토큰이 할당되고 이전 토큰이 삭제되지 않으면 누출이 발생합니다. – Matis

+0

알겠습니다. - * 새 토큰이 할당되고 이전 토큰이 제거되지 않으면 누수가 발생합니다. * - 단순히 서버 측에서 처리되지 않습니까? Canonical Ids를 사용하고 있습니까? 다른 시나리오는 클라이언트 응용 프로그램 자체에서 처리해야합니까? –

+3

정식 ID는 해결책 일 수 있지만 FCM 문서 (GCM에만 해당)에는 명확하게 언급되지 않았습니다. https://firebase.google.com/docs/cloud-messaging/server#response에 대한 언급이 있지만 이러한 표준 ID가 반환되는 이유 또는시기는 설명하지 않습니다. 하지만 장치 그룹을 사용하고 싶기 때문에 그룹에 추가 할 때만 개별 장치의 등록 ID를 조작합니다. 마지막 질문을 명확히하고 싶습니다. 내 앱 서버에 그룹을 저장해야하지만 FCM 서버와 동기화되지 않는 경우가 있습니다. 따라서 그룹에 FCM 서버가 있는지 확인하고 싶습니다. 'notification_key_name '이 존재합니다. – Matis

2

현재 일부 성공을 거두고 있지만 아직 완전히 테스트 또는 조정되지 않았습니다.

앱은 firebase를 백엔드로 사용하고 푸시 알림을 구현하기 위해 FCM을 추가하고 있습니다.

사용자가 다른 장치 또는 여러 장치에있을 수있는 경우 처리 할 그룹이 필요합니다.

제가

profiles 
    -profile_id 
    -FCM 
     -notification_key:value 
     -registration_ids 
     -device_1_uuid:token_for_device_1 
     -device_2_uuid:token_for_device_2 

즉 프로파일과 각 장치에 대한 값 notification_key 돌아와 registration_id (토큰)를 저장하면 FCM 아래 데이터가 없음을 사용자가 제 징후 노드 즉 더 notification_key하지없고 registration_ids

사용자가 로그인 할 때마다 프로필 ID에 연결됩니다. 더 notification_key (모든 장치 즉, 처음으로) 나는 notification_key_name로 PROFILE_ID를 사용하여 그룹을 생성하고 돌아 오는 notification_key 저장이없는 경우

은 내가 FCM 토큰 다음

를 얻을.

새 기기에 notification_key (새 기기에 로그인 또는 첫 번째 로그인으로 돌아 가기)가있는 경우 현재 기기에 대한 registration_id가 있는지 확인하고 그렇지 않은 경우 (새 기기에 첫 번째 로그인) device_uuid : registration_ids에 대한 토큰 쌍.

(리턴 사인온) FCM 그룹에서 저장된 토큰을 제거하고 저장된 registration_ids의 이전 토큰을 방금 얻은 토큰으로 바꿉니다.

이제 해당 사용자 (프로필)가 자신의 profile_id로 전송하여 사용하는 모든 장치에 메시지를 보낼 수 있습니다. 이전 사용자를 삭제하기 때문에 토큰을 누출해서는 안됩니다.

그러나 그룹을 정리할 때마다 그룹과 토큰을 읽을 수있는 API가없는 것 같아서 알 수있는 방법이 없습니다.

또한 초기 코드가 도청되어 notification_key를 캡처하지 못해 이제는 내 그룹 중 하나에 추가, 제거 또는 아무 작업도 수행 할 수 없습니다. 나는 내가 불타는 구름을 계속 피난처 구름 속에 놓아 두어야한다는 생각이 싫다.

FCM이 더 많은 API 액세스를 제공하여 장소를 깔끔하게 유지할 수 있어야한다고 생각합니다.

+0

나는 거의 같은 접근 방식을 따르고 있는데, 나는 질문이있다. FCM은 연결된 장치가없는 경우 자동으로 장치 그룹을 삭제합니다. 이 사건을 어떻게 처리합니까? 내 이해에 따라 토큰이 더 이상 유효하지 않은 경우 해당 토큰이 자동으로 FCM의 그룹에서 제거됩니다. –

+0

장치에서 바뀌었기 때문에 그룹에서 토큰을 제거 할 때 마지막/유일한 토큰 인 경우 FCM 그룹이 삭제되고 새 토큰을 등록하려고하면 오류가 발생합니다. 해당 텍스트 메시지, 즉 "notification_key not found"로 오류를 트랩하고 이전에 사용한 것과 동일한 notification_key를 가진 새 그룹을 다시 만들고 토큰을 추가하도록 create_group 함수를 호출합니다. 조금 해킹 된 느낌이지만 비슷한 방식으로 새 장치에 대한 추가 토큰을 등록하는 조건으로 "notification_key already exists"오류 텍스트를 사용합니다. – blythburgh

+0

네, 지금이 방법을 다루는 방법입니다. 그러나 좀 더 나은 접근 방법이 있는지 궁금 해서요. –

관련 문제